郴州动画数学课件之场景图的三角面片生成BSP树制作
这样,对于三维空间中任意n个物体组成的场景S,对应的BSP树可以定义为一棵具有如下性质的二 叉树T: 树T的叶子节点是物体或被分割面H切开的物体碎片。
树T的中间节点是分割平面H:,左子树对应H,一空间,右子树对应H,+空间。即左于树空间中的 物体S满足:aJ+~+cz十d<0。右子树空间中的物体S满足:+,.1.十枷十,《叶d>0。
图3.5(a)表示一个场景,图3.5(b)是对应的BSP表示树。场景中包含三个物体..B,l’和D与2个 分割面Pl和尸:。尸,将物体AB分成A和B场景中包含t个物体Ali,l,和I,'j两个分割面尸I和尸:。 C,D-起处于BSP树的叶子中,而BSP两部分,树的巾间竹点就是分割面P1,和尸:。它们与分割后物体 在树中的位置指示了物体在场景巾所处的1蔓域。 第3章 角色*33D —/、\《 尸罗 ≤、+叉\/X (b)图3.5 场景及其BSP树表示3.3.4 构造BSP树 虽然在建立BSP树的过程要尽量选择优化的分割面,使得最终生成的BSP树的规模较小,但划分时 分割面的选取仍然具有很大的自由度和任意性。实际中常用的两种分割面的选取方式是:
(1)选择与某个轴垂直的平面作为分割面。
(2)直接使用场景图中物体的三角面片所在的平面作为分割面。 由于使用与轴垂直的平面作为分割面可能会引入更多的分割面,所以应当直接使用场景中物体的 三角面片所在的平面作为BSP树的分割平面。 由三维场景中物体的三角面片生成BSP树的算法如下: BSP树TalgorithmBSPConstnjct(场景图的三角面片集合S) { if(S包含1个三角面片) | 直接生成BSP树T,S存储在T中 return T l else(将第一个三角面片S。所在平面P。作为分割面) { T十=algorithmBSPconstruct(位于扩空间的三角面片集合) T-=algorithmBSPconstruct(位于环空间的三角面片集合) H=S, return T } }
上述算法能够根据三维场景的三角面片集合S得到对应的BSP树,但由于每次分割时,直接使用第 一个三角面片S。所在的平面尸。作为分割面,而这个平面的位置并不一定是最优的,这使得整个算法 的稳定性下降。该算法生成BSP树的效率,或者说是生成的I3SP树的 *flash动画创作与后期视频处理技术*规模,主要取决于三角面片集合的输入顺序。如果能够有一种较 好的三角面片的选取策略,则可以提高生成BSP树的效率。
转载请注明:
郴州flash动画制作公司:http://www.flash520.com/city104/