视点节点
Viewpoint视点用于设置用户的观察视点,NavigationInfo用于设置视点的移动方式。
在VRML中,允许创建多个不同的视点供用户选择。但每个时刻只能选一个视点。
用视点浏览场景时,使用一个替身按不同的方式浏览相应的场景。且可以通过替身与场景和造型交互。
视点之间的转换有两种方式,跳跃式和非跳跃式。
语法:
Viewpoint{
#position域的域值用于设定视点在VRML场景中的空间位置。该域值的默认值为0.0 0.0 1.0,视线方向沿Z轴负方向。
exposedField SFVec3f position 0 0 1
#orientation域的域值用于设定一个空间朝向,就是浏览者面对的方向,即相对初始朝向的旋转角度。该域值的前三个值为X、Y、Z坐标分量,由原点指向该坐标的直线为旋转轴;最后一个值为视点旋转的角度。
exposedField SFRotation orientation 0 0 1 0
#fieldOfView用于设定视点的视角大小。大视角类似于广角镜,用以推远造型;小视角类似于广远焦镜,用以拉近造型。
exposedField SFFloat fieldOfView 0.785398
exposedField SFBool jump TRUE
field SFString description ""
#set_bind、isBind用于视点切换。isBound出事件用于发出视点被切换的时间。在一个视点被激活时,可以运行一段动画或执行一段脚本程序。
eventIn SFBool set_bind
eventOut SFBool isBound
eventOut SFTime bindTime
}
#VRML V2.0 utf8 Background { skyColor [0.8 0.8 0.8] } Viewpoint{ #默认的视点 description "view0" } Viewpoint { #拉近的视点 position 0 0 7 description "view1" } Viewpoint { #旋转的视点 orientation 0 0 1 1.571 description "view2" } Viewpoint { #倒置的视点 orientation 0 0 1 3.14 description "view3" } Viewpoint { #视角增大的视点 orientation 0 0 1 3.14 fieldOfView 1.571 description "view4" } Viewpoint { #观测顶部的视点 position 0 10 0 orientation 1 0 0 -1.571 description "view5" } Viewpoint { #观测底部的视点 position 0 -10 0 orientation 1 0 0 1.571 description "view6" } Inline { #烟囱的造型 url "3-1.wrl" }
改变视点也可通过旋转视点、改变视线朝向的方法来实现。利用坐标变换 Transform 节点,旋转 Viewpoint 视点所在的坐标系,以达到改变视线朝向的目的。这种方法只需改变视线的角度,不必改变视点的位置。
#VRML V2.0 utf8 Background { skyColor [0.8 0.8 0.8] } Viewpoint { #默认的视点 description "view0" } Transform { #观测顶部的视点 rotation 1 0 0 -1.571 children [ Viewpoint { description "view1" } ] } Transform { #观测底部的视点 rotation 1 0 0 1.571 children [ Viewpoint { description "view2" } ] } Transform { rotation 0 0 1 1.571 #旋转的视点 children [ Viewpoint { description "view3" } ] } Inline { url "3-1.wrl" #烟囱的造型 }
导航节点
NavigationInfo{
#headLight 用于设定场景中的头灯光源。
exposedField SFBool headlight TRUE
#type用于设定观察者替身的视点导航方式。
exposedField MFString type ["WALK", "ANY"]
#speed用于设定观察者替身的漫游速度。单位是:VRML单位/秒
exposedField SFFloat speed 1.0
#visibilityLimit --视野,0.0表示无穷远
exposedField SFFloat visibilityLimit 0.0
#avatarSize--化身尺寸,默认值 [0.25,1.6,0.75]如:浏览者无法登上高为0.8主席台,可将步高设为0.85即可。
#第一个参数:替身外表圆柱体的半径尺寸,设置替身进行碰撞和穿越时的1/2的厚度和宽度。
#第二个参数:替身外表圆柱体的高度尺寸,设置替身视点距地面的高度。
#第三个参数:替身抬脚的高度,设置替身能够跨越障碍物的最高高度。
exposedField MFFloat avatarSize [0.25, 1.6, 0.75]
eventIn SFBool set_bind
eventOut SFBool isBound
}
例子:
#VRML V2.0 utf8 Transform{ translation 0.45 0 -2.0 children[ DEF Column Shape{ appearance DEF Bred Appearance{ material Material{ diffuseColor 1.0 0.0 0.0 } } geometry Cylinder{ radius 0.2 height 2.0 } } ] } Transform{ translation -0.45 0.0 -2 children USE Column } NavigationInfo { avatarSize [0.25,1.6,0.75] visibilityLimit 0.0 }
空间信息节点