VRML程序设计及应用

来源:互联网 发布:lua node 编辑:程序博客网 时间:2024/05/20 18:48

第一章  引言

虚拟现实建模语言(VRMLVirtual Reality Modeling Language)是描述虚拟环境场景的一种模型语言,它同时也是Internet上的一种三维标准,允许描述三维对象并把它们组合到自己的虚拟场景中,目前广泛应用于创建充满动感的三维虚拟空间。利用VRML,我们可以在Internet上建立一个交互式的三维多媒体虚拟世界。

VRML的出现使得虚拟现实象多媒体和因特网一样逐渐走进我们的生活,简单地说,以VRML为基础的第二代万维网=多媒体+虚拟现实+因特网。第一代万维网是一种访问文档的媒体,能够提供阅读的感受,使那些对Windows风格的PC环境熟悉的人们容易使用因特网,而以VRML为核心的第二代万维网将使用户如身处真实世界,在一个三维环境里随意探寻因特网上无比丰富的巨大信息资源。每个人都可以从不同的路线进入虚拟世界,和虚拟物体交互,这样控制感受的就不再是计算机,而是用户自己,人们可以以习惯的自然方式访问各种场所,在虚拟社区中"直接"交谈和交往

VRML将创造一种融多媒体、三维图形、网络通讯、虚拟现实为一体的新型媒体,兼具先进性和普及性,是关心三维图形、多媒体、新一代网页开发和虚拟现实技术应用的人士应密切注意的。如今,在国外VRML已经广泛应用于生活、生产、科研教学、商务甚至军事等各种领域,并取得了巨大的经济效益。

 

 


第二章  万维网上的虚拟世界

2.1  VRML的发展

a)          VRML是由Mark Pesce Anthony(Tony)199312月开始设计,采用SGIsilicon graphicsinc)公司的Open Inventer ASCII文件格式作为VRML语言的基础,19942月设计完成了VRML初始例程, 19955月,VRML 1.0规范正式出台,但此规范缺少对一些关键特性如动作、交互和行为的支持。19968月, 在新奥尔良举行的SIGGRAPH’96会议上公布了VRML 2.0 规范的第一版,经ISO JTCI/SC24同意,这一版被作为14772号委员会草案公布,并且于19974月提交审议。该草案又称为VRML 97

b)          VRML一直在发展,VRML2.0在目标是提供一个开放的可扩展的系统,并支持在WWW上的三维交互式场景,但我们的目光和组织的其他成员一样,仍然停留在共享的多用户支持上。VRML2.0具有足够开放性,可使任何人都可以实验解决关于多用户空间的问题。

c)            VRMLHTML3D模拟,它使用VRML浏览器来描述现实世界。VRML既可以用来建立真实世界场景的模型,也可以建立虚构的三维世界,就像许多游戏那样。在3D中浏览,并不等于把2D抛掉,你仍可以保留图像、视频和音频,但你拥有了最具吸引力的3D界面。

 

2.2  如何浏览VRML

目前常用的浏览器NetscapeCommunicator4.0MicrosoftInternet Explorer5.0都是通过其自身集成的VRML浏览插件来直接浏览VRML文件的网页。

2.2.1 使用MicrosoftInternet Explorer5.0浏览器浏览

使用MicrosoftInternet Explorer5.0浏览器任意打开一个“*.wrl”文件,运行结果如图21所示。Internet Explorer5.0(以下简称IE5)是通过插件Word View 2.0进行VRML浏览的,在Windows自身集成的IE5中已经自带了这个插件。从图中可以看到,IE5浏览器窗口中的控制栏可以分为两个部分,窗口左侧的是浏览方式控制栏,窗口底部是浏览视点控制栏,同时也有弹出菜单控制。

 

2.2.1.1 World View 2.0的浏览方式控制

World View 2.0的浏览方式控制可分为移动模式和观察模式两种。移动模式分为WalkPlanFlyPanTurnRoll6种方式;观察模式可分为GotoStudy两种方式。并且所处的浏览方式不同鼠标的显示方式也各不相同,如表21所示。

 

