startTime域:定义了当现在时间time now >= startTime,isActive 变为true值激活TimeSensor。绝对时间:从1970年1月1日, 00:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。
stopTime域:定义了当stopTime <= time now现在时间,isActive变为false 值禁止TimeSensor。绝对时间:从1970年1月1日,00:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。
pauseTime域:定义了当现在时间time now >= pauseTime,isPaused 值变为true暂停TimeSensor。绝对时间:从1970年1月1日,00:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。提示:不支持VRML97。
resumeTime域:定义了当resumeTime <= time now现在时间,isPaused值变为false 再次激活TimeSensor。绝对时间:从1970年1月1日,00:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。提示:不支持VRML97。
cycleTime域:定义了当开始时cycleTime 发送时间输出事件outputOnly,当每次新循环开始的时候也发送,用来同步其它基于时间的对象。
isActive域:定义了一个当回放开始/结束的时候发送 isActive true/false 事件。
isPaused域:定义了一个当回放暂停/继续的时候发送 isPaused true/false 事件。提示:不支持VRML97。
fraction_changed域:定义了一个fraction_changed 持续发送[0,1] 范围之间的值以提供当前循环的进程。
time域:定义了一个Time 持续发送绝对时间,从1970年1月1日, 00:00:00 GMT 经过的秒数以提供一个计时模拟。
containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Sphere, children Group, proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域:是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
4.OrientationInterpolator朝向插补器节点
OrientationInterpolator朝向插补器节点是方位变换节点,用来描述一系列在动画中使用的旋转值。该节点不创建任何造型,可以在不同时刻,旋转到所对应的方位(朝向)。通过使用该节点,可以使造型旋转。
OrientationInterpolator 朝向插补器产生指定范围内的一系列方向值,其结果可以被路由到Transform节点的rotation属性或另一个Rotations属性中。典型输入:ROUTE someTimeSensor.fraction_changed TO someInterpolator.set_fraction。典型输出:ROUTE someInterpolator.value_changed TO destinationNode.set_attribute。该节点不创建任何造型,可以进行各种动画设计。
(1)OrientationInterpolator朝向插补器节点语法定义
OrientationInterpolator朝向插补器节点是方位变换节点,用来描述一系列在动画中使用的旋转值。该节点中的一系列方向值,其结果可以被路由器传送到Transform节点的rotation属性或另一个Rotations属性中。
OrientationInterpolator朝向插补器节点语法定义,如图4所示。

图4 OrientationInterpolator朝向插补器节点语法定义
(2)OrientationInterpolator朝向插补器节点祥解
OrientationInterpolator朝向插补器节点包含DEF、USE、key、keyValue、set_fraction、value_changed、containerField以及class域等。
域数据类型描述
SFFloat域:是单值单精度浮点数。MFFloat域:是多值单精度浮点数。SFRotation域:指定了一个任意的单值旋转。MFRotation域:指定了一个任意的多值旋转。
事件的存储/访问类型描述
表示域(属性)的存储/访问类型,包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。
OrientationInterpolator朝向插补器节点域、域名和域值祥解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性。该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
key域:定义了一个线性插值器的时间间隔,按照顺序增加,对应相应的keyValue。其中key 和keyValue的数量必须一致。
keyValue域:定义了一个对应key的相应关键值,用来进行相应时间段的线性插值。其中key 和keyValue的数量必须一致。
set_fraction域:定义了一个set_fraction 输入一个key 值,以进行相应的keyValue 输出。
value_changed域:定义了一个按照相应的key和keyValue对,输出相应时间段的线性插值。
containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Sphere, children Group, proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域:是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
三、X3D翻板游戏场景开发与设计
X3D翻板游戏场景设计是按照软件工程开发思想,利用传统瀑布模型、原型法模型以及现代渐进式模型进行开发、设计和编码。利用X3D虚拟现实程序设计语言对翻板游戏三维立体场景进行算法分析、程序设计、编码和测试,实现虚拟现实翻板游戏三维立体场景和造型设计,使虚拟现实开发和设计实现具有更逼真、鲜活的三维立体效果。
翻板游戏场景设计是采用先进的渐进式软件开发模式,对虚拟现实场景和造型进行开发、设计、编程及调试。利用虚拟现实程序设计语言X3D开发工具对三维立体场景进行编码、测试和运行。利用结构化、模块化、组件化以及面向对象的开发和设计思想,开发虚拟现实翻板游戏场景。
X3D翻板游戏场景设计是利用软件工程思想开发设计,采用渐进式软件开发模式对虚拟现实X3D翻板游戏场景进行开发、设计、编码、调试和运行。虚拟现实X3D翻板游戏设计按照需求分析、设计和编码过程,循序渐进不断完善软件的项目开发。
虚拟现实X3D翻板游戏设计由翻板游戏桌、翻板游戏台、翻板、控制按钮以及背景空间设计等组成,创建X3D翻板游戏场景和造型。采用模块化、组件化以及面向对象设计思想,开发设计层次清晰、结构合理的虚拟现实X3D翻板游戏场景。虚拟现实X3D翻板游戏场景层次结构,如图5所示。

