3. X3D视点效果节点
视点及导航在X3D开发与设计中起着重要作用,在X3D文件中的视点就是一个你所浏览的立体空间中预先定义的观察位置和空间朝向,在这个位置上通过这个朝向,浏览者可以观察到虚拟世界中的场景。在X3D虚拟世界中可以创建多个观测点,以供浏览者选择。不过浏览者在任何时候,在一个虚以空间中只有一个空间观测点可用,也就是说不允许同时使用几个观测点,这与人只有一双眼睛是相符合的。视点可以从你控制那个可用的观测点切换到另一个视点。
Viewpoint视点节点确定了一个X3D空间坐标系中的观察位置,指定了这个观察位置在X3D立体空间三维坐标、立体空间朝向以及视野范围等参数。该节点既可作为独立的节点,也可作为其他组节点的子节点。
Viewpoint视点节点指定用户视点在三维立体场景中的位置和方向,Background,Fog,NavigationInfo,TextureBackground,Viewpoint节点都是可绑定节点。
(1)ViewPoint视点节点语法定义
Viewpoint视点节点语法定义了一个用于确定浏览者的朝向和距离的属性名和域值,利用Viewpoint视点节点的域名、域值、域的数据类型以及事件的存储访问权限的定义来创建一个效果更加理想的三维立体空间自然景观场景和造型的浏览效果。
Viewpoint视点节点语法定义,如图3所示。
Viewpoint视点节点数据结构:
域名(属性名) |
域值(属性值) |
域数据类型 |
存储/访问类型 |
XML属性类型 |
DEF |
ID |
|
|
#IMPLIED |
USE |
IDREF |
|
|
#IMPLIED |
description |
|
SFString |
initializeOnly |
CDATA#IMPLIED |
position |
0 0 10 |
SFVec3f |
inputOutput |
CDATA |
orientation |
0 0 1 0 |
SFRotation |
inputOutput |
CDATA |
fieldOfView |
0.785398 |
SFFloat |
inputOutput |
CDATA |
jump |
true |
SFBool |
inputOutput |
(true|false) |
centerOfRotation |
0 0 0 |
SFVec3f |
inputOutput |
CDATA |
set_bind |
“” |
SFBool |
inputOnly |
#FIXED |
bindTime |
“” |
SFTime |
outputOnly |
#FIXED |
isBound |
“” |
SFBool |
outputOnly |
#FIXED |
containerField |
children |
|
|
NMTOKEN |
class |
|
|
|
CDATA#IMPLIED |
图3 Viewpoint视点节点语法定义
(2)Viewpoint视点节点详解
Viewpoint视点节点包含DEF、USE、description、position、orientation、fieldOfView、jump、centerOfRotation、containerField以及class域等。
1)域数据类型
SFBool域:是一个单值布尔量。SFFlot域:是单值单精度浮点数。SFString域:包含一个字符串。SFTime域:含有一个单独的时间值。SFVec3f域:定义了一个单值三维向量。SFRotation域:指定了一个单值任意的旋转。
2)事件的存储/访问类型
表示域(属性)的存储/访问类型,包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。
3)域、域名和域值详解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性,该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
description域:定义了一个用于描述视点的字符串,也可以称为该视点的名字。为这个视点显示的文字描述或导航提示,人们通过该视点的描述找到自己感兴趣的视点。这些文字描述会出现在空间视点列表中,即浏览器主窗口的左下角。该域值的默认值为空字符。
position 域:指定了一个三维坐标,用来说明这个Viewpoint节点在X3D场景中所创建的空间视点空间位置。该域值的默认值为0.0 0.0 1.0,即将视点放在Z轴正方向的距离坐标原点1.0个单位的地点上。
orientation 域:指定了一个空间朝向,就是浏览者在虚拟世界中面对的方向,但不是直接给出方向,而是提供了一个观测点的位置绕其旋转的旋转轴,旋转角度指定了绕此轴旋转的数值。X3D中初始化的视点与Z轴负方向对齐,X轴正方向指向右,Y轴正方向指向正上方。Orientation域给出的域值是相对初始化的空间朝向的旋转角度。该域值的前三个值说明了一个三维向量,即X,Y和Z分量,最后一个值为弧度度量,说明了旋转角度的正负。该值域的默认值为0.0 0.0 1.0 0.0,即没有发生旋转。
fieldOfView域:定义了观测点视角的大小,用弧度单位表示。大视角产生类似光角镜头的效果,而小视角产生类似远焦镜头的效果。该域值视角范围在0°~180°即0.0~3.142弧度。其默认值为45°即0.785弧度。
jump域:指定了一个布尔量。定义了视点是跳跃型还是非跳跃型,如果为TRUE,表示跳跃型的视点空间,浏览器将从某一个观测点转到另一个新的观测点上。如果是FALSE,表示非跳跃型的视点空间,则一直维持在当前的观测点位置上。
centerOfRotation域:指定了一个输入/输出类型的三维矢量,被提议加入 NavigationInfo EXAMINE mode。
set_bind域:指定一个输入事件set_bind为true激活这个节点,输入事件set_bind为false禁止这个节点。就是说设置bind 为true/false 将在堆栈中弹出/推开(允许/禁止)这个节点。
bindTime域:指定一个当节点被激活/停止时发送事件。
isBound域:指定一个当节点激活时发送true事件,当焦点转到另一个节点时发送false事件。
containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Box, children Group, proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域:是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
4. 路由节点
ROUTE路由节点连接节点之间的域以传递事件。使X3D场景设计更加生动和鲜活,通过ROUTE路由节点实现X3D节点之间的信息传递,进行复杂的动画开发与设计。
(1)ROUTE 路由节点语法定义
ROUTE路由节点定义了一个连接节点之间的域以传递事件,对各个节点和域值进行传递、修改和控制等处理,使X3D场景的开发与设计更加快捷、方便、灵活。
ROUTE路由节点语法定义,如图4所示。
ROUTE路由节点数据结构: 图标
域名(属性名) |
域值(属性值) |
域数据类型 |
存储/访问类型 |
XML属性类型 |
fromNode |
IDREF |
|
|
#REQUIRED |
fromField |
|
|
|
NMTOKEN #REQUIRED |
toNode |
IDREF |
|
|
#REQUIRED |
toField |
|
|
|
NMTOKEN#REQUIRED |
图4 ROUTE路由节点语法定义
(2)ROUTE路由节点详解
ROUTE路由节点包含fromNode、fromField、toNode、toField域等。
fromNode域:定义了一个发送事件的节点的DEF名。
fromField域:定义了一个发送事件的节点的域的名称。可能需要在域名上使用后缀 _changed。
toNode域:定义了一个接受事件的节点的DEF名。
toField域:定义了一个接受事件的节点的域的名称。可能需要在域名上使用前缀set_ 。
|