2-1  打开VRML

 

2-1  World View 2.0的浏览方式控制

操作名称

浏览方式

实现方法

Walk

Plan

模拟人在虚拟世界中的走动和转向

在控制栏中选择WalkPlan项使之高亮显示,然后在浏览器窗口内按住鼠标左键并拖动鼠标或者通过键盘上的方向键来控制

Fly

Pan

在虚拟世界中的向上下或者左右平移

在控制栏中选择FlyPan项使之高亮显示,然后在浏览器口内按住鼠标左键并拖动鼠标或者通过键盘上的方向键来控制

Turn

改变浏览者的视野角度,相当于现实世界中人前的仰视、俯视、左转、右转。

在控制栏中选择Turn项使之高亮显示,然后通过鼠标或键盘上的方向键来控制,但是Turn可以实现任意角度的旋转,会形成一些在现实世界中不可能实现的奇怪视角,容易使浏览者分不清方向

Roll

在一个垂直平面上实现顺时针和逆时针的视角的转动。

向右拖动鼠标沿顺时针方向旋转,向左拖动鼠标沿逆时针方向旋转

Goto

走近观察对象

在控制栏中选择Goto项使之高亮显示,然后在浏览器中单击所要观察的对象即可靠近观察

Study

旋转并观察漂浮在空间中的一个或者一组对象

在控制栏中选择Study项使之高亮显示,然后在浏览器口内通过鼠标或者通过键盘上的方向键来控制

 

2.2.1.2 World View 2.0的浏览视点控制

World View 2.0的浏览视点控制共有4种视点控制方式:ViewAlignRestoreFit。其中AlignRestoreFit主要是用来帮助浏览者快速地从不熟悉的环境和错误的观察角度中脱离出来,恢复到正常的视野方向和角度。

·View

单击View两侧的箭头将切换到上一个或下一个视点,而单击View将得到所有视点的列表,用于快速切换视点。

·Restore

Restore将浏览者的视点切换到VRML文件默认的视点上,也就是浏览者进入虚拟世界的第一个视点。其与浏览器的刷新(Refresh)不同的是Restore并没有重载文件,只是切换了视点。

·Align

Align用来实现浏览者视点的对齐方式,即给浏览者重新配置一个人人合乎实际的视点。

·Fit

Fit用来实现当浏览者在一个并不熟悉的虚拟世界中迷失了方向时,浏览器将自动地切换到一个远景的视点上,在这个视点上浏览者将看到整个的虚拟世界。

 

1.2.1.3 World View 2.0的弹出菜单

Microsoft Internet Explorer 5.0浏览器窗口中任意一个地方单击鼠标右键将弹出如图1-2所示的快捷菜单。

 

           2-2  World View 2.0的弹出菜单

各个选项的说明如下:

·Viewpoints

表示所有可用视点的列表,可以实现视点的快速切换。

·Speed

用来改变浏览的速度。

·Headlight On

用来打开或者关闭顶灯。

·Show Toolbars

用来隐藏或者显示工具栏。

·Show Console

用来隐藏或者显示控制栏

·Navigation

用来设置不同的浏览方式控制。

·Preferences

用来设置World View的一些基本属性。

·Help

用来打开World View的帮助文件。

2.2.2 使用NetscapeCommunicator 4.0浏览器浏览

   Netscape浏览器的VRML浏览功能是通过其自身集成的插件COSMO软件公司的Cosmo Player实现的,在Communicator 4.0中集成的是Cosmo Player 1.0版本,其使用方法与MicrosoftInternet Explorer5.0浏览器相似,在此不再做详细介绍

2.3  使用VRML场景丰富个人主页

我们可以将VRML场景插入自己的主页中,使主页更加丰富多彩,更具有吸引力。将VRML插入网页的语法如下:

<EMBED SRC=car.wrl   WIDTH=300  HEIGHT=200>

其中,car.wrl为想要插入到网页中的VRML文件,默认其存放位置为与该网页同一目录下。例如,我们可以建一个VRML文件car.wrl,然后,引用上面语法将其插入网页, 双击该网页,即可在浏览器中浏览,如图2-3所示。 

