VRML97 域说明

VRML97 域说明VRML97 中有两类常见的域,一类只包含单值(所谓单值,可以是一个单独的数,也可以是定义一个向量或颜色的几个数,甚至可以是定义一幅图像的一组数)另外一类包含多个单值。单值类型的域

VRML97 域说明

VRML97 中有两类常见的域,一类只包含单值(所谓单值,可以是一个单独的数,也可以是定义一个向量或颜色的几个数,甚至可以是定义一幅图像的一组数)另外一类包含多个单值。单值类型的域,名称以“SF”开始;多值类型的域,名称以“MF”开始。在VRML 文件中,表示多值域的方法是:一系列用逗号和空格间隔开的单值,整个用方括号括起来。如果一个多值域,不包含任何值,则只标出方括号(“[]”),其中不填任何数。如果一个多值域,恰好只包含一个数,可以不写括号,直接写该值。例如,可以表示一个多值域,其中只包含一个单独的整数1,下列两种方式均属有效:

[1]

本说明依次介绍两种域的值。单值类型的域按英文字母的顺序给出;多值域按相应的单值域配合列出。事件的类型与域的类型是完全一致的。每一个事件类型都具有一个相关的初始值,在类型描述中有所规定。当脚本试图读取一个尚未发送的输出事件的数值时,该初始值被返回。 SFBool

一个SFBool 域只含有一个Bool 值。TRUE 和FALSE (不带引号也不带任何标点符号)是SFBool 域仅有的两个有效值。SFBool 输出事件的初始值是FALSE 。注意:一般的程序设计重用1和0表示True 和False 值,在VRML 中不允许。

SFColor 和 MFColor

SFColor 域是只有一个颜色值的单值域。SFColor 值和RGB 值一样,由一组三个浮点数组成。每个数都是从0.0--1.0,极值包括在内,分别表示构成颜色的红绿蓝三个分量。MFColor 域是一个多值域,包含任意数量的RGB 颜色值。例如:

[ 1.0 0.0 0.0,0 1 0,0 0 1] 表示三种颜色红绿蓝的组成。

,

SFColor 域的输出事件的初始值是(0,0,0)。而MFColor 域的输出事件的初始值是[]。 SFFloat 和 MFFloat

一个SFFloat 域含有一个ANSI C格式的单精度浮点数。一个MFFloat 域含有零个或多个ANSI C格式的单精度浮点数。即允许空白,不赋任何值。SFFloat 域输出事件的初始值为0.0。MFFloat 域输出事件的初始值为[]。

SFImage

一个SFImage 域含有非压缩的二维彩色图像或灰度图像。一个SFImage 域,首先列出三个整数值,前两个表示图片的宽度和高度,第三个整数表示构成图像格式的元素个数(1--4),随后,按(宽度x高度)的格式列出一组16进制数,数与数之间以空格分隔,每一个16进制数表示图像中一个单独的像素。图像格式的元素个数表示这张图像是灰度图还是彩色图,以及是否包括透明像素或半透明像素。单元素图像中的每一个像素用一个16进制的字节表示,所表示的是一个像素的亮度。例如:0XFF 表示最高亮度(白色),而0X00表示最低亮度(黑色)。双元素图像用两个字节表示一个像素。第一个字节表示亮度,第二个字节表示透明度。表示透明度时,字节为0xFF 表示完全透明,而0x00表示不透明。所以0x40C0表示1/4亮度(暗灰)和3/4透明度。三元素图像的每个像素有三个字节表示,每个字节表示像素颜色中红绿蓝分量(所以0xFF0000表示红色)。四元素图像是在红绿蓝三色的值之外再加一个表示透明度的字节(所以0x0000FF80表示办透明的蓝色)。和双元素图像一样,透明度字节为0xFF 表示完全透明,而0x00表示完全不透明。为了提高可读性,最好把所有的16进制字节都写全,包括前导0。然而,写出每个字节有时是不必要的。例如可以把一个三元素图像的蓝色像速写成0xFF 而不是0x0000FF 。像素的排列规定从左到右、从底到顶的顺序。第一个16进制数描述一个图像最左下角的像素,最后一个则描述右上角的像素。例:

1 2 1 0XFF 0X00 一个像素宽,两个像素高的灰度图像,底部像素是白的,顶部像素是黑的。 2 4 3 0XFF0000 0X00FF00 0 0 0 0 0XFFFFFF 0XFFFF00 两个像素宽,四个像素高的RBG 图像,左下角像素是红色,右下角像素是绿色,中间两行是黑色,左上角像素是白色,右上角像素是黄色。

,

在任何脚本节点或原型内都可以使用这种类型的域,但是,使用的具体地点只能在PiexlTexture (像素纹理)节点。

SFImage 域的输出事件的初始值为(0,0,0)。

SFInt32 和 MFInt32

一个SFInt32域含有一个32位整数。一个SFInt32值是由一个十进制或十六进制(以OX 开头)格式的整数构成。

