Java 3D API官方教程[翻译二]

互联网 | 编辑: uker编辑2 2007-07-31 00:30:00转载

java 3D API官方教程:1.4 编写Java3D程序的一般步骤

SceneGraphObject类的子类就是集成构建场景图的模块,一个Java3D程序的开发大略可以分为七步(把它们聚在一起,在Java 3D API 规范中和这里称之为步骤(recipe)),具体如下列表所示,这些方法可用于装配许多的Java3D程序。

 1. 创建一个Canvas3D对象。

2. 创建一个VirtualUniverse对象。

3. 创建一个Locale 对象,并使之与VirtualUniverse相关联。

4. 构建一个视图子图。

a. 创建一个View 对象。

b. 创建一个ViewPlatform对象。

c. 创建一个PhysicalBody对象。

d. 创建一个PhysicalEnvironment对象。

e. 把 ViewPlatform, PhysicalBody, PhysicalEnvironment, 和Canvas3D对象与View

对象相关联。

5. 构建一个或多个内容子图。 6. 编译所有子图。

7. 把子图加到Locale对象中。

表 1-1 编写Java3D程序的一般步骤


这些步骤忽略了细节但是解释了Java 3D编程中的基本概念。创建场景图中的子图是编程的主要部分。但我们并没有展开这些步骤详细讨论,本教程的下一部分解释了一种用更少的代码更容易的手段来构建一个非常简单的场景图的方法。

1.4.1 编写Java 3D程序的一个简单方法

用 基本方法编写具有视图分支图的Java 3D programs程序的结构有其唯一性,构建视图分支子图结构的规则可以通过SimpleUniverse工具类来实现. SimpleUniverse 的实例承担了构建场景图的基本步骤中的第2, 3以及第4步。利用SimpleUniverse类来进行Java3D编程,可以大大减少创建视图分支图的时间和精力,从而,程序员可以有更多的时间来构 建内容分支子图,这才是真正与Java3D程序事关重大的。

SimpleUniverse类对于Java 3D编程而言真是一个很好的起点,因为它允许程序员暂时忽略视图子图的存在.尽管如此,SimpleUniverse 中也不允许同一个虚拟世界存在多个视图。

本 教程的所有例子程序都用到了SimpleUniverse类,因此,如果程序员想获得更多的关于View, ViewPlatform, PhysicalBody, 和PhysicalEnvironment 类的信息请参考其它参考资料,附录B有详细的参考资料列表。

SimpleUniverse类

SimpleUniverse 对象的构造函数创建了包含VirtualUniverse 、Locale对象以及一个完整的视图子图在内的场景图,SimpleUniverse创建的视图子图是用了ViewingPlatform 和Viewer 便利类的实例来代替了其它核心类来创建视图子图。注意到SimpleUniverse仅仅是没有直接用到 Java3D核心类中的View和ViewPlatform对象的。SimpleUniverse 对象提供了图1-7中大方框中的所有功能。com.sun.j3d.utils.universe包包括了 SimpleUniverse, ViewingPlatform, 和Viewer convenience工具类

利 用一个SimpleUniverse 对象可以使构造Java3D程序的基本步骤更加简单,表1-2展示了简单的方法。这是用SimpleUniverse 对象之后构建Java3D程序所需的步骤,上文所提到的基本步骤的第2, 3,和4步已经被本方法的第2步所替代。

1. 创建一个Canvas3D对象。

2. 创建一个SimpleUniverse对象,并添加对先前创建的Canvas3D 对象的引用。

a. 定制SimpleUniverse对象。

3. 构建内容子图。

4. 编译内容分支子图。

5. 把内容子图添加到SimpleUniverse的Locale中。

表1-2 用SimpleUniverse创建Java3D程序的简单步骤

下 面的灰框中的内容是本教程中参考模块的第一次出现。参考模块一般对一个类的构造函数、方法和属性作了个列表。使用参考模块的目的在于使读者能在手头上没有 其他参考资料的情况下能学到基本的Java 3D API编程知识。本教程中的参考块并没有涉及到每一个类的构造函数和方法,由于这个原因,很多的Java 3D API 类都没有列出参考块。因此,本教程的文档本不能替代Java 3D API规范的位置,尽管如此,列出了构造函数、方法和属性的参考块的这些类,本教程所提供的信息往往比Java 3D API规范所提供的信息更加详实。

 

 