2-3 在网页中插入VRML


第三章 VRML程序语言简介

3.1  VRML文件的基本结构

在了解VRML文件的组成之前,先看一个示例,其程序代码如下所示

#VRML V2.0 utf8

Group{

    children[

        Shape{

            geometry Sphere{

                    radius 1.5

            }

        }  

    ]

}

 

运行结果如图3-1所示

 

                                          3-1 一个简单的VRML程序

 

可以看出,VRML文件是一个后缀名为.wrl的文件,一般主要由文件头、造型、原型和事件路由4个部分组成。其中,只有文件头是必须的。

3.1.1 VRML文件头

VRML文件头的基本语法如下:

        #VRML V2.0 utf8

 

文件头是VRML文件的标志,所有2.0版本的VRML文件都以这行文字打头,而且必须放在文件的第一行。每一行的结束是用换行(newline)或者是Carriage return字符来控制。

文件头分为3部分,分别介绍如下:

·  VRML:告诉浏览器该文件是一个VRML文件

·  V2.0:说明该VRML文件遵循的VRML规范是2.0版本。

·  utf8:说明该文件使用的字符集是国际UTF-8字符集。

 

3.1.2 VRML造型

造型是VRML文件所描述的场景图,在它当中,VRML文件以阶层式的结构进行安排,场景图不仅只是一些物件集合在一起而已,它更定义了这些物件的顺序。在一个场景中,排在前面的物件可以影响排在后面的物件。如一个旋转(Rotation)或是材质(Material)的物件会影响在它之后的物件,使它以某个角度或是某种材质呈现出来:分离(Separator)物件可以用来限制影响的范围,这样一来场景中的物件就会一组一组地分割开来了;在它当中,我们还可以使用VRML提供的结点描述语言来设计三维对象的各种属性,如果在上例的Shape节点的appearance域中加一个Appearance节点,它的material(材质)定义了一个Material节点,它可以对立方体的材质、颜色进行描述:

如:

#VRML V2.0 utf8

Group{

   children[

       Shape{

           appearance Appearance {

               material Material{

                   diffuseColor 0.2 0.8 0.2

                   shininess 0.8

               }

           }

           geometry Sphere{

                   radius 1.5

           }

       }      

   ]

}

运行结果如图3-2所示。

 

3-2    一个简单的造型

3.1.3 VRML原型

原型是对节点内容的定义,这些节点是ISO/IEC组织已定义了的。同时也可以在VRML文件的原型部分中自行定义节点。

3.1.4 VRML事件路由

事件其实就是各种信号,这种信号由一个节点发送给另一个节点的方式由特定的路线来决定。事件信号通过改变节点的域值,在节点之间产生交互的影响。一个事件由时标和一个域组成。事件在各节点之间相互影响由事件入口和事件出口来实现,事件入口是附加在节点上的用来接受事件信号的逻辑检测器;而事件出口是附加在节点上的逻辑输出终端,这个节点必须是事件的发出者。事件出口也可储存当前事件信息。

产生事件和接收事件的节点之间的连接叫做路由。路由不是节点,路由的作用在于将各个不同的节点绑定在一起以使虚拟空间具有动感和交互性。大多数的VRML节点都有输入和输出接口,其中输入接口称为EventIn,输出接口称为EventOut。一个节点通常具有多个输入接口和输出接口,但有一些节点并不同时具有输入和输出接口。

一般情况下,路由是这样写的:

    ROUTE node.sourceField TO node.sinkField

在绑定路由的过程中应注意的事项如下:

·同节点的域和域值一样,EventInEventOut也具有一定的数值类型。

·绑定两个节点的路由在没有被触发之前一直都处于休眠的状态,只有在被触发时,才有事件从输出接口的节点产生,并且通过路由传送到输入接口的节点,引起相应的虚拟世界中的变化。

·可以将多个节点绑定在一起,从而创建复杂的线路,在虚拟世界中实现更真实的交互性。

 