一个 MFInt32域是多值域, 由任意数量的以逗号或空格分隔的整数组成。例如:

[17,-0xE20,-518820]

SFInt32域的输出事件的初始值为0,MFInt32域的输出事件的初始值为[]。

SFNode 和 MFNode

一个SFNode 域含有一个单节点,必须按标准节点句法写成。一个MFNode 域包含任意数量的节点。例:

[Transform{translation 1 0 0},

DEF PANDORA box{},

USE PANDORA]

一个SFNode 允许包含一个关键字NULL ,此时,表示它不包含任何节点。注意:一个组或一个变换的children 域也就是列出一组节点的MFNode 域。把SFNode 域放入一个脚本节点,就使节点的脚本可以直接存取列在SFNode 域的节点,而不需要一个ROUTE 语句。SFNode 域的输出事件的初始值为NULL ,MFNode 域的输出事件的初始值为[]。

SFRotation 和 MFRotation

SFRotation 域规定一个绕任意轴的任意角度的旋转。SFRotation 值含有四个浮点数,各数之间以空格分隔。前三个数表示旋转轴(从原点到给定点的向量);第四个数表示围绕上述轴旋转多少弧度。例:

,

绕y 轴旋转180度; 表示为 0 1 0 3.1416

MFRotation 域可包含任意数量的这类旋转值。注意:视点的旋转是从缺省的视点方向开始的,该方向是从(0,0,10)沿-z 轴观察。SFRotation 域的输出事件的初始值为(0 0 1 0),MFRotation 域的输出事件的初始值为[]。

SFString 和 MFString

