vrml基础知识简介

更新时间:2023-12-30 13:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VRML简介和基础语法

--------------------------------------------------------------------------------

一、VRML是什么

VRML是虚拟现实造型语言 (Virtual Reality Modeling Language) 的简称。

二、VRML文件的组成部分和文件头

VRML文本的文件名后缀是 .wrl,这是一种ASCII文本文件。VRML文件可以包括四个主要成分:

VRML文件头 原型

造型和脚本 路由

每个文件都有一个文件头,VRML1.0的文件头和2.0的文件头是不一样的。VRML 1.0的文件头是#VRML V1.0 asciiVRML 2.0的文件头是,我们这里只讨论VRML 2.0#VRML V2.0 utf8 在VRML文件中可以加入注解,只要在注解前加入#即可。下面是一个简单的VRML文件,它在三维空间中建立一个立方体。#VRML V2.0 utf8 Shape {

appearance Appearance { } material Material { } }

geometry Box { } }

三、几个基本造型

所有VRML造型都使用Shape节点创建。

Shape节点的语法是Shape {

appearance NULL geometry NULL

}其中appearance域的值定义一个节点,该节点定义造型的外观,包括颜色和表面纹理等。当它为NULL值时建立的造型是无纹理的白色有阴影物体。它将在后面介绍。geometry域的值定义一个节点,该节点定义造型的3D构造及几何结构。典型的几何结构有Box,Cone,Cylinder和Sphere,它们都可以作为geometry的值。

