一、X3D虚拟现实游戏动画设计
虚拟现实游戏动画设计是以计算机系统、虚拟现实软件以及虚拟现实硬件为平台,创建虚拟现实三维立体空间游戏动画场景。利用虚拟现实语言X3D中各种基本节点、群节点、场景效果节点、动态感知节点等进行游戏动画场景设计。在虚拟现实游戏场景环境中直接感受与虚拟造型和景物动态交互作用,体验身临其境的游戏真实感受。在虚拟现实环境中,真实感受视觉、听觉、触觉、娱乐以及智能感知的自然效果,使用户亲身感受虚拟现实技术的魅力。
二、X3D游戏节点设计
X3D虚拟现实游戏动画设计,利用X3D虚拟现实几何节点、组节点、游戏节点等,开发设计翻板游戏场景和造型。
1.group编组节点
Group编组节点是将多个节点进行组合创建较复杂的立体空间造型,利用Group编组节点的Chlidren域可以包含任意个节点。该节点是组节点中最基本的节点。把Group编组节点中所包含全部节点视为一个整体,当作一个完整的空间造型来对待。如果利用DEF(重定义节点名)对Group编组节点命名,则可以使用USE(重用节点)在相同的文件中可以重复使用这一节点,从而增强程序设计的可重用性和灵活性。Group编组节点用来编组各种几何节点造型,使其作为一个整体造型来看待。Group编组节点通常用作为Shape模型节点的父节点。
(1)group编组节点语法定义
Group编组节点是把多个节点进行组合创建较复杂的立体空间造型,把Group编组节点中所包含全部节点视为一个整体,当作一个完整的空间造型来对待。利用Group编组节点的Chlidren域可以包含任意个节点,该节点是组节点中最基本的节点。
Group编组节点语法定义了一个用于确定编组节点的属性名和域值,利用Group编组节点的域名、域值、域的数据类型以及事件的存储访问权限的定义来创建一个效果更加理想,具有一定整体感的三维立体空间造型。
Group编组节点语法定义,如图1所示。

图1 Group编组节点语法定义
(2)Group编组节点祥解
Group编组节点包含DEF、USE、bboxCenter、bboxSize、containerField以及class域等。
域数据类型描述
SFVec3f域:定义了一个三维矢量空间。
事件的存储/访问类型描述
表示域(属性)的存储/访问类型,包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。
Group编组节点域、域名和域值祥解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性,该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
bboxCenter 域:指定了边界盒的中心,从局部坐标系统原点的位置偏移。其默认值为0.0 0.0 0.0。
bboxSize 域:指定了边界盒尺寸X,Y,Z方向的大小。其默认值为-1.0 -1.0 -1.0。缺省情况下是自动计算的,为了优化场景也可以强制指定。
containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Box, children Group, proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域:是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
2.X3D触摸检测器节点
实现X3D中的交互功能,需要设计触动检测器或传感器。在X3D虚拟世界中,用户与虚拟现实世界之间的交互是通过一系列检测器来实现的,通过使用这些检测器节点,使浏览器感知用户的各种操作,比如开门、旋转、移动和飞行等。这样用户就可以和X3D虚拟世界中的三维对象直接进行交互。
触动检测器是用来检测用户的触动动作的,其中包括TouchSensor节点,Planesensor节点,Cylindersensor节点和SphereSensor节点。
TouchSensor触摸传感器节点是浏览者与虚拟对象之间相接触型传感器节点。TouchSensor触摸传感器节点创建了一个检测用户动作、并将其转化后输出,以触发一个动画的检测器。它用来测试用户触摸事件的检测器。该节点可以为任何组节点的子节点,并感知用户对该组节点的动作。
(1)TouchSensor触摸传感器节点语法定义
TouchSensor 触摸传感器节点可以跟踪指点设备的位置和状态,检测用户指点几何对象的时间。传感器影响同一级的节点及其子节点。
TouchSensor 触摸传感器节点语法定义,如图2所示。

