资源描述:
《游戏开发实验4,5》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验四:基于BSP技术的室内场景渲染和碰撞检测一、实验目的掌握BSP的原理,熟悉Ogre中基于BSP技术的室内场景渲染的使用方法.二、实验仪器Vs2005OGRE三、实验原理及过程网上检索BSP相关技术BSP技术作为室内引擎渲染的主流技术虽然已经存在多年,但是生命力仍然非常顽强,最新的DOOM3,HL2仍然将它作为渲染的主流技术,但是在网上对它介绍文章虽然多却非常浅显,大多是使用Q3的BSP文件进行渲染,而BSP文件如何产生则介绍非常少,盖因为这一部分是场景编辑器的工作,而完成一个这样的BSP编辑器是
2、非常困难的,需要掌握的知识非常多.下面我将对BSP编辑器这一部分需要用到的BSP知识进行一下介绍,这只是一些很初步的知识,如希望了解更多的内容,Q2开源代码中有一个BSP编辑器的代码是你研究的重点,还有就是HL2泄露代码中的编辑器代码,(一个痛苦的研究过程,可能要花费你几个月甚至一年的时间,不过这是值得的,如果你想完成一个主流的射击游戏引擎的话,没有BSP编辑器是不可想象的).BSPTreesBSPTrees英文全称为BinarySpacePartioningtrees,二维空间分割树,简称为二叉树。
3、它于1969年被Shumacker在文章《StudyforApplyingComputer-GeneratedImagestoVisualSimulation》首次提出,并被ID公司第一次使用到FPS游戏Doom中,Doom的推出获得了空前的成功,不仅奠定了ID公司在FPS游戏开发的宗师地位,也使BSP技术成为室内渲染的工业标准,从BSP产生到现在已经有30多年了,其间虽然产生了大量的室内渲染的算法,但却无人能撼动它的地位,对于以摩尔定律发展的计算机业来说这不能不是一个奇迹。为什么使用BSPTrees
4、一个BSPTrees如同它的名字一样是一个层次树的结构,这个树的叶节点保存了分割室内空间所得到的图元集合。现在随着硬件加速Z缓冲的出现,我们只需要用很小的代价就可以对空间中的图元进行排序,但是在90年代初由于硬件的限制,使用BSP的主要原因是因为它可以对空间中的图元进行排序来保证渲染图元的顺序是按照由后至前进行的,换句话说,Z值最小的物体总是最后被渲染。当然还有其他的算法可以完成这个功能,例如著名的画家算法,但是它与BSP比较起来速度太慢了,这是因为BSP通常对图元排序是预先计算好的而不是在运行时进行
5、计算。从某种意义上说BSP技术实际上是画家算法的扩展,正如同BSP技术的原始设计一样,画家算法也是使用由后至前的顺序对场景中的物体进行渲染。但是画家算法有以下的缺点:1.如果一个物体从另一个物体中穿过时它不能被正确的渲染;2.在每一帧对被渲染的物体进行排序是非常困难的,同时运算的代价非常大;3.它无法管理循环覆盖的情况,如图所示BSP原理建立BSP Trees的最初想法是获得一个图元的集合,这个集合是场景的一部分,然后分割这个图元集合为更小的子集合,这里必须注意子集合必须为“凸多边形”。这意味着子集合
6、中任一个多边形都位于相同集合中其它多边形的“前面”。是不是有点难以理解呢,举一个例子,如果多边形A的每一个顶点都位于由多边形B所组成的一个面的正面,那么可以说多边形A位于多边形B的“前面”,参考左图。我们可以想象一下,一个盒子是由6个面组成的,如果所有的面都朝向盒子的内部,那么我们可以说盒子是一个“凸多边形”,如果不是都朝向盒子的内部,那么盒子就不是“凸多边形”。 对于一个BSP层次树来说可以用下面结构来定
7、义:classBSPTree{BSPTreeNodeRootNode//树的根节点}classBSPTreeNode{BSPTreeTree//接点所属的层次树BSPTreePolygonDivider//位于两个子树之间的多边形BSPTreeNode*RightChild//节点的右子树BSPTreeNode*LeftChild//节点的左子树BSPTreePolygonPolygonSet[]//节点中的多边形集合}classBSPTreePolygon{3DVectorPoint1//多边形的顶
8、点13DVectorPoint3//多边形的顶点23DVectorPoint3//多边形的顶点3}部分函数及功能函数: CLASSIFY-POINT参数: Polygon–确定一个3D空间中点相对位置的参考多边形。 Point–待确定的3D空间中的点。返回值:点位于多边形的哪一边。功能: 确定一个点位于被多边形定义的面的哪一边。函数: POLYGON-INFRONT参数: Polygon1–用来确定其它多边形是否在其“前面”的多边