Box节点的语法是Box {

size 2.0 2.0 2.0 #长高宽(x y z 三个方向,注:2.0 2.0 2.0是缺省值,下同) }

Cone节点的语法是Cone {

bottomRadius 1.0 # 圆锥底部半径 height 2.0 # 圆锥的高

side TRUE # 是否创建圆锥的锥面 bottom TRUE # 是否创建圆锥的底 }

Cylinder节点语法Cylinder { radius 1.0 # 园柱底的半径 height 2.0 # 园柱高

side TRUE # 是否创建园柱曲面 top TRUE # 是否创建园柱顶 bottom TRUE # 是否创建园柱底

}

Sphere节点语法Sphere { radius 1.0 # 球体的半径

}以上语法中的值,是缺省值,下同。下面是一个简单的VRML文件,它创建一个白色的,无纹理的长、高、宽分别为2.2,1.0和1.5的长方体。#VRML V2.0 utf8

Shape {

appearance Appearance {

material Material { } # 白色无纹理的物体(material是appearance中的一个属性,我们以后接触)

}

geometry Box { size 2.2 3.0 1.5 } # 长方体 }

四、文本造型

Text节点语法(作为geometry的值)Text { string [] #文本内容 length 0.0 #文本长度

maxExtent 0.0 #文本的最大长度 fontStyle NULL #文本外观特性 }

FontStyle节点语法FontStyle { family \指定字符集 style \文本风格 size 1.0 #字符高度

spacing 1.0 #指定VRML单位的水平文本的垂直间距和垂直文本的水平间距 justify \相对于X、Y来说,文本造型放置的位置 horizontal TRUE #水平文本还是垂直文本

leftToRight TRUE #水平文本是从左到右还是从右往左(X方向) topToBottom TRUE #垂直文本是从上到下还是下到上 language \指定TEXT节点中string所用语言的前后文

} 文本风格style的值包括“PLAIN(常用文本)”、“BOLD(黑体文本)”、“ITALIC (倾斜文本)”和“BOLDITALIC(黑体且倾斜的文本)”。

justify的值有四个“FIRST”、“BEGIN”、“MIDDLE”和“END”,justify可以取一个值,也可以取两个值。当取两个值时,两个值应放在方括号中,用逗号隔开。其中第一个为主对齐,第二个为次对齐。需要说明的是对齐的具体含义和lefttorigh和toptobottom的取值有关。具体见下面的表:表5.1水平文本主对齐的justify域值

justify域的主对齐值 leftToRight域值描述 “FIRST” TRUE 将文本块的左边放在Y轴上 FALSE 将文本块的右边放在Y轴上

“BEGIN” TRUE 将文本块的左边放在Y轴上 FALSE 将文本块的右边放在Y轴上

“MIDDLE” TRUE 将文本块的中边放在Y轴上 FALSE 将文本块的中边放在Y轴上

“END” TRUE 将文本块的右边放在Y轴上 FALSE 将文本块的左边放在Y轴上

表5.2垂直文本主对齐的justify域值 justify域的主对齐值 topToBottom域值描述 “FIRST” TRUE 将文本块的上边放在X轴上 FALSE 将文本块的下边放在X轴上

“BEGIN” TRUE 将文本块的上边放在X轴上 FALSE 将文本块的下边放在X轴上

“MIDDLE” TRUE 将文本块的中边放在X轴上 FALSE 将文本块的中边放在X轴上

“END” TRUE 将文本块的下边放在X轴上 FALSE 将文本块的上边放在X轴上

表5.3水平文本次对齐的justify域值 justify域的主对齐值 topToBottom域值描述 “FIRST” TRUE 将第一行文本的基线放在X轴 FALSE 将第一行文本的基线放在X轴

“BEGIN” TRUE 将第一行文本的上边放在X轴 FALSE 将第一行文本的下边放在X轴

“MIDDLE” TRUE 将文本块的中点放在X轴 FALSE 将文本块的中点放在X轴

“END” TRUE 将最后一行文本的下边放在X轴 FALSE 将最后一行文本的上边放在X轴

表5.4垂直文本次对齐的justify域值 justify域的主对齐值 leftToRight域值描述 “FIRST” TRUE 将第一列文本的基线放在Y轴 FALSE 将第一列文本的基线放在Y轴

“BEGIN” TRUE 将第一列文本的左边放在Y轴

FALSE 将第一列文本的右边放在Y轴

“MIDDLE” TRUE 将文本块的中点放在Y轴 FALSE 将文本块的中点放在Y轴

“END” TRUE 将最后一列文本的右边放在Y轴 FALSE 将最后一列文本的左边放在Y轴

例子:#VRML V2.0 utf8

Shape {

appearance Appearance {

material Material { } # 白色无纹理的物体(material是appearance中的一个属性,我们以后接触)

}

geometry Text {

string [\fontStyle FontStyle { spacing 1.1 } } }

五、造型定位(平移、旋转和缩放)

Transform节点语法Transform { children [] # 所包含的子节点列表

translation 0.0 0.0 0.0 # x,y,z方向上平移的值

ro tation 0.0 0.0 1.0 0.0 # x,y,z方向旋转轴标识,旋转角度(用弧度表示) scale 1.0 1.0 1.0 # x,y,z方向的缩放因子

scaleOrientation 0.0 0.0 1.0 0.0 # 在x,y,z方向轴上旋转一定弧度后,在按scale因子缩放

Center 0.0 0.0 0.0 # 新的旋转或缩放中心点的x,y,z坐标

} children域中的值可以是Shape节点,Group节点(后面讲)或另一个Transform节点(即可嵌套)。还有些域我们放到后面讲。

物体的平移

translation的三个值分别表示x,y,z方向上的平移。 例子:

#VRML V2.0 utf8 Transform {

translation 2.0 3.0 -5.0 # x方向平移2个单位,y方向平移3个方向,z的反方向平移5个单位

children [ Shape {

appearance Appearance {

material Material{}

}

geometry Cylinder {} } ] }

请看效果(红的为x方向平移2个单位,y方向平移3个方向,z的反方向平移5个单位的圆柱体)

物体的旋转

旋转采用右手法则,rotation域的前三个值的取值为绕X轴旋转(1.0 0.0 0.0);绕Y轴旋转(0.0 1.0 0.0);绕Z轴旋转(0.0 0.0 1.0);第四个数是旋转的角度,用弧度来表示,正数为逆时针旋转,负数为顺时针旋转。

通常情况下,旋转中心是原点,但可以用Center的值来重定义旋转中心点。 例子:

#VRML V2.0 utf8 Transform {

rotation 1.0 0.0 0.0 0.785 # 绕X轴顺时针旋转45度 children [ Shape {

appearance Appearance { material Material{} }

geometry Cylinder {} }

] }

请看效果,红色的为旋转后的圆柱体,白色的为Y轴

物体的缩放

scale的三个值分别是x,y,z方向的缩放因子.scaleOrientation的值指定一条旋转轴和旋转角度,在缩放前先做旋转,缩放后再转回来,所以它只是使缩放方向旋转而不会旋转物体. 例子:

#VRML V2.0 utf8 Transform {

scale 3.0 0.0 0.5 # 沿X轴放大两倍,Z轴方向缩小0.5倍 children [ Shape {

appearance Appearance { material Material{} }

geometry Cylinder {}

} ] }

