Posted on 2007-11-05 21:43
ZelluX 阅读(2402)
评论(1) 编辑 收藏 所属分类:
OOP
要做个和Java3D有关的项目,需要稍微了解下相关的知识。
看的资料是The Java3d Tutorial,版本有点早,凑合着看了。
Java 3D 的虚拟环境是从场景图(scene graph)中建立的,场景图聚合(assemble)了各种定义几何、声音、光、位置、方位等元素的类。
一种常用的定义图的数据结构由结点(node)和弧(arc)组成。结点都是Java 3D类的实例,而弧则代表了实例间两种不同的关系。
最常见的关系是父子(parent-child)关系。一个组结点(group node)可以包含任意多的子结点,但只能有一个父结点。
另一种关系是引用(reference),引用通过一个场景图的结点关联了一个NodeComponent类,NodeComponent类定义了各种视图对象的几何和外观属性。
这种结构可以用树来描述,从根结点到任一叶子结点的路成为场景图路径(scene graph path). 每条路径都完整地描述了它的叶子结点的状态。
这就是一个简单的场景图的结构,其中包括VisualUniverse Locale GroupNode Leaf 等元素
每个场景图都有单一的VirtualUniverse,后者包含一串Locale对象。一个程序可以包含多个VirtualUniverse对象,但是没有一种简单的方法实现它们相互之间的通信。
写Java3D程序的通常步骤:
1. 创建一个Canvas3D对象
2. 创建一个VirtualUniverse对象
3. 创建一个Locale对象,将其与VirtualUniverse相关联
4. 构造视图分支(view branch graph):分别创建一个View ViewPlatform PhysicalBody PhysicalEnvironment对象,将后面三个及Canvas3D与View对象关联
5. 构造内容分支(content branch graph)
6. 编译(compile)各个分支
7. 将子图(subgraph)插入Locale中
使用SimpleUniverse可以简化这些步骤
虚线框起来的部分就是SimpleUniverse中提供的内容
通过它可以将步骤简化为
1. 创建一个Canvas3D对象
2. 创建一个引用了之前的Canvas3D对象的SimpleUniverse类,并定制该类
3. 构造一个内容分支,编译后插入SimpleUniverse的Locale
什么是编译(compile):通过编译BranchGroup,可以将它及其祖先转换为一种更高效的实现方式。建议在最后一步中做编译。