分类:
2009-09-02 15:29:59
VRML2.0节点可以分成两类:图形的和非图形的。图形节点包括几何类型例如Box和Sphere;属性节点,例如Appearance和Material;组节点,包括Shape和Transform。这些节点共同构造了表述的场景。VRML2.0图形节点列表如下:
组节点 几何节点 属性节点 |
Shape Box Appearance Anchor Cone Color Billboard Cylinder Coordinate Collsion ElevationGrid FontStyle Group Extrusion ImageTexture Transform IndexedFaceSet Material Inline IndexedLineSet MovieTexture LOD PointSet Normal Switch Sphere PixelTexture Text TextureCoordinate TextureTransform |
非图形节点通过给3D世界增加声音、触发事件和动画数据给VRML2.0增添动态效果,这些节点如下表所列:
声音 触发事件 动画数据 |
AudioClip CylinderSensor ColorInterpolator Sound PlaneSensor CoordinateInterpolator ProximitySensor NormalInterpolator SphereSensor OrientationInterpolator TimeSensor PositionInterpolator TouchSensor ScalarInterpolator VisibilitySensor Script |
限于篇幅,不能对以上的节点作一一说明,有兴趣的读者可以去“
”查阅有关的VRML规范文档。
VRML2.0的节点字段可以给节点分配属性,以区别同一类型的节点。最常见的节点字段是接受单一值的(以SF打头)和接受多个参数的(以MF打头)。对MF字段,在方括号里输入参数时,以逗号、空格分开几个参数值。例如,群组节点Transform或Anchor的子字段可作为一个或多个节点目标的容器。与此相似,ImageTexture节点的url字段接受多个材料结构图的位置列,这样VRML的用户在试图从网络服务器上下载结构图之前,先下载本地找到结构图,也就是说,如果你在图象映象中或在wrl文件中列出了本地驱动器的路径名,读者要下载这个本地文件,若找到就停止,没找到,继续找下一个url位置—可以是网络服务器。所有节点都包括一到多个下列类型的字段(见下表)。
在本章开头,曾把字段分为描述节点特性的或连接节点的,Glue字段决定哪个VRML2.0的节点可以作为这类节点类型的值。
字段的类 接受值 |
SFNode/MFNode VRML 节点SFBool True 或FalseSFColor/MFColor 与红绿蓝相应的三个浮点数值,取值范围0.0-1.0SFFloat/MFFloat 单精度浮点数SFImage image 图的象素描述SFInt32/MFInt32 32 位整数SFRotation/MFRotation 4 个值:前三个描述旋转矢量,最后一个是旋转角度值SFString/MFString 字符串(utf8)SFTime/MFTime 从起点开始的秒数(以32位双精度浮点数表示)SFVec2f/MFVec2f SFFloat 的二维矢量SFVec3f/MFVec3f SFFloat 的三维矢量 |
SFNode/MFNode类型的字段是VRML2.0中唯一的、预先定义过的、连接类型的字段。每个SFNode/MFNode字段都规定了哪种类型的节点与它相连,依赖的目标节点属于哪个字段。在前面的例子中,有SFNode类型的连接字段,如Shape节点的appearance字段,它接受Appearance节点的值;又如Appearance节点的appearance字段,它接受Material节点的值。MFNode类型的连接字段包括Transform群组节点的子字段、LOD节点的Level字段和switch节点的choice字段。
在这一小节里,我们将给出一些节点的描述。
群组节点
VRML2.0的群组节点用于设置它所含的所有子节点的属性,包括子群组节点。前面已经详细地介绍了Transform节点,下面再描述几个其它的群组节点。
Anchor{}
程序例8 link.wrl
#VRML V2.0 utf8
#link from room to room in a house
Transform{
children[
Anchor{
description “OpenBedroom Door”
url [“bedroom.wrl”]
children [
DEF Doorknob Shape {
geometry Sphere{}
}
]
}
]
}
假设这段代码描述了一个门把手,当用户单击名为Doorknob的球时,Anchor节点引起浏览器获得并加载它的url字段文件名,代替当前的场景内容。
Inline节点可使你通过提供一个指向文件位置的URL来输入外部VRML.wrl文件,例如输入一个替身或几个图形到你的场景中。通过使用Inline节点(并保持一个一致的模型),你可以构造一个能汇集不同VRML应用的可复用库。
DEF earthORB inline{
url [“orbits/earthorbit.wrl”]
}
也可以在Inline节点的url字段列出多个URL文件,以使浏览器首先检查用于替身图形文件的本地目录,如果在本地没有找到,则在WWW上寻找。
环境设置
VRML提供了一组可固定的节点,包括Viewpoint、NavigationInfo、Background和Fog,它们可使你在VRML场景中增强美感。
Viewpoint{}
Viewpoint节点象一个摄像机—它是一个创作者定义的视点,当用户通过VRML2.0浏览器进入场景时,用户可从该视点看到显示的场景。通过调整FieldOfView参数(表示为半径)为一个大的值,你可以产生类似于广角镜头在浏览器边缘扭曲的效果。在你的VRML场景文件中加入下面Viewpoint节点的描述,你会看到一个极端的例子。
程序例9 Viewpoint节点l
Viewpoint{
fieldOfView 2.0
position 1.75 2 3
orientation 0 0.5 1.0 0.785
description “HangOver”
}
如果在你的wrl文件中没有定义观察点,大多数浏览器将观察点沿着Z轴向外移动直到可以在窗口之内显示所有场景为止。但是在你的VRML场景中定义的Viewpoint将有助于你的用户更完全地接受场景的显示。
注意你定义的Viewpoint必须包含在将加载的浏览器的原始.wrl文件中,而不能在Inline指定的.wrl文件中。
Background{}
Background节点使你可以为你的场景指定背景颜色、倾斜度或纹理,默认状态将是黑色。假设你的场景包含在一个立方体中,你甚至可以使用Background节点的backUrl、frontUrl、bottomUrl、leftUrl、rightUrl和topUrl字段来设置背景的六面“墙”的纹理。Background节点不受Fog节点的影响,后者可使你在距离用户一定距离之后为产生距离感而将物体变为你指定的模糊色。
Background{
FrontUrl “textures/bg.jpg”
BackUrl “textures/bg.jpg”
BottomUrl “textures/bg.jpg”
LeftUrl “textures/bg.jpg”
RightUrl “textures/bg.jpg”
TopUrl “textures/bg.jpg”
}
Fog{}
Fog节点可以根据视点与物体距离的远近使物体褪为模糊色,从而产生距离感和美感。下面是Fog各字段的默认值:
Fog{
color 1 1 1
fogType “LINEAR”
visibilityRange 0
}
Fog的color字段可以设置一个颜色值,使远距离的物体被融合而产生似雾的幻觉。
fogType字段依据你是否希望模拟距离感或似雾的幻觉选择参数LINEAR或EXPONETIAL。
VisibilityRange字段声明以米为单位的距离,此距离从Fog节点的起点位置开始,从那里物体完全淹没在雾中,不再可见。为了在你的VRML场景中产生雾感,你必须在visibilityRange字段输入一个大于0的数。