六、使用材料控制外观

RGB颜色

RGB颜色包含三个浮点值,每一个都在0.0到1.0之间。第一个RGB颜色值代表红色的使用量值,第二个代表绿色的量值,第三个代表兰色量值。0.0表示该种颜色被关闭,1.0表示该种颜色全部打开。

明暗法

当光线照在造型上,造型对光的一面亮,背光的一面暗,而侧面就是中等亮度。明暗的对比使你感觉到造型是三维立体的。你可以使用VRML中的照明节点在你所处的环境中增加一些光源,这些节点将在中级教程中介绍。你可以通过使用Material节点来控制表面的明暗度。

发光效果

发光造型包括电灯泡、计算机屏幕和霓虹灯等。发光造型都发出自己本身的光。使用Material节点你可以指定一个发光颜色。

透明度

不透明的造型挡住了光线,而透明的造型可以让光线通过,半透明的造型挡住了部分光线。你可以用Material节点来指定一个造型创建时的透明状态。

Shape节点中的Appearance节点

在基本造型中我们详细介绍了Shape节点的geometry域,提到了“其中appearance域的值定义一个节点,该节点定义造型的外观,包括颜色和表面纹理等”。 Appearance节点语法是

Appearance {

material NULL #定义造型材料属性的节点 texture NULL #(后面介绍)

textureTransform NULL #(后面介绍) }其中

Material的节点语法是

Material {

diffuseColor 0.8 0.8 0.8 #表示一种材料的RGB颜色 emmissiveColor 0.0 0.0 0.0 #表示RGB发光色

transparency 0.0 #表示一个在0.0到1.0之间的透明度因数 ambientintensity 0.2 #(后面介绍)

specularColor 0.0 0.0 0.0 #(后面介绍) shininess 0.2 #(后面介绍)

}

例1一个旋转了的红色立方体

#VRML V2.0 utf8 Transform{

rotation 1.0 1.0 0.0 0.635 #绕X轴和Y轴旋转 children [ Shape {

appearance Appearance { material Material {

diffuseColor 1.0 0.0 0.0 } # 红色无纹理的物体

}

geometry Box { size 2.2 3.0 1.5 } # 长方体 } ] }

例2 是多个不同颜色外观的造型 #VRML V2.0 utf8 Group { children [

#Station Shapes Shape {

appearance Appearance { material Material { diffuseColor 1.0 0.0 0.0 } }

geometry Sphere {} },

Shape {

appearance Appearance { material Material {

diffuseColor 0.5 0.25 1.0 } }

geometry Cylinder { radius 2.0 height 0.05 } },

Shape {

appearance Appearance {

material Material {

diffuseColor 0.75 0.0 1.0 } }

geometry Cylinder { radius 0.15 height 5.0 } } ] }

例3 本例子共有三个白色质地的灯泡,左边的关闭,中间的发白光,右边的发黄光。 八、Group节点和DEF、USE语法

Group节点

Group {

children [ ] #指定包含在组中的字节点列表,典型的子节点是Shape或其他的Group节点

bboxCenter 0.0 0.0 0.0 #(以后讲) bboxSize -1.0 -1.0 -1.0 #(以后讲) addChildren #(以后讲) removeChildren #(以后讲)

}

DEF语法

DEF 节点名节点类型 {……} #定义节点的名称

节点名可以是任何字母序列,他们是区分大小写的。但注意不要和VRML关键字重复。 节点类型是一种特殊类型的节点,比如Box节点。 例如:DEF MY_BOX Box {}

USE语法

USE 节点名 #使用已经定义的节点名

在同一文件中你可以使用USE来引用原始节点任意次。 例如:USE MY_BOX 例子:

#VRML V2.0 utf8 Group { children [ #Wing

DEF Wing Transform { scale 0.5 1.0 1.5

children Shape {

appearance DEF White Appearance { material Material { } }

geometry Cylinder { radius 1.0 height 0.025 } } },

# Fuselage

DEF Fuselage Transform { scale 2.0 0.2 0.5 children Shape{

appearance USE White geometry Sphere { } } },

# Wing detal and fuselage dome Transform {

scale 0.3 2.0 0.75 children [ USE Wing USE Fuselage ] } ] }

RML中的节点有以下几种类型:

造型尺寸、外观节点:Shape、Appearance、Material

原始几何造型节点:Box、Cone、Cylinder、Sphere

造型编组节点:Group、Switch、Billboard

文本造型节点:Text、FrontStyle

造型定位、旋转、缩放节点:Transform

内插器节点:TimeSensor、PositionInterpolater、OrientationInterpolater、ColorInterpolator、 ScalarInterpolator、CoordinateInterpolator、

感知节点:TouchSensor、CylinderSensor、PlaneSensor、SphereSensor、VisibilitySensor、ProximitySensor、Collision

点、线、面集节点:ointSet、IndexedLineSet、IndexedFaceSet、Coordinate

海拔节点:ElevationGrid

挤出节点:Extrusion

颜色、纹理、明暗节点:Color、ImageTexture、PixelTexture、MovieTexture、Normal

控制光源的节点:ointLight、DirectionalLight、SpotLight

背景节点:Background

声音节点:AudioClip、MovieTexture、Sound

细节控制节点:OD

雾节点:Fog

空间信息节点:WorldInfo

锚点节点:Anchor

脚本节点:Script

控制视点的节点:Viewpoint、NavigationInfo

用于创建新节点类型的节点:ROTO、EXTERNPROTO、IS

ScalarInterpolator节点

