Java3D类简单说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java3D类简单说明
很长时间没有听到关于Java3D的消息了,好像Sun已经放弃了Java3D一样,不过Java3D 作为一门纯正的面向对象的3D技术,还是很值得我们学习和使用的。
不过话说回来Java3D 开发的真是比较粗糙。
下面介绍些Java3D常用的类吧。
Canvas3D 类
Canvas3D 类继承自Abstract Windowing Toolkit (AWT)类的Canvas类.在场景图的视图分支图中,至少要引用一个 Canvas3D对象(注:有可能存在多个Canvas3D对象,为了使演示简单,在使用SimpleUniverse类时,在程序中仅有 Canvas3D类的一个实例)。
关于Canvas 类更多的信息,请参考AWT。
附录B中提供了一系列参考。
Canvas3D 类的构造函数
Canvas3D(GraphicsConfiguration graphicsconfiguration) 构造并初始化一个新的Canvas3D对象,Java 3D可以在给定的GraphicsConfiguration对象条件下渲染这个对象。
这是 AWT Canvas类的扩展的类。
关于GraphicsConfiguration 对象的更多信息请参考Java 2D规范。
这也是JDK 1.2 AWT的一部分。
Transform3D 类
Transform3D 对象用于进行3D几何形变比于平移和旋转。
这些对象一般仅仅用于创建一个TransformGroup对象。
首先, Transform3D对象可能基于一些Transform3D对象的组合而创建,然後就用这个Transform3D来构建一个] TransformGroup对象。
Transform3D默认的构造函数
一个通常的变换对象就表示为一个4x4双精度浮点矩阵。
这种数学表示是以行为主的。
一个Transform3D对象不是在场景图中用到的,而是用于指定TransformGroup对象的图形变换的。
Transform3D()
构造一个Transform3D 对象,默认使用单位矩阵 (不顾虑在变换)。
一个Transform3D对象能表示平移,旋转,缩放乃至这些变换的组合。
当指定一个旋转变换时,角度用弧度来表示。
一个全旋转(圆)的弧度是2 PI。
设置角度的一个方法是利用常量Math.PI,另外一种算途径是直接设置,这里说一下常用角度的弧度:45度是0.785, 90度是1.57, 而180 度是3.14(约为PI)。
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型的参数设置图形的平移值,如果这
个传入的形变是单位矩阵,则在其它时候设置真正的形变值。
Transform3D对象中所包含的形变信息在 TransformGroup对象创建时或者是调用了setTransform()方法变复制到 TransformGroup中。
TransformGroup setTransform() 方法
void setTransform(Transform3D t1)利用传入的形变参数设置TransformGroup对象的形变值。
TransformGroup 类
作为Group类的子类,TransformGroup类的实例用于创建场景图并且都其子结点的集合。
TransformGroup对象存储了几何形变比如平移和旋转。
一般利用不在场景图中的Transform3D对象来构造某一形变。
TransformGroup对象保存了场景图中的形变信息。
TransformGroup 构造函数
TransformGroup()利用单位矩阵来构造并且初始化一个TransformGroup对象。
(不发生形变)
TransformGroup(Transform3D t1)通过传入Transform3D对象参数来构造并且初始化一个TransformGroup 对象。
BranchGroup 类
这种类型的对象是用于构建建场景图的, BranchGroup的实例是子图的根结点,BranchGroup对象也是唯一能成为Locale对象的孩子对象的对象。
BranchGroup对象可以有多个孩子, BranchGroup对象的孩子对象可以是Group和Leaf对象。
BranchGroup 默认构造函数
BranchGroup() BranchGroup的实例,作为场景图分支的根结点,BranchGroup 对象也是能唯一插入到Locale对象中的对象。
Vector3f 类
Vector3f 是包javax.vecmath中的数学类,用于用浮点数来设定一个矢量。
Vector对象常常用于设置图形开变。
Vector3f对象也不直接在场景图中用到。
常用于指定形变,表现,法向量以及一些其它的应用。
Vector3f 构造函数
一个三个元素的矢量。
其三个元素用单精度浮点数表示X,Y,Z坐标。
Vector3f()用(0,0,0)构造并初始化一个 Vector3f。
Vector3f(float x, float y, float z)指定x,y,z轴坐标来构造并初始经一个Vector3f。
ColorCube类
ColorCube是包com.sun.j3d.utils.geometry中的工具类。
定义了一个立方体图形及其各面的不同的颜色,并使位置处于初始位置的中间。
默认的 ColorCube对象是一个长宽高均为2米的立方体。
如果一个处于原始位置未经旋转的立方体(如HelloJava3Da 示例中的),在名义上的视图位置中,红色面是可见的,其它面的颜色分别是:蓝色,洋红,黄色,绿色和青色。
ColorCube 构造函数
包: com.sun.j3d.utils.geometry
一个ColorCube 是一个简单的各面均有不同颜色的可视的立方体。
ColorCube 扩展了Shape3D 类;因此,它是叶子结点。
ColorCube可以很容易地放置于虚拟世界中。
ColorCube()以默认的大小构造一个有色立方体。
默认地,每一个角到相应坐标的中心都是1米,因而,此立方体处于视图正中心,长宽高都是2米。
ColorCube(double cale)构造一个有色立方体,并作指定参数的缩放。
默认每一条边都是2米,而此构造函数则构造一个顶点在(scale, scale,scale) 和(-scale,-scale, -scale)的ColorCube。
VirtualUniverse类
Locale, Group, 和 Leaf 类处于类层次中的这部分。
除了VirtualUniverse 和Locale对象,场景图中馀下的部分由SceneGraphObject 对象构成。
SceneGraphObject几乎是Java3D 类中每一个核心类和工具类的超类 [译者注:超类即上层类,可以是父类或者祖先类。
SceneGraphObject有两个子类:Node类NodeComponent.类,Node子类提供了场景图中的绝大部分对象,一个Node对象可以是一个Group,也可是一个Leaf结点对象。
Group和Leaf 是一系列类的超类。
这里可以一目了然地看到Node类的子类,它有两个子类,而NodeComponent 类,在这些背景知识介绍之後,在Java3D程序的构建中会解释到。
Node 类
Node 是Group和Leaf类的一个抽象超类. Node 为其子类定义了一些公共的重要的方法。
某些方法的信息会在更多的背景知识介绍了之後提到。
Node 的子类构成了子图。
Group 类
Group 类是用于在虚拟世界中指定可视对象位置和方向的类的超类。
Group类的两个下层类是 BranchGroup是 TransformGroup. 在场景图的图形表现中,Group标记 (用圆表示)。
而其中BranchGroups注为GB, TransformGroups 注为TG,等等。
具体例子请见图1-2。
Leaf 类
Leaf是用于指定虚拟世界中可视对象的形状,声音和,动作的类的超类。
Leaf的一些子类如Shape3D, Light, Behavior, 和 Sound. 这些对象不能有自己的孩子,并且可能引用NodeComponents对象。
NodeComponent 类
是用于指定Shape3D (Leaf)结点对象的图形,表面,纹理和材质属性的类的超类。
NodeComponents 不是场景图的组成部分,但是为其所引用。
一个NodeComponent 对象可能为多个Shape3D对象所引用(译者注:就是比如,同一个材质对象可以赋予多个shape3D 对象)。