⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000005.htm

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -