支上。场景图的示意模型如图1所示。场景图中的节点是JvD的类的实例,线表示实例之aa3间的结构关系。根节点是Vitaies对象,每个场景图只能有一个根节点。只有创建了rulvreUnViulies后,其他JvD对象才能加入到场景图中。根节点之下是Lcl点,一raUnvretaa3
oae节个Vitaies可以有一个或多个Lcl,但同时只能有一个Lcl处于显示状态,就好ruIvreUnoaeoae
像一个三维世界非常大,有很多个景点,但我们同时只能在一个景点进行观察。当然我们可
以从一个景点跳到另一个景点,不过绝大多数的程序只有一个Lcl。下一步就要分别创建oaeJvD场景图的视图分支和内容分支了。aa3
图1JvD场景图aa3
建立视图分支的主要工作包括:在Lcl点下创建BacGru、Trnfrru、oae节rnhopasomGop
ViwPafr树状结构;创建Vi对象;然后将Vilfr对象关联到Vi对象上。elomteweaomwPtew
308
微计算机应用
2003年
实现关联的代码为myeatcViltr(Vilfr;Viw.theafmmyeaom)awPowPt
建立内容分支的主要工作包括:同样在Lcl点下新建一个BacGru-Trnfroae节rnhopas—omGop分支,这个分支的子节点则是各种各样的三维形体(SaeD节点)了,而且这ru如hp3
些三维形体可以有复杂的形状、纹理及动作。以上描述了JvD场景图一般的创建过程。值得一提的是,对于大多数简单应用,我aa3们可以直接使用统一实用类,尤其是其中的SmpeiesilUnvre类,来处理视图管理的大多数复杂任务。Smpeire类正如其名称所暗示的一样,能够简化视图分支的编码。使用Sm—ilUnvsei
peies,可以把Viulies、Lcl、视图分支的创建合并到一步完成。利用以下lUnvreraUnvreoate
程序代码即可创建一个简单的三维场景:
SmpeiesUnvre=nwSmpeiesmyavsD)ilUnvrmyiseeeilUnvre(cna3;
BacGruotnBacGru=cntcCnetrnh)/建立内容分支;rnhopcnetrnhoposrtotnBac(;u/
myies.dBacGru(otnBacGop;Unreadrnhopcnetrnhru)v
如前所述,使用场景图模型的最大优