SFString 域包含一串字符,各字符遵照UTF-8字符编码标准(ASCII 是UTF-8的子集,可以由于SFString 域)SFString 值含有双引号括起来的UTF-8 octets字符串。任何字符(包括“#”和换行符)都可在双引号中出现。为了在字符中使用双引号,在它之前加一个反斜杠“”。为了在字符串中使用反斜杠,连续打两个反斜杠“”。例如:

"One,Two,Three,123."

He asked, "Who is #1?""

MFString 域含有零个或多个单值,每个单值都和SFString 值的格式一样。SFString 域的输出事件的初始值为“”,MFString 域的输出事件的初始值为[]。

SFTime 和 MFTime

SFTime 域含有一个单独的时间值。每个时间值是一个ANSI C 格式的双精度浮点数,表示的是从1970年1月1日(GMT ,格林威治平均时)子夜开始计时,延续当前时间的秒数。MFTime 域包含任意数量的时间值。SFTime 域的输出事件的初始值为-1,MFTime 域的输出事件的初始值为[]。 SFVec2f 和 MFVec2f

SFVec2f 域定义了一个二维向量。SFVec2f 的值是两个由空格分隔的浮点数。

MFVec2f 域是多值域,包含任意数量的二维向量值。例如:

[0 0,1.2 3.4,98.6 -4e1]

SFVec2f 域的输出事件的初始值为(0 0),MFVec2f 域的输出事件的初始值为[]。

,

SFVec3f 和 MFVec3f

SFVec3f 域定义了一个三维空间的向量。一个SFVec3f 值包含三个浮点数,数与数之间以空格分隔。该值表示从原点到所给定点的向量。

MFVec3f 域包含任意数量的三维向量值。例如:

[0 0 0,1.2 3.4 5.6,98.6 -461 451]

SFVec3f 域的输出事件的初始值为(0 0 0),MFVec3f 域的输出事件的初始值为[]。

VRML97节点 Anchor Appearance AudioClip Background Billboard Box Collision Color ColorInterpolator Cone Coordinate CoordinateInterpolator Cylinder CylinderSensor DirectionalLight ElevationGrid Extrusion Fog FontStyle Group ImageTexture IndexedFaceSet IndexedLineSet Inline

,

LOD Material MovieTexture NavigationInfo Normal NormalInterpolator OrientationInterpolator PixelTexture PlaneSensor PointLight PointSet PositionInterpolator ProximitySensor ScalarInterpolator Script Shape Sound Sphere SphereSensor SpotLight Switch Text TextureCoordinate TextureTransform TimeSensor TouchSensor Transform Viewpoint VisibilitySensor WorldInfo

VRML97 域说明

原文链接 http://extend.hk.hi.cn/~gnohiew/

Anchor 节点

,

Anchor{

[ ]

" "

[ ]

" "

0 0 0

-1 -1 -1 # expose field MFNode # expose field SFString # expose field MFString # expose field MFString # SFVec3f # SFVec3f children description parameter url bboxCenter bboxSize

}

children

察者点击其中的一个对象时,浏览器便装入在url 域中指定的文件。

description 一个提示。移动光标到锚点对象而不点击它时,浏览器显示该提示文本。

为VRML 和HTML 浏览器附加的信息。是一个形如“关键词=值”的字符串。例如,有

些浏览器允许在HTML 文挡中指定一个页面框架作为链接作用对象,parameter 域将

parameter 是一下形式:

parameter["target=name_of_frame"]

url

bboxCenter

bboxSize

事件

eventIn MFNode

addChildren 在Anchor 节点的子节点序列中加入指定的节点。如果指定子节点已经在子节点序列

中,则忽略。

eventIn MFNode

removeChildren 制定需装入的文件的URL 。如果指定多个URL ,按优先级顺序进行排列,浏览器装入从URL 序列中发现的第一个文件。 包围Anchor 中子节点对象的包围盒的中心。 包围Anchor 中子节点对象的包围盒在x 、y 、z 方向上的尺寸。 指定场景中锚点对象。它包含指向其他文件(在url 域中指定)的超级链接。当观在Anchor 节点的子节点序列中删除指定的节点。如果指定子节点不在子节点序列中,

则忽略。

,

说明

当用户选择Anchor 节点中的任一子节点对象时,可将Anchor 节点中URL 域中指定的文件从网上取来。如果这文件是VRML 世界,则装入和显示它,并取代包含本Anchor 节点的世界。如果取得的文件是其它类型的文档,由浏览起来决定如何处理这些数据。

Anchor 节点可用于将浏览者带入虚拟世界中的一个特定观察位置,在指定URL 时要以“#viewpointName”结尾,“#viewpointName”是以DEF 定义的视点名。例如:

Anchor {

url children

} ["tju.wrl#bridgeView"] [Box{ }]

定义了一个Anchor 节点。当选中Box 时,浏览者将被置于“tju”世界中的名叫“bridgeView”的视点处。如果没有指定链接的世界,则以当前世界作为目的场景。例如:

Anchor {

url children } "#AtTheTop" [Sphere{ }]

主页

当Sphere 被选中时,浏览者将处于当前世界的“AtTheTop”视点处。 节点说明 来信

Appearance 节点

Appearance {

material

texture

textureTransform

}

material

texture 域 包含一个Material 节点。 包含一个ImageTexture 、MovieTexture 或者PixelTexture 节点。 NULL NULL NULL # exposed field SFNode # exposed field SFNode # exposed field SFNode

,

textureTransform 包含一个TextureTransform 节点,如果texture 域为NULL ,则textureTransform

域无效。

说明

Appearance 节点仅在Shape 节点中的appearance 域中出现。该节点中所有域值均可为NULL 。然而,一旦某个域

包含非零节点,则被包含节点必须包含一个上述相应类型的节点。

如果material 域是NULL ,与Appearance 相关的几何形体是不亮的,也就是说在绘制这个几何形体时忽略所有光照。但是,如果material 域包含一个缺省得材料节点,那么这个几何形体用缺省的材料节点的值照亮。也即,

在一个造型节点中指定appearance 域为

appearance Appearance{ }

结果是没有光照,而若指定aooearance 域为

appearance Appearance{ material{ }}

光照将基于缺省材料值。

主页 节点说明 来信

AudioClip 节点 AudioCkip{

description

loop

pitch

startTime

stopTime

url

}

description

loop

pitch

startTime

stopTime

url 域 对声音的一个描述。浏览器可在播放声音的同时显示此描述或者只显示此描述而不播放声音。 指明是否重复播放声音。 加快或减慢播放声音的相乘因子(例如:2.0意味着以两倍的速度播放),只有正值是有效的。 声音开始播放的时间。当声音播放时,set_startTime事件无效。 结束播放声音的时间。 指定需装入的声音文件的URL 。如果指定了多个URL ,浏览器按排列顺序装入第一个能获取并处理的文件。在装入一个高优先权的声音文件的同时浏览器可以播放一个低" " FALSE 1.0 0 0 [ ] # exposed field SFString # exposed field SFBool # exposed field SFFloat # exposed field SFTime # exposed field SFTime # exposed field MFString

,

优先权的文件。

事件

duration_changed eventOut SFTime 如果设定pitch 为1.0则1.0为从头到尾播放声音所需的时间。通常在浏览器由播放

一段声音转为播放另一段声音时输出此值。

eventOut SFBool

表明声音是否正在播放。当一段声音开始播放时,此值被设为TRUE ,停止时设为

FALSE 。

isActive

说明

AudioClip 节点提供有关从哪里可获得一个预先录制好的声音文件和如何播放它的信息。AudioClip 节点仅能出

现于声音节点的source 域中。

声音文件理论上可以使用任何数据格式,但是为了具有最大的兼容性,至少提供一个PCM 格式的WAVE 文件的URL 。 如果loop 域设为TRUE ,声音一直循环播放直到stopTime 停止;如果loop 设为FALSE ,声音一次播放到文件末

尾或者达到stopTime 。声音播放的长短由声音文件决定,而非由VRML 文件指定。

主页

节点说明 来信

Background 节点

标签: