锦州四叉树的场景划分4步骤动画演讲制作
基于四叉树的场景划分步骤包括以下4步: 步骤一:将虚拟三维空间等价转换为二维平面。前提是高度相对于广度可以忽略,或背研究问题 对象允许简化三维参数变量。
步骤二:遍历场景中的所有模型区域,选取合适的分割平面。由于虚拟:维建筑多数属于规则图 形,因此,在逐层分割的过程中,没有必要逐个去分解每个多边形,只需要选取经过象限顶点且与X轴 或Z轴垂直的平面作为分割面即可。
步骤三:分割完成后,分别创建“左上”、“左下”、“右上”以及“右下”四个象限的子节点 。判断对应象限内包含的多边形数量是否超过设定的阀值。若超过,该象限区域继续分割,同时四叉 树的叶子节点继续分解;若未超过,则该节点就作为叶子节点,保存当前各层场景的相关属性。
步骤四:重复步骤二、三处理,直至不存在可以分割的节点为止,VRMI.中利用模型语言提供的原 型节点,对基于四叉树划分后的节点进行自定义类型,得到的四叉树数据结构的形式如下: PR()TO QuadTNode{ #自定义的节点的基本场景属性 exPoseField SFRotation rotate exPoseField SFVec3f scale 0.0 1.0 0.0 exPoseField SFColor color l.0 0.0 1.0 coord DEF PlaneOl-C()()RDCoordinateI Point[ 00,10,11,0 1] } 以下定义非叶子节点的四个子节点( children),每个children对应一个子节点定义,每个子节点 也是QuadTNode节点类型。 Group{ children[ geometry cylinder{} ] children[ geometry cylinder{} ]chilclren[ geometry cylinder{ } geometry cylindert } } 对四又树中的每个节点(包括叶子节点和非叶子节点),应该定义此节点所表示的场景空间的包 围范围,定义这个节点所覆盖的场景空间的区域。对应于上述VRML四叉树定义中的coord DEF PlaneOl-COORD,指定这个节点的四个顶点所表示的坐标索引。通过这四个顶点的坐标也就可以计算出 此节点所覆盖的平面区域的大小。如图4.6所示,图中节点的四个顶点的坐标为(4,4),(4,-4), (-4,-4),(-4,4)。┏━┳━┳━┳━┳━┳━━┳━━┳━━━┳━━┓┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━┫ ┃┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃-/ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━┫ ┃┃ ┃ ┃ ┃ ┃ ┃ ┃/ ┃,/ ┃ ┃┃ ┃ ┃ ┃ ┃ ┃/ ┃ ┃ ┃ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━┫ ┃┃ ┃ ┃ ┃ ┃ ┃L ┃ ┃ ┃ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━╋━━┫┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━┫ ┃┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━┫ ┃┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃┣━╋━╋━╋━╋━╋━━╋━━╋━━━┫ ┃┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃┣━┻━┻━┻━╋━┻━━┻━━┻━━━┻━━┫┃-4) ┃ (4,-4.) ┃┗━━━━━━━┻━━━━━━━━━━━━━━ ┛图4.6 四叉树剖分中心位置X=1中心位置)\1半距=l 采用该数据结构的四叉树实现场景模型的空间剖分后,在场景渲染的时候,可以以L()D方式高效 绘制场景图。可以通过计算包围球或包围长方体的方法,实现对可见体的裁剪处理。
转载请注明:
锦州flash动画制作公司:http://www.flash520.com/city130/