图2 TouchSensor 触摸传感器节点语法定义
(2)TouchSensor 触摸传感器节点祥解
TouchSensor 触摸传感器节点包含DEF、USE、description、enabled、isActive、isOver、hitPoint_changed、hitNormal_changed、hitTexCoord_changed、touchTime、containerField以及class域等。
域数据类型描述
SFFloat域:是单值单精度浮点数。SFBool域:是一个单值布尔量。SFTime域:含有一个单独的时间值。SFVec2f域:是一个包含任意数量的二维矢量的单值域。SFVec3f域:是一个包含任意数量的三维矢量的单值域。
事件的存储/访问类型描述
表示域(属性)的存储/访问类型,包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。
TouchSensor 触摸传感器节点域、域名和域值祥解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性。该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
description域:指定了该节点功能的文字提示,使用空格使描述更清晰易读。
enabled域:定义了一个设置传感器节点是否有效。
isActive域:定义了一个当点击或移动鼠标(指点设备时)发送事件isActive true/false。按下鼠标主键时isActive=true,放开时isActive=false。
isOver域:定义了一个当指点设备移动过传感器表面时发送事件。
hitPoint_changed域:定义了一个事件输出在子节点局部坐标系统点击点的定位。
hitNormal_changed域:定义了一个事件输出了点击点的表面的法线向量。
hitTexCoord_changed域:定义了一个事件输出了点击点的表面的纹理坐标。
touchTime域:定义了一个当传感器被指点设备点击时产生时间事件。
containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Sphere, children Group, proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域:是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
3.TimeSensor时间传感器节点
TimeSensor时间传感器在现实世界中,世界万物的变化往往是自动的,而且是有一定规律的,即不是随人的意志而改变的,这就需要在X3D虚拟世界中,创建出能自动变化不需要人的干预来实现。可以通过设定时间按某种规律变化来控制造型变化。而控制时间按某种规律变化是最常见的就是时间传感器。
TimeSenor时间传感器节点的作用就是创建一个虚拟时钟,并对其他节点发送时间值。控制X3D立体空间的动态对象的开始、变化和结果过程的时间,实现空间物体造型的移动、变色、变形等自动变化。
TimeSenor时间传感器节点在X3D中并不产生任何造型和可视效果。其作用只是向各插补器节点输出事件,以使插补器节点产生所需要的动画效果。该节点可以包含在任何组节点中作为子节点,但独立于所选用的坐标系。
(1)TimeSensor时间传感器节点语法定义
TimeSensor时间传感器节点定义了一个当时间流逝时,TimeSensor不断的产生事件。典型运用:ROUTE thisTimeSensor.fraction_changed TO someInterpolator.set_fraction。概貌互换提示:如果cycleInterval < 0.01 秒,TimeSensor 可能被忽视。该节点可以包含在任何组节点中作为子节点。
TimeSenor时间传感器节点语法定义,如图3所示。

图3 TimeSenor时间传感器节点语法定义
(2)TimeSenor时间传感器节点祥解
TimeSenor时间传感器节点包含DEF、USE、enabled、cycleInterval、loop、startTime、stopTime、pauseTime、resumeTime、cycleTime、isActive、isPaused、fraction_changed、time、containerField以及class域等。
域数据类型描述
SFFloat域:是单值单精度浮点数。SFBool域:是一个单值布尔量。SFTime域:含有一个单独的时间值。MFVec3d域:定义了一个多值多组三维矢量。
事件的存储/访问类型描述
表示域(属性)的存储/访问类型,包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。
TimeSenor时间传感器节点域、域名和域值祥解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性。该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
enabled域:定义了一个设置传感器节点是否有效。
cycleInterval域:定义了一个时间长度,用来设置循环的时间。说明这个时间传感器从0.0时刻到1.0时刻之间的周期间隔,单位为秒。该域值必须大于0.0,其默认值为1.0秒。如果cycleInterval < 0.01 秒,TimeSensor 可能被忽视。
loop域:定义了一个时间传感器是否循环输出。该域值为布尔量,如果为TRUE,则时间传感器会自动循环,一直到停止时间为止;如果为FALSE,时间传感器不循环,只经过一个周期后,就会自动停止。其默认值为FALSE。
|