VRML---第四章第二部分(场景信息)

时间:2021-03-21 08:55:53

视点节点

   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

  #jump域为TRUE时,不显示转到该视点的过程;jump域为FALSE时,显示转到该视点的过程。

      exposedField SFBool     jump       TRUE

 #description域的域值用于设定一个用于描述视点的字符串,即该视点的名字。

     field         SFString    description   ""

#set_bind、isBind用于视点切换。isBound出事件用于发出视点被切换的时间。在一个视点被激活时,可以运行一段动画或执行一段脚本程序。

     eventIn     SFBool    set_bind

     eventOut    SFBool    isBound

     eventOut    SFTime    bindTime

}


    设置视点后,默认视点失效。可以设置多个视点。初始视点是第一个视点。
    视点选择和切换有两种方法:一是利用浏览器的View按钮,二是通过视点选择菜单。
    需要注意的是,视点绕除Z轴以外的其它轴旋转时(即改变视线的朝向),必须同时设定视点的位置,使视点旋转后仍然位于视线的前方,否则视点到默认位置上可能看不到要观测的造型。
例子:
#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节点用来创建浏览者替身,设置替身的外表尺寸、浏览方式、浏览速度、头导航灯光源等参数,该替身是不可见的。 

语法:

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
}  

空间信息节点

       空间信息节点WorldInfo含有虚拟世界的有关信息,用来声明一个空间的标题以及提供的其他注解。对虚拟空间的视觉效果和动作没有任何影响,只是作为文档。

语法:
WorldInfo{
#title域的域值用来指定浏览器再窗口的标题栏上显示的当前世界的标题
   field  SFString   title “”
#info域的域值用来指定世界的其他信息,如作者、版本号
  field   MFString   info[]
}

例子:

#VRML  2.0  UTF8
Group{
   children[
       WorldInfo{
               title "Hello!"
             info[
                  "fph"
                  "3"
]
}
Sphere{}
]
}