3.2  VRML文件的基本内容

3.2.1 节点

VRML文件的最基本的组成部分是节点,VRML文件的主要内容就是节点的层层嵌套以及节点的定义和使用,由此构成整个的虚拟世界。

    一个VRML节点是一个对象,节点是各种现实物体或概念的抽象。VRML场景中的每个对象都是特定类型的节点,例如一个节点可以是SphereCylinderCube等。以上节点都是属于简单的几何节点(Geometry Node)。节点包括和事件,各种信息可以在节点之间通过路由来传递。

    VRML还支持其他类型的节点,如Material节点、Texture2节点。这些节点都属于属性节点(Property Node)

    VRML场景利用属性节点中的Material节点,定义该节点之后所有几何节点的表面属性,利用Texture2节点定义该节点后的所有几何节点的纹理属性。VRML1.0定义了36个节点,而VRML2.0定义了54个节点。

3.2.2

当节点属于同一种类型时,VRML通常用参数来区分它们。这就引入了VRML节点的域的概念。域定义了节点的属性,每一个节点设有一个或多个域,域可能包括各种不同的数据和一个或多个域值,每个域都有各自的缺省值。

域通常可分为两类:一类只包含单值(所谓单值,可以是一个单独的数,也可以是定义一个向量或颜色的几个数,甚至可以是定义一幅图像的一组数);另外一类是包含多个单值。

对于单值类型的域,名称以“SF”开始;而多值类型的域,名称以“MF”开始。在VRML文件中,表示多值域的方法是:一系列用逗号和空格间隔开的单值,整个用方括号括起来。如果一个多值域,不包含任何值,则只标出方括号“[ ]”,其中不填任何数。如果一个多值域,恰好只包含一个数,可以不写括号,直接写该值。

在同一个节点中的域具有以下特点:

·无序性:即各个域之间没有先后的次序之分,以不同顺序排列一一对应相同的域和域得到的最后结果完全一致。

·可选性:即各个域都有自己相应的缺省值。

3.2.3 节点的定义及引用

VRML文件中可以为节点定义一个名称,然后在本文件的后面就可以反复地引用该节点。被定义的节点称为原始节点;对被命名节点的引用称为实例。节点的域值在原始节点中应已设定,在实例中这些域值将被不能修改的完全相同引用。当原始节点中的域值被修改,所有的实例也将自动同时修改。总之,实例创建和原始节点完全相同的造型。

定义节点名称的基本语法如下所示:

    DEF 节点名称 节点{

                  ……

}

       引用节点的语法如下所示:

           USE 节点名称

3.2.4 VRML文件中的注释

VRML文件中允许用户在文件的任何部分进行注释说明,以增强该文件的可读性。VRML文件的注释部分是以“#”字符开头,结束于该行的末尾,也就是说在VRML文件中不支持多行注释。新一行的注释也必须以“#”字符开头。浏览器在浏览VRML文件时将跳过“#”字符之后本行的所有内容。另外在浏览器浏览VRML文件的时候将自动忽略VRML文件中的所有空格和空行,VRML文件编写者可以用任何合适的文本编辑器格式进行编写。

 

3.3  节点造型的使用

3.3.1 使用简单节点造型

VRML文件中的长方体(Box)、圆柱体(Cylinder)、圆锥体(Cone)、球体(Sphere)4种最基本的空间造型是由相应的专门节点直接创建,其他复杂的空间造型则是由其他高级的造型方法来创建。但是这些造型方法定义的只是空间造型的外形尺寸,造型的外观是由专门的节点来控制,即空间造型是由几何尺寸和外观来一同决定的,将这两者结合起来的节点就是Shape节点。Shape节点包括了外观和几何结构两个域,通常用Appearance节点来作为外观域的域值;各种方法造型的造型节点作为几何结构域的域值。由此可见,使用Shape节点就可以创建出虚拟世界中单个的几何造型,再加上使用Group节点就可以将各个单个的造型节点结合在一起。

 

