论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
NavigationInfo节点是用来定义导航信息的,type域可以定义为飞行FLY,行走WALK等方式,speed域设置观察着在场景中畅游的速度,单位为米每秒。Headlight域指明是否浏览器要将观察者的头灯打开。头灯是一束指向用户正在观看方向的有向光。AvatarSize域指定一些距离参数,这些参数决定了在考虑碰撞检测和视点随地形起伏的用户可移动范围。该域的第一个只是碰撞被探测出以前用户的位置与一个碰撞几何体间允许的距离;第二个只是视点与地面间应保持的高度;第三个只是视点可以跨过得最高障碍物的高度。域avatarSize值描述了观察者替身的大小特性。如:
NavigationInfo{
type "FLY"
speed 1.0
headlight FALSE
avatarSize [0.25,3.2,3.0]
}
Transform节点是一个组节点,该节点包括一个子节点的列表。这些子节点可以是Shape节点、其他Group节点或Transform节点。Translation用来指定造型的位置,children域是指定受该节点的变换影响的子节点。这个节点是整个程序设计中的基础节点,几乎每一个模型的建立都用到了Transform,因此,对Transform的灵活运用尤为重要。下面的例子使用Transform节点设置地面。
Transform {
translation 0 -24 0
children[
Shape{
appearance Appearance{
material Material {diffuseColor 0.4 0.25 0.2,}
}
geometry Box {size 400 48 400} } ] }
Viewpoint节点是视点定义节点,定义了处于局部坐标系中的一个指定位置,用户可以从该点来观察场景。Position用来设置视点的位置,它是一个三元值,jump域决定了视点的类型,即跳跃型的和飞跳跃型的。Orientation域是一个四元值,前三个值指定了视点的旋转轴,第四个值说明了旋转角度的正负。Description域的值指定了一个用于描述视点的文本串。下面是一个关于视点aa的例子。
DEF aa Viewpoint {
position 25 5 70
jump FALSE
orientation 0 1 0 0.4
description "aa"
}
在VRML编程中,Group节点也是一个很重要的节点。Group节点提供了最简单的节点编组,可以包含任意数目的子节点,与一个没有转换域的Transform节点相当。该节点与Transform节点一样,也有一个children域。它用来收集节点和创建不需要实施变幻的层次结构。似乎有了Transform节点,Group节点并没有什么用处。但有时在对一个整体进行操作时,以Transform节点组织的整体相比Group节点组织的整体并不能显示出优势。如果在使用传感器或插补器节点时,祖作为一个整体,可以使用DEF来给它定义一个名称,并且在VRML文件中使用USE重复的引用。
一个组可以具有任意数目的成员,成为子节点。既可以是造型以可以是其他包含造型和组的足。包含子节点的组节点被称为父节点。因为组节点可以其他的组,一个组的父节点可能是一个更高一级组的子节点。高级组的父节点可以是一个更高级组的子节点。从此上溯直到最高级父节点,称为根节点。造型可以组织在一起来创建更大、更复杂的造型。由于Group节点和Transform节点很相似,在这里就不再举例子了。
以上介绍的几个节点是VRML的核心节点,整个程序的设计都是通过这些节点的不同设置和组合来实现的。除此之外,还有两个重要的工具,这就是节点名定义DEF及引用USE,这是VRML世界提供给我们的两个避免重复劳动的工具,节点命名是以关键字DEF加上所命名名称在一起,置于节点类型定义之前开完成的。这两个说明符可以放在任何允许节点的地方。USE语句并不是复制该节点,而是把该节点再次插入它所在的场景图。节点名只在本文范围内有效。
总之,系统的编码实现就是利用VRML中的基本造型节点对已经涉及好的模型进行的模拟实现过程。在这个过程中,需要设计者能够熟练的掌握和运用VRML语言,懂得融会变通,才能使预想创建的模型得以实现。
当然,VRML中还有很多更深一层次的部分,那需要有兴趣的读者继续学习和探索,笔者在这里就不再过多描述了。