ScalarInterpolator {

key [ ] # exposed field MFFloat

keyValue [ ] # exposed field MFFloat } 域

key 关键帧时间比率列表。通常介于0.0和1.0之间的浮点数,包括0.0和1.0。 keyValue 浮点数值的列表,对应于上面的列表。

事件

set_fraction eventIn SFFloat 动画的完成比率。

value_changed eventOut MFFloat 与比率相对应的浮点数值。

说明

ScalarInterpolator节点允许对单精度浮点数进行动画关键帧的插值操作。建立插值器时,为动画的不同完成比率设置相应的〉闶ㄗ詈冒?贾岛徒崾担?br>通常坐标插值器从时间传感器接收set_fraction事件,经处理后,将输出值发送给类型为单精度浮点数的域。如intensity和radius。

s cript节点

s cript {

url [ ] # exposed field MFString mustuate FALSE # SFBool directOutpur FLASE # SFBool

以下域可由用户定义任意多个:

eventIn eventTypeName eventName field

fieldTypeName

fieldName initialValue eventOut

eventTypeName eventName 域

url 脚本的URL或脚本。可能有多个值,浏览器执行第一个它理解的脚本。

mustuate

指出当浏览器不再需要脚本的输出时是否还要给脚本发输人事件。若为FALSE,浏览器有时可以提高其性能,因为当没有其它节点需要脚本的输出事件时,浏览器可以不发事件给脚本。除非脚本做了诸如访问网络这样一些浏览器无法识别的事,否则应该保留FALSE。

directOutpur

指出是否允许脚本直接改变场景节点和动态地建立或删除通路。换句话说,就是指出脚本是否只能通过事件的方法来与世界联系。如果不是十分必要的话,应设为FALSE,可便于浏览器对场景进行优化。

事件

s cript 节点不能包含内置事件,但对于整个s cript节点的输入输出事件可定义任意多个事件。

说明

一个s cript节点包含一个叫作s cript的程序。这个程序是以javas cript或Java写的。脚本可以接受事件,处理事件中的信息,还可以产生基于处理结果的输出事件。

当一个s cript节点接受一个输入事件时,它将事件的值和时间戳传给与输人事件同名的函数或方法。函数可以通过赋值给与事件同名的变量发送事件。一个输出事件与调用发出输出事件函数的输入事件有相同的时间戳。

当一个脚本给另一个节点发出多个具有相同时间戳的事件时,另一个节点的类型将决定处理事件的顺序。总而言之,这个处理过程最接近用户期望的顺序。例如,如果用户的脚本向某个ViewPoint节点发出有相同时间戳的set_position和set_bind事件,浏览器在激活该视点之前会重新设置观点的位置。大多数情况下,用户最好忽略时间戳。

一些脚本语言(包括Java,javas cript)定义了有特殊意义的函数和方法。例如,如果用户提供了一个叫initialize()的函数,则当世界被装入时,首先调用这个函数。另外,如有shutdown()函数,则在删除世界时调用(例如当用户用Anchor选择了另一个世界时)。eventsProcessed()函数在一个或多个eventIn函数完成后被调用(由浏览器决定是完成每个eventIn函数后调用还是等所有输人事件都处理完了再调用)。

Shape节点

Shape {

appearance NULL # exposed field SFNode geometry NULL # exposed field SFNode }

appearance 包含一个Appearance节点。

geometry 包含一个几何节点(如:Box、Cone、IndexedFaceSet、PointSet)。

说明

将Appearance指定的材质和质感应用到geometry域的几何节点

Sound节点

Sound {

source NULL # exposed field SFNode intensity 1 # exposed field SFFloat priority 0 # exposed field SFFloat

location 0 0 0 # exposed field SFVec3f direction 0 0 1 # exposed field SFVec3f minFront 1 # exposed field SFFloat maxFront 10 # exposed field SFFloat minBack 1 # exposed field SFFloat maxBack 10 # exposed field SFFloat spatialize TRUE # SFBool } 域

source 包含一个AudioClip或MovieTexture节点。若没有指定,将不发出声音。 intensity 声源的强度,0为最小值,1为最大值。在有些浏览器中最大值可以超过1。 priority 指出声音的优先级。若为背景音乐,则设为0。 location 声源的坐标。

direction 指定椭球的长轴方向。

minFront 声源坐标点至内椭圆球前部端点的距离。 maxFront 声源坐标点至外椭圆球前部端点的距离。 minBack 声源坐标点至内椭圆球后部端点的距离。。 maxBack 声源坐标点至外椭圆球后部端点的距离。

spatialize 指出声音是作为空间点播放(TRUE),还是作为环境声播放(FALSE)。

说明

minBack和minFront域定义一个内椭圆;maxBack和maxFront域定义一个外椭圆。 在内椭圆区域内声音为最大值;在外椭圆区域外没有声音;在内外椭圆之间的区域内,其声音按距离衰减。

声音能否同时播放,由浏览器决定。

Sphere节点

Sphere {

radius 1

# SFFloat } 域

radius 球的半径。

说明

Sphere是一个代表球的几何节点。缺省时,球以原点为圆心,以1为半径。 当一个纹理图应用到一个球上时,缺省的纹理将覆盖整个表面,从球体后面逆时针铺开。纹理在yz平面的后面缝合。由于浏览器功能的不同,在使用某些浏览器时,从内部观察球体是不可见的。不要把观察点放到球体内。如果希望看到几何体的内部,使用IndexedFaceSet,将其中solid设为FLASE。

SphereSensor节点

SphereSensor {

enabled TRUE # exposed field SFBool offset 0 1 0 0 # exposed field SFRotation autoOffset TRUE # exposed field SFBool } 域

enabled 表示传感器当前是否检测定点设备的事件。可向该传感器发送一个值为FALSE的set_enabled时间来关闭它。

offset 在一次拖动后,相关几何体相对于初始位置的旋转角度。

autoOffset 设置为TRUE,表示在拖动结束时,将当前的方位值存储到offset中,若autoOffset设置为FALSE,在用户每次开始一个新的托动时,几何体复位到初始值。

事件

inActive eventOut SFBool

指出用户是否在拖动与传感器相关的几何体。

trackPoint_changed eventOut SFVec3f

用户在拖动过程中任意时刻定点设备在假想的球体表面上的实际位置。 rotation_changed eventOut SFRotation

用户在拖动过程中任意时刻假想球体的当前朝向。

说明

SphereSensor节点将二维的拖动解释为三维空间中绕局部原点的旋转。若在该节点的兄弟几何体处按下鼠标,浏览器会以点击鼠标的点到原点的距离为半径作一个想象中的球。随后的拖动将解释为旋转球体。

SpotLight节点

SpotLight {

on TRUE # exposed field SFBool intensity 1 # exposed field SFFloat

ambientIntensity 0 # exposed field SFFloat color 1 1 1 # exposed field SFColor location 0 0 0 # exposed field SFVec3f direction 0 0 -1 # exposed field SFVec3f

beamWidth 1.570796 # exposed field SFFloat cutOffAngle 0.785398 # exposed field SFFloat radius 100 # exposed field SFFloat

attenuation 1 0 0 # exposed field SFVec3f } 域

on 指出灯是否打开。 intensity 光源的强度。

ambientIntensity 光源对环境光的贡献。 color 光源的颜色。 location 光源的位置。

direction 光圆锥轴的方向。

beamWidth 光圆锥对应的角度(以弧度为单位)。该角度外,光的强度减弱。 cutOffAngle 光源的遮挡角。 radius 光源的射程。

enabled 表明此传感器是否对定点输入设备做出反应。

事件

isOver eventOut SFBool

表明定点设备当前是否正指向传感器的兄弟几何体(无论是否有键被按下)。

isActive eventOut SFBool

表明是否定点设备的键正在被按下。

hitPoint_changed eventOut SFVec3f 最近在兄弟几何体表面释放键的位置。

hitNormal_changed eventOut SFVec3f hitPoint_changed所指定点的法向量。

hitTexCoord_changed eventOut SFVec2f hitPoing_changed所指定点的纹理坐标。 touchTime eventOut SFTime 定点设备的键完成一次点动的时间。

说明

TouchSensor(触动传感器)节点产生基于定点输入设备(通常是鼠标)的事件。这些事件表明用户是否正在点选某个几何体和用户在什么地方,以及在什么时候按了定点设备的键。 触动传感器监视的几何体是传感器的兄弟几何体传感器父组节点的所有子节点。 若定点设备未指向传感器的兄弟几何体,而用户开始将定点设备移到传感器的兄弟几何体时,传感器将产生一个isOver事件,并将其值设置为TRUE;相反,若定点设备已经指向传感器的兄弟几何体,此时用户将定点设备移出传感器的兄弟几何体,传感器将产生一个isOver事件,并将其值设置为FALSE。

当用户将定点设备从几何体的一点移动到另一点时,传感器将发送一系列事件:

hitPoint_changed、hitNormal_changed、hitTexCoord_changed,分别表明用户所

指的位置、该点的法向量和纹理坐标。

当用户点击被TouchSensor监视的对象时,传感器将产生值为TRUE的isActive事件;而当用户释放定点设备的键时,传感器将产生isActive为FALSE的事件。

若用户在指向几何体时按下鼠标键,然后在仍然指向这个几何体(或又回到这个几何体)时释放鼠标键,传感器将要发送一个touchTime事件,表明键被释放的时间。可以使用这一事件来模拟许多常用的用户接口(如只有在用户点击和释放定点设备按键时才产生的动作)。

当一个触动传感器正处理事件时,其它定点设备传感器不会产生事件。

Transform节点

Transform {

bboxCenter 0 0 0 # SFVec3f bboxSize -1 -1 -1 # SFVec3f

translation 0 0 0 # exposed field SFVec3f rotation 0 0 1 0 # exposed field SFRotation scale 1 1 1 # exposed field SFVec3f

scaleOrientation 0 0 1 0 # exposed field SFRotation center 0 0 0 # exposed field SFVec3f children [ ] # exposed field MFNode } 域

bboxCenter 围绕该变换子项的包围盒的中心。

bboxSize 包围盒在x、y、z方向的值,缺省值是无包围盒。 translation 指定变换量。

rotation 给定旋转的轴和角度(以弧度为单位)。 scale 指定缩放比例,各轴向缩放比值可以不相等。 scaleOrientation 指定缩放和旋转操作的轴向。 center 指定缩放和旋转操作的原点。

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

事件

addChildren eventIn MFNode 将指定节点加入该组的子项列表中。 removeChildren eventIn MFNode 将指定节点从该组子项列表中删除。

说明

Transform是为其子项定义坐标系统的组节点。 Transform定义的三维变换按如下步骤执行:

1、对任意一点的缩放,各轴向缩放比值可以不相等; 2、对任意一点和任意轴的旋转; 3、平移。

Viewpoint节点

Viewpoint {

position 0 0 10 # exposed field SFVec3f

orientation 0 0 0 1 # exposed field SFRotation fieldOfView 0.785398 # exposed field SFFloat des cription \

jump TRUE # exposed field SFBool } 域

position 在局域坐标系中,指定Viewpoint节点的相对位置。

orientation 指定一个相对于缺省方向旋转的视点方向。缺省方向是沿z轴负方向、x轴正向指向右和y轴正向指向正上方。视点的位置和方向受上层变换的影响。

fieldOfView 以弧度为单位指定一个视图域。小的角度嗨圃督咕低返男Ч淮蟮慕嵌炔嗨乒憬蔷低返男Ч皇油加蛴Ω么笥?,小于丌;缺省值相当于45度。

des cription 标识一个可以通过视点菜单或其它设备被公开访问的视点。若没有des cription,该视点不会出现在流览器的GUI中。当用户在GUI中选择一个视点时,浏览器或者逐渐移动到新位置,或者直接跳到这个新位置。一旦到达该位置,将发出isBound和bindTime。事件。

jump 表明在视点位置变化时,例览器是否立刻将观察者移动到新位置。若为TRUE的话,将立刻跳到新位置,不经过前后两个位置之间的任何空间。

事件

set_bind eventln SFBool

发出一个值为TRUE的该事件将该Viewpoint节点激活,使之成为场景当前的Viewpoint节点。

bindTime eventOut SFTime

视点被激活的时间。该输出事件用来在一个给定视点被激活时开始运行一个动画或脚本。 isBound eventOut SFBool

当浏览器到达一个指定的视点并被激活时,该事件值为TRUE。

说明

视点定义了处于局部坐标系中的一个指定位置,用户可以从该点来观察场景。 视点可以被放置在VRML世界中来指定在刚刚进入场景中的观察者的初始位置。例如:URL语法“…/scene.wrl#EastGate”指出当用户进入scene.wrl世界时的初始位置是scene.wrl文件中 DEF EastGate Viewpoint {…}定义的地方。

浏览器保存一个Viewpoint节点的堆栈。谁栈的顶部的Viewpoint节点是当前激活视点。如果要将一个视点压到Viewpoint节点堆栈的顶部,就要送一个TRUE给该节点的

set_bind输入事件。该视点一旦被激活,浏览器窗口中的景物也做相应变化。给set_bind事件发送FALSE值将会从堆栈中弹出Viewpoint节点,激活栈中的下一个视点或默认视点。

可以先激活一个观点,再移动这个视点使用户视图不断变化。

VisibilitySensor节点

VisibilitySensor {

center 0 0 0 # exposed field SFVec3f size 0 0 0 # exposed field SFVec3f enabled TRUE # exposed field SFBool } 域

center 该传感器的包围盒中心。

size 该传感器的包围盒在x、y、z方向的大小。 enabled 指出VisibilitySensor是否处于激活状态。若为FALSE,则传感器不送出输出时间;若为TRUE,则传感器检测用户是否进入指定的包围盒,并通过isActive事件来发送输出事件。

事件

isActive eventOut SFBool

TRUE表明用户已进入包围盒;FALSE表明用户不再包围盒内。 enterTime eventOut SFTime 进入包围盒的时间。

exitTime eventOut SFTime 走出包围盒的时间。

说明

当用户浏览时,VisibilitySensor检查用户是否进入包围盒。当用户进入包围盒的任意一部分时,他输出一个值为TURE的isActive事件;当用户退出包围盒时,他输出一个值为FALSE的isActive事件。

VisibilitySensor节点

VisibilitySensor {

center 0 0 0 # exposed field SFVec3f size 0 0 0 # exposed field SFVec3f enabled TRUE # exposed field SFBool } 域

center 该传感器的包围盒中心。

size 该传感器的包围盒在x、y、z方向的大小。 enabled 指出VisibilitySensor是否处于激活状态。若为FALSE,则传感器不送出输出时间;若为TRUE,则传感器检测用户是否进入指定的包围盒,并通过isActive事件来发送输出事件。

事件

isActive eventOut SFBool

TRUE表明用户已进入包围盒;FALSE表明用户不再包围盒内。 enterTime eventOut SFTime

进入包围盒的时间。

exitTime eventOut SFTime 走出包围盒的时间。

说明

当用户浏览时,VisibilitySensor检查用户是否进入包围盒。当用户进入包围盒的任意一部分时,他输出一个值为TURE的isActive事件;当用户退出包围盒时,他输出一个值为FALSE的isActive事件。

WorldInfo节点

WorldInfo { title \info [] # MFString } 域

title 浏览器在窗口的标题栏上显示的当前世界的标题。 info 关于世界的其它信息,如作者、版权等。

说明

WorldInfo节点含有世界的有关信息。它对该世界的视觉效果和动作没有任何影响,仅仅作为文档

进入包围盒的时间。

exitTime eventOut SFTime 走出包围盒的时间。

说明

当用户浏览时,VisibilitySensor检查用户是否进入包围盒。当用户进入包围盒的任意一部分时,他输出一个值为TURE的isActive事件;当用户退出包围盒时,他输出一个值为FALSE的isActive事件。

WorldInfo节点

WorldInfo { title \info [] # MFString } 域

title 浏览器在窗口的标题栏上显示的当前世界的标题。 info 关于世界的其它信息,如作者、版权等。

说明

WorldInfo节点含有世界的有关信息。它对该世界的视觉效果和动作没有任何影响,仅仅作为文档

本文来源:https://www.bwwdw.com/article/ol1x.html

Top