图5 X3D翻板游戏场景设计层次结构图
四、翻板游戏场景源程序实例
虚拟现实翻板游戏场景设计是利用X3D虚拟现实程序设计语言对三维立体场景进行设计、编码和调试。采用结构化、组件化、模块化以及面向对象的开发思想,设计出层次清晰、结构合理的翻板游戏三维立体场景。利用虚拟现实的各种节点创建生动、鲜活、逼真的虚拟现实翻板游戏三维立体场景。
利用几何节点创建翻板游戏桌,使用立方体节点创建翻板游戏桌台。采用球体节点和造型材料节点设计两个按钮,利用立方体节点和纹理节点设计翻板造型。使用背景节点构造一个空间背景场景,利用内联节点实现子程序调用,实现模块化和组件化设计。利用X3D动态智能感知节点设计翻板游戏动画效果,当浏览者触摸按钮时,翻板就会转动。
利用X3D-Edit专用编辑器或记事本编辑器直接编写*.x3d源程序,在正确安装X3D-Edit专用编辑器前提下,启动X3D-Edit专用编辑器进行编程。利用X3D基本几何节点、背景节点、复杂节点以及动态感知节点等编写X3D源程序。
在X3D源程序实例/目录下,提供X3D源程序:px3d4.x3d源程序。
【实例源程序】X3D翻板游戏三维立体场景造型设计px3d4.x3d源程序,利用X3D几何节点、复杂节点以及游戏设计节点进行开发与设计编写源程序,使用X3D背景节点、几何节点、纹理节点以及动态感知节点等设计编写,源程序展示如下。
X3D翻板游戏三维立体场景造型设计源程序:px3d4.x3d主程序
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1
//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
<X3D version='3.1' profile='Immersive' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.1.xsd'>
<head>
<meta content="px3d4.x3d" name="filename"/>
<meta content="zjz-zjr-zjd" name="author"/>
<meta content="*enter name of original author here*" name="creator"/>
<meta content="*enter copyright information here* Example: Copyright (c) Web3D Consortium Inc. 2006" name="rights"/>
<meta content="*enter online Uniform Resource Identifier (URI) or Uniform Resource Locator (URL) address for this file here*" name="identifier"/>
<meta content="X3D-Edit, http://www.web3d.org/x3d/content/README.X3D-Edit.html" name="generator"/>
</head>
<Scene>
<Background DEF="_Background" skyColor='0.98 0.98 0.98'>
</Background>
<Viewpoint DEF='CopperRockfish' description='CopperRockfish' position='0.0 -10.0
0.0' orientation='1 0 0 1.571 '/>
<Viewpoint DEF="View1" fieldOfView='0.6024' orientation='0 0 10 1.571'
position='0 0 10' description="View1">
</Viewpoint>
<Viewpoint DEF="View2" fieldOfView='0.6024' orientation='1 0 0 0' position='0
20 158' description="View2">
</Viewpoint>
<Viewpoint DEF="View3" fieldOfView='0.6024' orientation='0 1 0 3.141'
position='0 10 -258' description="View3">
</Viewpoint>
<Group>
<TouchSensor DEF='BlueRockfishTouchSensor' description='touch to rotate'/>
<TimeSensor DEF='BLUEROCKFISHCLOCK' cycleInterval='2.0'/>
<OrientationInterpolator DEF='BlueRockfishPathInterpolator' key=' 0.0 0.5 1.0'
keyValue='0.0 1.0 0.0 0.0, 0.0 1.0 0.0 1.57, 0.0 1.0 0.0 3.14, '/>
<Transform DEF='BLUEROCKFISH_TRANSFORM'>
<Shape>
<Appearance>
<ImageTexture DEF='CopperRockfishImage' url='"zjztp.jpg"
"http://www.web3d.org/x3d/content/examples/Basic/KelpForestExhibit/zjztp.jpg"'/>
<TextureTransform scale='1 2'/>
</Appearance>
<IndexedFaceSet coordIndex='0 1 2 3 0 -1' solid='true'>
<Coordinate point='-2 -1 0, 2 -1 0, 2 1. 0, -2 1 0'/>
</IndexedFaceSet>
</Shape>
</Transform>
<Transform bboxCenter="0 0 0" bboxSize="-1 -1 -1" center="0 0 0"
rotation="1 0 0 1.571" scale="0.5 0.5 0.5" translation="3 2 -2">
<Shape>
<Appearance>
<Material diffuseColor='0.3 0.3 0.6'/>
</Appearance>
<Cylinder height="7" radius=".8"/>
</Shape>
</Transform>
<Transform bboxCenter="0 0 0" bboxSize="-1 -1 -1" center="0 0 0"
rotation="1 0 0 1.571" scale="0.5 0.5 0.5" translation="3 -2 -2">
<Shape>
<Appearance>
<Material diffuseColor='0.3 0.3 0.6'/>
</Appearance>
<Cylinder height="7" radius=".8"/>
</Shape>
</Transform>
<Transform bboxCenter="0 0 0" bboxSize="-1 -1 -1" center="0 0 0"
rotation="1 0 0 1.571" scale="0.5 0.5 0.5" translation="-3 2 -2">
<Shape>
<Appearance>
<Material diffuseColor='0.3 0.3 0.6'/>
</Appearance>
<Cylinder height="7" radius=".8"/>
</Shape>
</Transform>
<Transform bboxCenter="0 0 0" bboxSize="-1 -1 -1" center="0 0 0"
rotation="1 0 0 1.571" scale="0.5 0.5 0.5" translation="-3 -2 -2">
<Shape>
<Appearance>
<Material diffuseColor='0.3 0.3 0.6'/>
</Appearance>
<Cylinder height="7" radius=".8"/>
</Shape>
</Transform>
<Group>
<Transform DEF='BUTTON_TRANSFORM' translation='1.0 -2 0.2'>
<Shape>
<Appearance>
<Material diffuseColor='0.0 1.0 0.0'/>
</Appearance>
<Sphere radius='0.2'/>
</Shape>
</Transform>
<TouchSensor DEF='FrontTouchSensor' description='touch to rotate'/>
<TimeSensor DEF='FRONTTOUCHSENSORCLOCK' cycleInterval='2.0'/>
<OrientationInterpolator DEF='PlaqueToPictureInterpolator' key=' 0.0 0.5 1.0'
keyValue='0.0 1.0 0.0 3.14, 0.0 1.0 0.0 1.57, 0.0 1.0 0.0 0.0, '/>
</Group>
<Group>
<Transform DEF='BUTTON_TRANSFORM2' translation='-1.0 -2 0.2'>
<Shape>
<Appearance>
<Material diffuseColor='1.0 0.0 0.0'/>
</Appearance>
<Sphere radius='0.2'/>
</Shape>
</Transform>
<TouchSensor DEF='PictureTouchSensor' description='touch to rotate'/>
</Group>
<Group>
<Transform DEF='BASE_TRANSFORM' translation='0.0 0.0 -0.3'>
<Shape>
<Appearance>
<Material diffuseColor='0.3 0.3 0.6'/>
</Appearance>
<Box size='8.0 6.0 0.3'/>
</Shape>
</Transform>
<TouchSensor DEF='BaseTouchSensor' description='touch to rotate'/>
<Group>
<Transform rotation='0.0 1.0 0.0 0.0' translation='0.0 -2.0 0.0'>
<Shape>
<Appearance>
<Material diffuseColor='0.2 0.6 0.8'/>
</Appearance>
<Box size='6 0.5 0.5'/>
</Shape>
</Transform>
</Group>
<Group>
<Transform rotation='0.0 1.0 0.0 0.0' translation='0.0 2.0 0.0'>
<Shape>
<Appearance>
<Material diffuseColor='0.2 0.6 0.8'/>
</Appearance>
<Box size='6 0.5 0.5'/>
</Shape>
</Transform>
</Group>
<Group>
<Transform rotation='0.0 0.0 1.0 1.58' translation='3.0 0.0 0.0'>
<Shape>
<Appearance>
<Material diffuseColor='0.2 0.6 0.8'/>
</Appearance>
<Box size='4.5 0.5 0.5'/>
</Shape>
</Transform>
</Group>
<Group>
<Transform rotation='0.0 0.0 1.0 1.58' translation='-3.0 0.0 0.0'>
<Shape>
<Appearance>
<Material diffuseColor='0.2 0.6 0.8'/>
</Appearance>
<Box size='4.5 0.5 0.5'/>
</Shape>
</Transform>
</Group>
</Group>
</Group>
<ROUTE fromField='touchTime' fromNode='BlueRockfishTouchSensor' toField='set_startTime'
toNode='BLUEROCKFISHCLOCK'/>
<ROUTE fromField='fraction_changed' fromNode='BLUEROCKFISHCLOCK' toField='set_fraction'
toNode='BlueRockfishPathInterpolator'/>
<ROUTE fromField='value_changed' fromNode='BlueRockfishPathInterpolator'
toField='set_rotation' toNode='BLUEROCKFISH_TRANSFORM'/>
<ROUTE fromField='touchTime' fromNode='FrontTouchSensor' toField='set_startTime'
toNode='FRONTTOUCHSENSORCLOCK'/>
<ROUTE fromField='fraction_changed' fromNode='FRONTTOUCHSENSORCLOCK'
toField='set_fraction' toNode='PlaqueToPictureInterpolator'/>
<ROUTE fromField='value_changed' fromNode='PlaqueToPictureInterpolator'
toField='set_rotation' toNode='BLUEROCKFISH_TRANSFORM'/>
<ROUTE fromField='touchTime' fromNode='PictureTouchSensor' toField='set_startTime'
toNode='BLUEROCKFISHCLOCK'/>
</Scene>
</X3D>
X3D翻板游戏三维立体场景造型设计运行程序,首先,启动Xj3D-browser/BS Contact VRML-X3D 7.0浏览器,然后打开“X3D源程序实例/px3d4.x3d”,即可运行虚拟现实X3D翻板游戏三维立体场景造型,如图6所示。

图6 X3D翻板游戏三维立体场景效果图
五、结语
本文对虚拟现实X3D动画游戏进行开发与设计,利用几何节点、组节点、触摸传感器节点、时间传感器节点以及朝向插补器节点等实现X3D虚拟现实游戏动画效果。使X3D世界更加生动、真实、鲜活。使浏览者真正体验身临其境的感受。
利用X3D虚拟现实复杂几何节点、组节点以及坐标变换节点等创建游戏台三维立体场景和造型。主要利用动画智能感知节点,TouchSensor触摸传感器节点、TimeSensor时间传感器节点、以及OrientationInterpolator朝向插补器节点等开发与设计。实现虚拟空间物体的运动,触摸红蓝小球来控制翻板运动,实现翻板游戏的控制运动。
本文重点介绍了X3D虚拟现实动画游戏设计,通过X3D复杂节点、智能感知节点的学习进一步了解和掌握虚拟现实X3D三维立体游戏动画设计,掌握较复杂虚拟现实X3D编程方法。
|