BranchGroup compile() 方法 |
SceneGraphObject 方法 (部分列出) |
Java 3D程序的主类一般都定义一个方法来构建内容分支图。在HelloJava3Da示例中,就定义了这样的方法,并声明为createSceneGraph ()。用简单分法所创建场景图的全部步骤都在HelloJava3Da 构造函数类中得到了实现。第1步、创建一个Canvas3D对象。具体见程序的第4行到第6行。第2步、创建一个SimpleUniverse对象,是在 第13行。.第2a步, 定制SimpleUniverse 对象,到第17行就完成了.第3步,构建内容分支图,就是通过调用createSceneGraph()方法来完成的。第4步,编译内容子图,代码见第 10行。最后第5步,把内容子图插入到SimpleUniverse的Lacale中,这个操作见第19行。
1. public class HelloJava3Da extends Applet {
2. public HelloJava3Da() {
3. setLayout(new BorderLayout());
4. GraphicsConfiguration config =
5. SimpleUniverse.getPreferredConfiguration();
6. Canvas3D canvas3D = new Canvas3D(config);
7. add("Center", canvas3D);
8.
9. BranchGroup scene = createSceneGraph();
10. scene.compile();
11.
12. // SimpleUniverse类是一个很方便的工具类
13. SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
14.
15. // 这把ViewPlatform往后移一点点,
16. //以使场景中的对象能被看到。
17. simpleU.getViewingPlatform().setNominalViewingTransform();
18.
19. simpleU.addBranchGraph(scene);
20. } // HelloJava3Da (构造函数)结束
代码段1-1 Class HelloJava3Da
简 单方法的第3步是创建内容分支图。创建内容分支图的具体代码见代码段1-2. 这也可能是再简单不过的内容分支图了。在代码段1-2中创建的内容分支图包括了一个静态的图形对象,即带有颜色的立方体。这个带色立方体位于虚拟世界坐标 系统中初始位置。按照视图提供的位置和方向,那个渲染后的立方体看起来像一个矩形。具体效果如图1-12所示。
1. public BranchGroup createSceneGraph() {
2. // 创建分支子图的根结点
3. BranchGroup objRoot = new BranchGroup();
4.
5. // 创建一个简单的图形叶子结点,并把其加到场景图中
6. // ColorCube也是一个很方便的工具类
7. objRoot.addChild(new ColorCube(0.4));
8.
9. return objRoot;
10. } // HelloJava3Da 的创建场景图的方法createSceneGraph结束
11. } // HelloJava3Da类结束
代码段1-2 HelloJava3Da 类的用于创建场景图的createSceneGraph方法s
HelloJava3Da 类是从Applet类继承而来的,但是这个程序由于运用了MainFrame类也是可以作为应用程序独立运行的。 Applet 类是用于写在窗口式的易于运行的Java 3D程序的基本类。MainFrame 提供了一个AWT 框架(frame )(即窗体) ,以使applet能嵌入从而像应用程序一样运行。 结果程序的窗口的大小是在运用MainFrame类构建时时候指定的。代码段 1-3 说明了HelloJava3Da.java中所用到的MainFrame 类的用法。
MainFrame 构造函数 (列出部分) 包: com.sun.j3d.utils.applet |
前 面四个代码段 (1-1, 1-2, 1-3, and 1-4) 组成了完整的示例程序HelloJava3Da.java文件。完整的示例程序也可以代码发布包的examples/HelloJava3D 目录下找到.用命令javac HelloJava3Da.java来编译代码,用java HelloJava3Da来运行代码。运行结果如图1-12所示。
而在HelloJava3Da示例中不是每一行代码我们都进行了解释。如果通读了整个示例,集成Java3D程序的基本概念应该清晰明了了。下面这一小节通过说明上面程序中所用到的类来弥补了说明不足的缺陷。
BranchGroup 类
这种类型的对象是用于构建建场景图的, BranchGroup的实例是子图的根结点,
BranchGroup对象也是唯一能成为Locale对象的孩子对象的对象。BranchGroup对象可以有多个孩子, BranchGroup对象的孩子对象可以是Group和Leaf对象。
BranchGroup 默认构造函数 BranchGroup() BranchGroup的实例,作为场景图分支的根结点,BranchGroup 对象也是能唯一插入到Locale对象中的对象。 |
Canvas3D 类的构造函数 Canvas3D(GraphicsConfiguration graphicsconfiguration) 构 造并初始化一个新的Canvas3D对象,Java 3D可以在给定的GraphicsConfiguration对象条件下渲染这个对象。这是AWT Canvas类的扩展的类。关于GraphicsConfiguration 对象的更多信息请参考Java 2D规范。这也是JDK 1.2 AWT的一部分。 |
Transform3D默认的构造函数 一个通常的变换对象就表示为一个4x4双精度浮点矩阵。 这种数学表示是以行为主的。一个Transform3D对象不是在场景图中用到的,而是用于指定TransformGroup对象的图形变换的。 Transform3D() 构造一个Transform3D 对象,默认使用单位矩阵 (不顾虑在变换)。 |
Transform3D 类的方法 (列出部分) Transform3D对象用于表示几何形变,比如旋转,平移和缩放。 Transform3D是没在任何场景图中直接使用到的少数几个类之一。Transform3D对象所定义的变换是用于创建场景图中的TransformGroup 对象的。 void rotX(double angle) 设置图形X轴方向沿逆时针对象按指定的角度旋转。角度值用弧度指定。 void rotY(double angle) 设置图形Y轴方向沿逆时针对象按指定的角度旋转。角度值用弧度指定。 void rotZ(double angle) 设置图形Z轴方向沿逆时针对象按指定的角度旋转。角度值用弧度指定。 void set(Vector3f translate) 利用传入的Vector3f型的参数设置图形的平移值,如果这个传入的形变是单位矩阵,则在其它时候设置真正的形变值。 |
TransformGroup 类
作 为Group类的子类,TransformGroup类的实例用于创建场景图并且都其子结点的集合。TransformGroup对象存储了几何形变比如 平移和旋转。一般利用不在场景图中的Transform3D对象来构造某一形变。TransformGroup对象保存了场景图中的形变信息。
ransformGroup 构造函数 TransformGroup() 利用单位矩阵来构造并且初始化一个TransformGroup对象。(不发生形变) TransformGroup(Transform3D t1) 通过传入Transform3D对象参数来构造并且初始化一个TransformGroup 对象。 参数: t1 - transform3D对象 |
Transform3D对象中所包含的形变信息在TransformGroup对象创建时或者是调用了setTransform()方法变复制到TransformGroup中。
TransformGroup setTransform() 方法 void setTransform(Transform3D t1) 利用传入的形变参数设置TransformGroup对象的形变值。 参数: t1 - 要复制的transform3D对象。 |
Vector3f 构造函数 一个三个元素的矢量。其三个元素用单精度浮点数表示X,Y,Z坐标。 Vector3f() 用(0,0,0)构造并初始化一个Vector3f。 Vector3f(float x, float y, float z) 指定x,y,z轴坐标来构造并初始经一个Vector3f。 |
ColorCube 构造函数 包: com.sun.j3d.utils.geometry 一个ColorCube 是一个简单的各面均有不同颜色的可视的立方体。 ColorCube 扩展了Shape3D 类;因此,它是叶子结点。 ColorCube可以很容易地放置于虚拟世界中。 ColorCube() 以默认的大小构造一个有色立方体。默认地,每一个角到相应坐标的中心都是1米,因而,此立方体处于视图正中心,长宽高都是2米。 ColorCube(double scale) 构造一个有色立方体,并作指定参数的缩放。默认每一条边都是2米,而此构造函数则构造一个顶点在(scale, scale, scale) 和(-scale, -scale, -scale)的ColorCube。 |