3.3.1.1 Shape节点

       Shape节点是将Appearance指定的材质和质感应用到geometry域的几何节点。其基本语法如下所示:

       Shape{

              appearance           SFNode        exposedField NULL

              gemetry                SFNode        exposedField NULL

}

域值说明:

·appearance:包含一个Appearance节点。Appearance节点将定义造型外观的颜色和纹理。

·geometry:包含一个几何节点(如:BoxConePointSet)

 

3.3.1.2    Appearance节点

Appearance节点仅在Shape节点中的appearance域中出现。该节点中的所有域值均可为NULL,然而,一旦某个域包含非零节点,则被包含节点必须包含一个上述相应类型的节点。

    其基本语法如下所示:

    Appearance{

       material             SFNode     exposedField  NULL      

       texture              SFNode     exposedField  NULL

       textureTransform     SFNode     exposedField  NULL

}

·material:包含一个Material节点

·texture:包含一个ImageTextureMovieTexture或者PixelTexture节点。

· textureTransform:包含一个TextureTransform节点。

 

3.3.1.3    Material节点

    Material节点为相关的几何形体定义了表面材料的特性。Material节点的域决定物体表面反射光并产生颜色的方式。该节点的域值都是从0.01.0specularColorshininess决定了镜面反射光。当光线到物体表面的角度接近于表面到观察者的角度时,specularColor将被加到漫反射颜色的计算中。低反光值产生柔和光,而高反光值产生边界清晰的较小的亮点。

    其基本语法如下所示:

       Material{

           diffuseColor         SFColor    exposedField  0.8 0.8 0.8

           ambientIntensity     SFFloat       exposedField  0.2

           emissiveColor     SFFColor   exposedField  0 0 0

           shininess         SFFloat       exposedField  0.2

           specularColor     SFColor       exposedField  0 0 0

           transparency         SFFloat       exposedField  0

       }

域值说明:

·  diffuseColor:指定漫反射颜色。

·  ambientIntensity:指明将有多少环境光被该表面反射。

·  emissiveColor:指明一个发光物体产生的光的颜色。

·  shiniess:物体表面的亮度,其值从漫反射表面的0.0到高度抛光表面的1.0

·  specularColor:指明物体镜面反射光的颜色。

·  transparency:物体的透明度。

3.3.2 基本的VRML造型节点

       VRML文件中最基本的造型节点包括:Box节点、Cylinder节点、Cone节点和Sphere节点,下面只对Box节点进行介绍,其它节点用法类似。

    Box节点是一个长方体几何节点。长方体的中心位于局部坐标系原点,每个面均与坐标系平等,在缺省的情况下,长方体在xyz方向上的长度都是2(从-11)。

    有些浏览器从长方体内部可能是不可见的,故不要将用户的视点放在一个Box中。如果希望看到几何实体的内部,应使用编号平面集定义几何实体,且将solid域设为FALSE

    其基本的语法如下所示:

       Box

           Size       MFFloat    2.0 2.0 2.0

       }

域值说明:

    ·  Size:相对于长方体宽、高和深度的xyz值。

3.3.3 造型定位及变换

       在现实世界中的各种物体都有各种不同的位置和不同的方向,而在VRML文件中是通过对坐标系平移和旋转从而形成新的处于不同位置和不同方向上的空间坐标系,然后在新的坐标系中创建空间造型,这样就可以创建空间不同位置和方向上的几何造型和文本造型。

    VRML中创建新的空间坐标系都是通过将所要安排位置和方向的造型用Transform节点编组,一个Transform节点表示相对当前坐标系形成了一个新的坐标系,而在Transform节点编组中的空间造型都是相对于这个新创建的坐标系所创建的。

    Transform节点的基本语法如下所示:

    Transform{

       children          MFNode exposedField  []

       center        SFVect3f   exposedField  0 0 0

       rotation          SFRotation exposedField  0 0 1 0

       scale         SFVect3f   exposedField  1 1 1

       translation       SFVect3f   exposedField  0 0 0

        其余域略

}

域值说明:

    ·  children:受该节点指定的变换影响的子节点

