📄 00000005.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: vrml (3d), 信区: Java <BR>标 题: JAVA3D学习系列(5) <BR>发信站: BBS 水木清华站 (Sun Apr 4 21:54:09 1999) <BR> <BR> JAVA3D程序也是JAVA程序,因而我们首先必须对JAVA有所了解,并能 <BR>编写简单的JAVA程序,了解JAVA编程的基本概念,关于JAVA语言的相关知 <BR>识,我们在这里就不一一介绍了,国内这方面的书籍非常丰富。 <BR> <BR>一. SimpleCone 程序分析 <BR>1. SimpleCone.java及其对应的VRML程序 <BR> 上一节中,我们给出了SimpleCone这个非常简单的JAVA3D程序,下面 <BR>我们来解读这个程序,进而介绍JAVA3D所提供的API的内容。 <BR> 第三节中,我们对JAVA3D的场景图结构作了一个简单的介绍,从场景图 <BR>我们可以看出,JAVA3D的场景图和VRML的场景图非常相似,因而我们可以编 <BR>写类似的VRML程序出来,与JAVA3D程序进行比较。 <BR> SimpleCone程序只是显示一个红色的圆锥,相类似的VRML程序为: <BR>//SimpleCone.wrl <BR> <BR>#VRML V2.0 utf8 <BR>Shape{ <BR> geometry Cone{ bottomRadius .5 height 1.0} <BR> appearance Appearance{material Material{emissiveColor 1 0 0}} <BR> } <BR> <BR>//end of SimpleCone.wrl <BR> <BR> 可以看到,与JAVA3D程序相比,VRML程序要简单的多,并且可以直接在 <BR>IE和Netscape浏览器上运行,而JAVA3D则要复杂的多。不过几乎所有的VRML <BR>程序都可以用JAVA3D编写出来,而稍微复杂一点的JAVA3D的程序则基本上无 <BR>法用VRML语言完成。因为VRML几乎可以看成是一个三维计算机图形格式,而 <BR>JAVA3D则是一个高级计算机语言。 <BR> 在上面的VRML程序中,只定义了一个三维形体及其材质,背景、灯光、 <BR>位置等均为缺省值。 <BR> 同样地,SimpleCone.java程序中,我们也只定义了三维形体及其材质, <BR>没有背景、灯光等,处在缺省的位置上(坐标系原点)。 <BR> JAVA3D和VRML一样,采用的是一个符合右手螺旋法则的三维坐标系。正 <BR>X轴向右,正Y轴向上,正Z轴朝外(从计算机屏幕指向我们)。 <BR> <BR>2. JAVA3D(API)中的类 <BR> JAVA3D是SUN公司为我们提供的一个API,里面包含了几乎所有我们所需 <BR>要的编写JAVA三维多媒体应用程序的基本的类及方法。我们在编程时,只 <BR>需调用所需要的类及方法,就可以快速地编写出复杂的三维多媒体应用程 <BR>序。可以说,我们所做的工作只是学会应用JAVA3D的各种类(Objects)及方 <BR>法。 <BR> JAVA3D为我们提供了100多个存放于javax.media.j3d程序包中的类,它 <BR>们被称为JAVA3D的核心类,除了核心包中的类以外,JAVA3D还提供了一些其 <BR>它程序包,其中一个重要的包是com.sun.j3d.utils包(Utility)。 <BR> JAVA3D所提供的Utility并不是JAVA3D编译环境的核心组成部分,我们可以 <BR>不用它,不过使用它们会大大提高我们的程序编写效率。JAVA3D为我们提供的 <BR>Utility会不断增加,例如有可能增加处理NURBS曲线的Utility。目前,JAVA3D <BR>为我们提供了四组Utility,它们是: <BR> 用于调用其它三维图形格式如ALIAS图形格式的content loader <BR> 用于构造场景图的scene graph construction aids <BR> 用于建立一些基本体如圆锥、球的geometry classes <BR> 一些其它方便我们编程的convenience utilities <BR> 除了JAVA3D的核心包及Utility包之外,每个JAVA3D程序还必需用到下面 <BR>两个包:java.awt和javax.vecmath。java.awt包用来定义一个显示用的窗口, <BR>而javax.vecmath包则是用来处理调用程序所需要的定义矢量计算所用的类, <BR>处理定义三维形体及其位置时,我们需要用到点、矢量、矩阵及其它一些数学 <BR>对象,它也是JAVA3D所提供的一个包,目前它在JAVA3D的编译环境中,今后则 <BR>可能会成为JAVA1.2的核心组成部分。 <BR> <BR> 根据其作用,JAVA3D所提供的类主要有两种类型:Node、NodeComponent <BR> Node类,它含有Group及Leaf两个子类: <BR> Group类 (用于将形体等按一定的组合方式组合在一起), <BR> 类似于VRML的组节点。 <BR> Leaf 类 (如Light、Sound、Background、shape3d、 <BR> Appearance、Texture及其属性等,还有 <BR> ViewPlatform、Sensor、Behavior、Morph、 <BR> Link等),类似与VRML的相应节点,是JAVA3D <BR> 场景图的重要组成部分。 <BR> NodeComponent类,用于表示Node的属性,它并不是JAVA3D场景图 <BR> 的组成部分,而是被JAVA3D场景图所引用,如某 <BR> 一个颜色可以被多个形体所引用。 <BR> <BR>3. SimpleCone.java程序import语句部分的介绍 <BR> 根据JAVA3D所提供的类,按照面向对象的编程方式,我们可以编写出三维 <BR>环境中所需要的各个对象。编写JAVA3D程序的关键是学会应用JAVA3D所提供的 <BR>各个类,生成自己所需要的对象。 <BR> 下面我们来看一下SimpleCone.java里的每一个import语句。 <BR> 我们知道,java程序中。凡是利用到的外部的类均用import语句调用,我 <BR>们首先介绍一下程序中的import语句。 <BR> 第一个import语句表示本程序是Applet程序。 <BR> 第二个import语句表示窗口环境采用BorderLayout管理方式。 <BR> 第三个import语句语句在去掉//后就可以使程序既为applet <BR>也为application,为此,使用了JAVA3D所附带的一个Utility,这是一个名 <BR>叫Jef Poskanzer的人所编写的类。 <BR> 第四个import语句表示调用生成Cone的一个Utility,这是因为,JAVA3D <BR>和VRML不同,VRML有几个基本几何体的节点语句,但JAVA3D的核心部分一个 <BR>基本体也没有定义,但JAVA3D所附带的Utility为我们提供了一些事先编好的 <BR>基本体,我们可以调用这些基本体。 <BR> 第五个import语句表示我们调用一些设置基本的观测位置所用的类,如 <BR>SimpleUniverse、Viewer、ViewingPlatform等,利用它们,我们可以很方便 <BR>地构造JAVA3D场景图底部的VirtualUniverse、Locale及其上的View分支,进 <BR>而使精力主要用在建模及复杂问题的处理上面,当然它们也都是JAVA3D所附带 <BR>的Utility。 <BR> 第六个import语句表示调用程序所需要的JAVA3D核心类,因而所有JAVA3D <BR>程序都必须带有这一语句,只有这样才能在JDK1.2环境中编译执行JAVA3D程序。 <BR> 第七个import语句表示调用程序所需要的定义矢量计算所用的类。 <BR> <BR>3. SimpleCone.java程序的组成 <BR> SimpleCone.java程序主要由三个部分组成: <BR> createSceneGraph方法的定义 <BR> SimpleCone的构造函数 <BR> 用于生成application应用程序的main函数 <BR> <BR>4. createSceneGraph方法的定义 <BR> 我们首先来看一下createSceneGraph方法的定义部分。通过第三讲的 <BR>JAVA3D场景图的简单示意图,我们知道,为了编写出一个JAVA3D应用程序, <BR>我们必须编写出一个拥有三维形体的内容分支,即一个分支组,一个 <BR>BranchGroup。我们将我们所需要的形体及其材质定义在里面,由于一般 <BR>形体会摆放在三维空间的某一个位置,因而我们还需要先在BranchGroup <BR>分支之上建立一个可用于几何变换用的TransformGroup,即几何变换分支 <BR>组,再将形体及其材质作为TransformGroup的一个分支给出,当然程序中 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -