3D游戏中的BSP二叉空间分割技术.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3D游戏中的BSP 二叉空间分割 技术 ? BSP(二叉空间分割)树是另一种类型的空间分割技术,其已经在游戏产业上应用了很多年(Doom是第一个使用BSP树的贸易游戏).尽管在今天BSP树已经没像过往那么受欢迎了,但现在仍在广泛地采用这项技术. 当你看一下BSP在碰撞检测方面那极度干净漂亮和高速的效率,立即能让你眼前一亮.不但BSP树在多边形剪切方面表现出色,而且还能让我们有效地自由运用world-object式的碰撞检测.BSP树的遍历是使用BSP的一个基本技术.碰撞检测本质上减少了树的遍历或有哪些信誉好的足球投注网站.这种方法很有用由于它能在早期排除大量的多边形,所以在最后我们仅仅是对少数面进行碰撞检测.正如我前面所说的,用找出两个物体间的分隔面的方法适合于判定两个物体是否相交.假如分隔面存在就没有发生碰撞.因此我们递回地遍历world树并判定分割面是否和包围球或包围盒相交.我们还可以通过检测每一个物体的多边形来进步精确度.进行这种检测最简单的一个方法是测试看看物体的所有部分是否都在分割面的一侧.这种运算真的很简单,我们用迪卡尔平面等式ax+by+cz+d=0往判定点位于平面的哪一侧.假如满足等式,点在平面上;假如ax+by+cz+d 0那么点在平面的正面;假如ax+by+cz+d 0点在平面的背面. 在碰撞没发生的时候有一个重要的事情需要留意,就是一个物体(或它的包围盒)必须在分割面的正面或背面.假如在平面的正面和背面都有顶点,说明物体与这个平面相交了.(以上载选自百度百科) Bsp分割算法简述 Preview BSP分割算法也是有不少文章可以鉴戒的,就我目前能把握的资料来看,泛泛而谈者大有人在,实际往作的时候却总是抓瞎.知道是什么永远不如知道怎么做,BSP分割是BSP分析的基础,固然它很简单,但是,假如连简单的都不会做,又怎么能胜任复杂的工作呢? 趁这段时间有空,遂埋头钻研BSP,一周之后,分割和自动Portal天生均已解决,遂做此文,希看能对初学者有所帮助,亦希看能抛砖引玉,众位高手能不吝赐教. 本文先就BSP中相对简单的分割部分做一个简单的先容,自动Portal天生的资料正在整理,希看能尽快放出. BSP的基本原理 试想我们生活的空间,肯定是由为数众多的天花板、墙壁和地板组成,对于每一个板,都将空间分为板前和板后两个部分.已知人的位置,就可根据人在板前还是在板后,知道人所能看到的物体的遮挡顺序(e.g.假如人在板前,则板前的物体遮挡所有板后的物体). BSP者,原理很简单:它试图将所有的板(在BSP中叫做平面)组织成一棵树,每个平面均将它所在的空间分割为前后两个部分,这两个部分又分别被另外的平面分割成更小的空间hh直到最后,按照前面所说的算法,确定每一个房间(在BSP中叫做叶子)相对于眼睛的遮挡顺序. 这是一个非常标准的二分法,仅按照前和后两个逻辑上的概念来切分空间家长为给孩子争取进园名额排队等候一夜(图),这使得它在以房间为单位组成的室内场景里是不二之选.为什么?请接着看: 在判定遮挡顺序的时候,BSP空间的算法极为简单:只需要从树根开始,简单判定人的位置与所有平面的前后关系:前则正子树(在平面前方的空间)在前,负子树(在平面后方的空间)在后;后则正子树在后,负子树在前.以此递回到叶子(叶子总是一个房间),就可以确定人处于哪一个房间之中、其他房间的遮挡关系如何. 这个实在很简单:由于所有的平面均将其所处的空间分为前后两个部分,所以,每一个房间,均是由若干平面的前后来决定的,通过人与这些平眼前后关系的判定,自然而然就可以直接定位到所需的房间之中了.这就是BSP算法的特别之处. 如图:空间ABC由A、B、C三个独立的房间组成,首先,分割平面1将空间分成了平面正向的A房间和平面负向的BC空间,BC空间被2紧接着分割为平面2正向的C房间和负向的B房间.留意这里平面的方向一般由墙壁面向的方向而定. 假如有一个人处于C房间内,那么如何判定所有房间的遮挡顺序呢?从树根开始,由于人处于平面1的后面,所以,BC空间应该先于A房间(后:先负后正),然后,由于人处于分割平面2的前面,所以,C房间应该先于B房间(前:先正后负).这样,整个房间离人由近到远的顺序就可以确定了:C-B-A.仅需要通过两次平面的前后判定(总共六次乘法、两次加法、两次大小判定),就可以确定空间的先后顺序,算法的威力可见一斑! BSP分割的目标是将空间划分为一个个叶凸体,也就是一个凸面体.一个个凸面体才有排序的可能,很难想象一个非凸面体在空间中如何排序.如图左:从箭头方向看过往,到底凹多面体A是在B的前面?还是B在凹多面体A的前面?而假如是右边的,两个凸多面体,情况就不一样了,A和B方向的前后,根据视点的位置永远是唯一的.这就是BSP的上风,只需要知道视点的位置,空间所有凸体的位置顺序

文档评论(0)

shujukd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档