· center:用来指定一个适当的空间旋转中心。当用scale域缩放造型的时候默认的缩放中心也是center域的缺省域值

·  rotation:给定旋转的轴和角度

·  scale:指定缩放比例,各轴向缩放比值可以不相等

·  translation:指定变换量

3.4  传感器

传感器(Sensor,或称检测器) VRML 中提供交互能力和动态行为的基元。一个具有动态能力的节点需包含传感器。VRML 共提供7种传感器节点,即CylinderSensorPlaneSensorTimeSensorTouchSensorVisibilitySensorProximitySensor。它们提供了用户与虚拟世界中的物体进行交互的机制:根据时钟或者用户的动作,它们可以产生一个相应的事件,这事件沿着事先设定好的路由传递下去,从而使得虚拟世界对用户做出反应,实现交互。

下面给出TouchSensorCylinderSensor这两个传感器的主要结构。

TouchSensor节点的主要结构如下:

TouchSensor

enabled TRUE ∥exposedField SFBool

isActive ∥eventOut SFBool

isOver ∥eventOut SFBool

 其余域略

这个节点可以感知到观察者的移动。当代表观察者的光标移动到一组设定有TouchSensor节点的造型上时,这个节点的isOver eventOut 事件就会输出一个TRUE ,当光标移开后,isOver eventOut就会输出一个 FALSE 。类似地,isActive eventOut 事件是当光标移到该组造型且按下鼠标左键时,输出一个TRUE,放开该键后,再输出一个FALSE
  CylinderSensor节点的主要结构如下:

CylinderSensor

minangle 0.0 ∥exposedField SFFloat

maxangle 1.0 ∥exposedField SFFloat

rotationchanged ∥eventOut SFRotation

 其余域略

  }

这个感应器在感知到鼠标的拖动动作后,将使它所在的组造型绕某一轴转动,转动角度由鼠标拖动的距离决定,通过rotation?changed事件输出旋转角度;minanglemaxangle的单位为弧度,它们限定了转动允许的最大范围。

  在Transform节点中有一个隐含的域setrotation eventIn,它可以接受到类型为SFRotation的事件,并根据这一新的旋转值来设定其rotation域的值,从而实现旋转。

3.5  动画的实现和内插器

VRML的动画比普通动画更吸引人,因为当用户在一个虚拟世界中漫游时,他可以从各种角度来观察动画,而要完成一个复杂的从所有视点来看都成功的动画是很困难的。VRML 动画的另一个特点是,在播放动画时没有一个固定的帧速率,如果动画是由TimeSensor驱动的,它就可以确保动画在固定的CycleInterval时间内完成,这样做的好处是可以使动画与声音或其它时间固定的媒体相同步。

  内插器(Interpolator,或称插补器)是实现动画的重要手段之一。通过一个被启动的时钟节点(TimeSensor),不停地向内插器提供时间消息。内插器一旦接受到一个时间消息,就会结合其内的关键时刻列表,从自己的关键值表中,通过线形插值的算法,得到一个当前时候的关键值,并经过路由送至Transform节点的相应域,从而实现动画。

实现动画的另一种方法是使用描述符script,它是用于VRML 2.0各个节点的一种描述语言,是Java描述符语言的子集,其语法和Java script有相似之处。


第四章  虚拟小区

通过对VRML的进一步认识,本章对一个虚拟小区进行了设计,整个小区主要包括以下各模块:Community(小区主模块)Building(高楼)Tree(树木)Grass(草地)Pool(喷水池)Bikecote(自行车棚)

4.1  小区主模块(Community)

       对各个分模块进行汇总,通过Background节点设置小区背景图案,使用Viewpoint节点设置各视点位置,并在其中加了灯光处理,具体细节可参照所附源代码,整个虚拟小区如图4-1所示

  

41 虚拟小区

 

其主要结构如下代码:

DEF Buildings Group {                     #建筑物      

       ……

}

 

DEF Pool Group {                        #喷水池

       ……

}

DEF House Group {                         #休闲小屋

       …….

}

 

DEF Plant Group {                                  #绿化

       ……

}

 