SimpleUniverse 构造函数

包: com.sun.j3d.utils.universe

这 个类构建了一个尽可能小的用户环境,以使Java3D程序能尽快尽简单地运转起来。这个工具类创建了视图子图中所必需的所有对象。特别是创建了 Locale, VirtualUniverse, ViewingPlatform, 和Viewer对象, (构建这些对象时统统使用默认值).这些对象以恰当的关系构成了视图子图。

SimpleUniverse 提供了许多基本的Java 3D应用程序所必需的全部功能. Viewer和ViewingPlatform都是很方便的工具类.这些类用到了View 和ViewPlatform 核心类。

SimpleUniverse()

构建一个包含视图子图的简单虚拟世界。.

SimpleUniverse(Canvas3D canvas3D)

构建一个简单虚拟世界并与指定的Canvas3D对象建立关联。



构建一个简单虚拟世界并与指定的Canvas3D对象建立关联。
 SimpleUniverse对象创建了虚拟世界中一个完全的视图分支子图。这个视图分支图包括一个图板(image plate)。Java 3D把场景内容投影到图板块上形成一个渲染图象。Canvas3D 对象,提供了在计算机的窗口上显示图象,就可以看做图板。
图1-9,显示了图象图板,观察者位置和虚拟世界的关系。 观察者在图板后面。而可视对象在图板之前并能在图板上进行渲染。渲染就可以看作是可视对象到图板上的投影。这个观点就如图中的四个方向上的投影仪(虚线所示)

默认地,图板位置SimpleUniverse原始位置的中心,默认的方向是从Z轴从上往下看的。从这个位置上看,X轴是一条正向在右边的水平穿过图板的直线,而Y轴是垂直穿过图板中心、正向在上方的直线。因此,点 (0,0,0)就处于图板的正中央。

一 般的Java3D程序,都把视图往后退(Z轴正向)(译者注:物体前移,往Z轴正向移,或往图外移),以使物体处于或者离原始视图比较近。 SimpleUniverse类有一个ViewingPlatform的类的实例作为成员对象,ViewingPlatform类也有一个 setNominalViewingTransform的方法来设置观察者(眼睛)的位置,使之位于 (0, 0, 2.41)(looking in the negative z direction toward the origin?).

 

ViewingPlatform setNominalViewingTransform() 方法

包: com.sun.j3d.utils.universe

ViewingPlatform 类用于设置SimpleUniverse 对象中Java 3D场景图的视图分支图。这个方法一般用SimpleUniverse 类的getViewingPlatform方法来进行连接。

void setNominalViewingTransform()

把SimpleUniverse对象中的象征性的观察者设置约2.41米的距离变化。在这个距离上,视图的默认属性,2米高和宽的对象大约都会恰好与图板符合。

创 建了Canvas3D和Simple Universe对象后,下一步就是创建内容子图。对视图子图中的常规结构的应用,从而导致应用SimpleUniverse类的这一套,对内容子图并不 适合,因为内容子图在每一个程序中都各有不同,因而也就不可能给出构建一个内容子图的通用的详细方法。这也意味着你想集成的任何虚拟世界中并不存在简单内 容类("simple content")。

创建内容子图是第1.6,1.7和1.9节的主题,在1.8节中讨论了内容了图的编译。如果你迫不及待地想看代码以找出个究竟,请参考代码段1-1,这就是一个应用SimpleUniverse 类的例子。

创 建了内容子图之后,可以用addBranchGraph把内容子图加到SimpleUniverse对象中. addBranchGraph方法把BranchGroup 的实例作为唯一的传入参数。BranchGroup作为SimpleUniverse 对象所创建的Locale对象的孩子加到场景图中。

 

SimpleUniverse 的方法 (只列出了部分)

包: com.sun.j3d.utils.universe

void addBranchGraph(BranchGroup bg)

用于往SimpleUniverse对象所创建的Locale对象的场景图中。用这个方法把内容子图添加到虚拟世界中。

ViewingPlatform getViewingPlatform()

用于获取SimpleUniverse 实例化后的ViewingPlatform 对象。这个方法再附加调用setNominalViewingTransform()方法来调整视图的位置。

如果想了解更多英国留学申请 签证 学校排名 留学论坛 等相关信息以及详细资讯,欢迎点击中英网http://www.uker.net/

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