游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4133|回复: 13

bsp的疑惑

[复制链接]

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 2009-5-18 11:07:00 | 显示全部楼层 |阅读模式
1,bsp是用于室内场景管理的吗?室外什么场景管理算法?
2,如果选择多边形作为分割面,bsp的层次会不会很深,才能保证渲染顺序的正确?
3,bsp不能实时生成吧,如果对场景生成了bsp,那场景中的运动物体要怎么确定渲染顺序?
4,bsp如何用于碰撞检测?想不明白在有运动物体的时候要怎么做?
谢谢大家!

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-5-18 17:51:00 | 显示全部楼层

Re:bsp的疑惑

1.对于大部分划分技术,比如bsp,quadtree,octree,k-d tree,portal(pvs)都既可以用于室内,也可以用于室外,应该根据每个游戏场景的复杂度,来选择合适的方法,而不是简单的分为室内室外

2.三角形级别的bsp分割已经过时了,深度取决于你希望的bsp细分粒度,渲染顺序不应该依赖于场景分割方式

3.使用动态的数据管理动态物体

4. 哦,这个太复杂了,一两句说不清,呵呵

广告:http://www.cnblogs.com/clayman/category/191001.html

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-5-18 19:14:00 | 显示全部楼层

Re:bsp的疑惑

如果不使用三角形级别的划分,那是如何确定分割面的?
动态的数据是什么呢?
碰撞请指点下方向吧,谢谢啊。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-5-18 20:15:00 | 显示全部楼层

Re:bsp的疑惑

以物体或者说包围盒作为场景划分的最小单元
另外我建议你可以尝试一下k-d tree,k-d tree其实就是axis aglined bsp
动态的数据结构指的是动态的空间划分方式,比如bsp,octree的结构将随动态物体分布的改变而改变

碰撞检测根据精度要求的不同,方法也不一样,最基本的就是基于包围盒的碰撞检测

ps:看了我给你的链接没有,那里面说的要详细一点

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-5-18 20:41:00 | 显示全部楼层

Re:bsp的疑惑

我还以为你真的打广告...
以物体或者说包围盒作为场景划分的最小单元
的意思是子空间至少包含一个物体或包围盒?

动态的bsp,octree,kdtree的意思是物体位置改变时,改变bsp,octree,kdtree的全部或一部分?

我现在知道使用bhv为物体建立碰撞层次,但这个结构要如何与场景管理结构配合使用呢?
是不是只对处在同一子空间中的物体做碰撞判断?
我觉得bsp把空间划得太细了,一个物体被划得支离破碎的,我没做过bsp只是看资料后这么觉得。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-5-18 21:37:00 | 显示全部楼层

Re:bsp的疑惑

我觉得bsp把空间划得太细了,一个物体被划得支离破碎的

古时候的硬件渲染每一个三角形都非常昂贵,所以才使用bsp把物体打的很碎,而对现代显卡来说,这样的优化已经逐渐失去意义。

假设你的场景中有100个人物,每个人物都有一个相应的包围盒,理想情况下,每一次分割时,都把物体平均分为2半比如:100-->50/50-->25/25-->.......直到合适的粒度,比如当子空间中的包围盒小于n时,就不在划分。如果有物体正好位于划分平面,那个这个物体将同时添加到所属的2个子空间。

如果你看了我给的链接,我实际上是把动态和静态物体分开的,静态物体的空间划分是预处理好的。
对于动态物体,任何固定规则划分方式都是没有意义的,对一般应用来说,动态物体的数量一般不会太多。假设128*128的区域内,有10个动物体,用quadtree对场景进行4级划分,最小的网格为16*16,那么其中大量节点都是空的,或者称为退化节点。这些冗余的节点不但占用大量空间,而且会影响检测效率。
通常,当检测到有大于或者等于n个退化节点时,就应该对树进行重建,改变细分层次,调整细分空间,可以对整体也可以是部分重建。理想情况下,不应该有退化节点,并且每个节点中的对象个数应该相等。

BVH弹性非常大,你既可以让整个动态树就是一个bvh,也可以仅仅对某个对象使用bvh。
以人体为例,整个人体有包围盒A,A中又包括了头部B,躯干C,四肢d,e,f,g,四肢有可以包含手指脚趾的包围盒,有以下树形结构:
A------B
   |---C---h.i......  
   |---D---......
   |---E
   |---F
   |---G   

当做视锥剔除时,可能只需要检测视锥是否和A相交,当碰撞检测时,如果另一个物体和A发生碰撞,那么有可能需要继续检测是否与b,c,d,e,f相交等等,以返回最终结果。bvh中的层次越多,精度也越高,计算量也越大。

13

主题

113

帖子

113

积分

注册会员

Rank: 2

积分
113
发表于 2009-5-19 12:16:00 | 显示全部楼层

Re:bsp的疑惑

楼上非常强大,KD树确实比BSP要快,BSP要点乘然后判断,KD不用点乘.

楼上牛牛,能否讲一讲怎么管理场景中的动态物体呢?如果动态物体有一定的活动范围,还好搞.但是任意变化的动态物体......无论用四叉,八叉,BSP......都会出现某个时间,一个物体同时存在于几个节点的情况......怎么呢?

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-5-19 17:55:00 | 显示全部楼层

Re:bsp的疑惑

想学习空间分割有关的数据结构和算法, 该看什么书好呢?

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-5-19 18:00:00 | 显示全部楼层

Re:bsp的疑惑

对于bsp还是有很多不明白的地方,如何与动态场景管理配合,以及如何利用bsp做快速碰撞判断。
还是先看看书实践实践再问吧,不然问什么都不知道。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-5-20 02:17:00 | 显示全部楼层

Re: Re:bsp的疑惑

小学生: Re:bsp的疑惑

都会出现某个时间,一个物体同时存在于几个节点的情况......怎么呢?


一般用一个flag表示某个物体被多个空间节点引用
这样在碰撞,或者culling的时候就可以避免重复检测

另外有些类似 loose octree,loose k-d tree之类的结构允许空间节点之间有相互重叠的部分,保证某个物体总是在一个节点里
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 07:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表