平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

Portal Engine 学习与设计

Wow的室内环境,奥格瑞玛/血色修道院等,是由wmo文件代表的sector组成的,从解析出来的sector三维景象来看,是很明显的portal sector,比如甬道被格成单独的wmo,每个wmo sector有明显的portal开口.

Portal引擎和BSP是可以一起使用的,不相互排斥,对每个sector的处理将采用BSP算法,这个概念很关键.Portal的另一个重要作用是将室外环境和室内环境在算法逻辑上联系起来.

可以确定,Wow的室内碰撞检测是使用BSP来完成的,其BSP为Leafy BSP. Leafy BSP使用的切分平面可以不与场景中的多边形共面,切分平面目前只看到X,Y,Z三轴,定义等同Quake3源码中的定义.
在碰撞检测中,BSP数据最神奇的地方就在于,它能够快速地给出人物附近的三角面集合,即需要进行碰撞检测的三角形集合.

若将Leaf上的数据全设0,则进入游戏后,室内场景就没有碰撞了.
此BSP除了碰撞检测,还对室内的渲染有影响.

Most engines do not use the BSP-tree to speed up the drawing, such as portal engines, but still almost all of them have built a BSP-tree out of the geometry. This is because of the great advantage when calculating the collision detection, namely that it is very cheap to position the user in the BSP-tree. When that is done, the only polygons needed to be checked; are the polygons in the leaves the object passed through that frame.

References:
http://www.flipcode.com/articles/portals_issue01.shtml
Core Techniques and Algorithms in Game Programming
http://www.devmaster.net/articles/bsp-trees/
http://www.karkza.org/ftp/programming/misc/bsp.htm
http://www.devmaster.net/articles/bsp-trees-physics/

posted on 2006-08-22 12:53 linghuye 阅读(2562) 评论(7)  编辑 收藏 引用 所属分类: MyWarCraftStudio3D图形学研究

评论

# re: Portal Engine 学习与设计  回复  更多评论   

你好
我是个3D初学者,对BSP树略知一二
在wmo文件里有"MOBN"后面存储这室内场景的BSP树结点
但是似乎wmo里只给出分割后的树,我没有找到切分平面信息
看起来是切分平面似乎都是象你文章里写的平行X,Y,Z三面,但是具体位置
在哪呢?望解答 谢谢
2006-11-22 14:07 | 老顾

# re: Portal Engine 学习与设计  回复  更多评论   

依平面方程 D 为 fDist.
2006-11-23 09:10 | linghuye

# re: Portal Engine 学习与设计  回复  更多评论   

明白了
原来short planetype指的是切分平面类型,可得A,B,C
fDist指的是D
那碰撞检测就剩一个问题了:如何判断人物处在那个Group里~
比如一艘船,有4个Group,船体一个,船舱里有3个,如何判断是否进入船舱?
2006-11-23 12:35 | 老顾

# re: Portal Engine 学习与设计  回复  更多评论   

See
http://www.cnitblog.com/linghuye/archive/2006/10/20/18206.html
我管group叫sector.
2006-11-24 23:17 | linghuye

# re: Portal Engine 学习与设计  回复  更多评论   

根据已有的数据来渲染并不难,难的是产生这些portal数据。
不知道暴雪是怎么编辑类似于暴风城这个大场景的,是一个一个建筑导出,在编辑器中摆放的,还是根本就是整个场景就是在max里做好的。
它的portal是自己手动摆上去的,还是自动生成的?
看起来像是手动摆放的,自动生成的不会那么规整,也有可能是自动生成后手动地减去一些portal,不过那样更麻烦。
我猜想是整个暴风城都是在max里做的,手动摆上portal,然后导出时自动切割,产生分散的wmo group文件。
胡思乱想
2006-12-06 23:53 |

# re: Portal Engine 学习与设计  回复  更多评论   

今天突然发现stormwind_046.wmo里的movi块的大小是130000多个字节,我直接除以2,得到的vertex index的个数大约是66000个,超出了16bit了,难道是我哪的地方错了?
2006-12-07 12:12 |

# re: Portal Engine 学习与设计  回复  更多评论   

之前没发现moba这个块,导致vertex index出错了
2006-12-07 15:08 |
只有注册用户登录后才能发表评论。