DEF       Ground Group {

       ……

}

节点说明:

·  Buildings:包含各楼房,自行车棚等的建筑物

·  Pool:读入喷水池造型文件,将其放入小区中心

·  House:在小区的空地创建休闲小屋

·  Plant:小区中的花草树木

·  Ground:包含小区地面、大门及围墙

4.2  高楼(Building)

       建造高楼是本小区的重点,现实中,建造楼房的一般步骤为:先打地基,再将楼房一层层往上造,然后再盖顶,在这里,我们分为三个节点来创建一个10层楼的楼房,Base节点也就是基层,Floor节点中包含10层楼创建,Head节点也就是顶层了,其中Floor节点中虽然有10层,但我们只要建一层,其余均可通过这层来扩展,这与现实中的造房就不同了,这也是软件的最大优点可重用性。运行后的场景如图42所示。

  

42  建筑高楼场景

源代码结构如下:

       DEF       Base Group {

                     ……

}

 

       DEF      Floor Group {

                     ……

       }

      

       DEF       Head Group {

                     ……

}

节点说明:

    Base:高楼基层

    Floor10层楼节点,此节点中包括阳台及窗户的创建

    Head:高楼最上面的部分

 

4.3  树木(Tree)

       在小区中可以看到,房屋旁边种满了一棵棵的小树,这些树看起来多很逼真,而且是立体的,其实这些树是用平面贴图做的,这也是虚拟现实中的一种制作技巧,它是通过旋转来实现立体显示的,首先,创建一个种树的盆子,然后将树的贴图放入其中,设置Billboard节点的axisofRotation值为0 1 0,这样,当观察者转动时,树的图片也会随着观察者而转动,也就形成了图片正面永远会朝着观察者,在观察者看来就形成了立体感。这种方法有一种不好,就是如果图片的分辨率太底,当观察者很接近图片时,图片就会显得比较模糊。但这不影响整体的观察。如图43所示。

源代码结构如下:

Transform {

       translation      -8 -3 -12                    

       children [

              DEF       tree1 Transform {

                            ……

              }

       ]

}

…… …..

Transform {

       translation      -8 -3 -12                    

       children [

              DEF       tree3 Transform {

                            ……

              }

       ]

}

……

节点说明:

    定义tree1,tree3树资源,再通过Transform放置在各位置

 

4-3    小区树木场景

 

4.4  喷水池(pool)

       喷水池主要由3个部分组成:整个池的外观,池中的水面及四条水柱,设在小区中心。此喷水池设计比较简单,如图44所示。

源代码结构如下:

       ……

       DEF Water Transform{

                     ……

}

……

Transform{

       ……

       children[

              DEF Column Shape {

                            ……

                     }

              ]

              ……

       }

       ……

 

44        喷水池场景

 

节点说明:

Water:喷水池表面的水

Column:其中一条水柱,其它三条引用该水柱

 

 


第五章  结束语

5.1  前景展望

VRML的出现使得Internet更加丰富多彩,但VRML是一种编程语言,学习起来会比较的麻烦,而且各场景多需要代码来实现,显得较复杂,这就需要VRML能够成为像VBVC等一样的可视化语言,这样将会给编程带来很大的方便。

虽然目前主宰WWW服务的仍是HTML标准,但由于VRML以其交互性强、分布式、三维、多媒体集成、境界逼真等特性,加之价格低廉、易于实现,受到各大公司重视,相信作为代Web的强力后盾,从其诞生之日就预示它取代HTML的趋势。 

 

5.2  论文心得及总结

通过一个学期对VRML的学习,基本上掌握了VRML这一现代的三维编程语言,能使用简单节点,创建各种不同的虚拟场景,在学习过程中也曾遇到过很多的困难,原本以为这是一门很难掌握的语言,但通过查询各方面的资料,自己动手去运行每一个实例,渐渐地就会感觉到自己慢慢地在熟悉,慢慢在提高,学习语言最重要的一点就是自己要多动手,多观察,遇到问题想办法自己去解决,去思考,这样才能学好每一样东西,做好每一件事。