你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
1.12 X3D虚拟现实游戏设计(下)
 

startTime域:定义了当现在时间time now >= startTimeisActive 变为true值激活TimeSensor。绝对时间:从197011, 00:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。

stopTime域:定义了当stopTime <= time now现在时间,isActive变为false 值禁止TimeSensor。绝对时间:从19701100:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。

pauseTime域:定义了当现在时间time now >= pauseTimeisPaused 值变为true暂停TimeSensor。绝对时间:从19701100:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。提示:不支持VRML97

resumeTime域:定义了当resumeTime <= time now现在时间,isPaused值变为false 再次激活TimeSensor。绝对时间:从19701100:00:00 GMT 经过的秒数。一般通过路由接受一个时间值。提示:不支持VRML97

cycleTime域:定义了当开始时cycleTime 发送时间输出事件outputOnly,当每次新循环开始的时候也发送,用来同步其它基于时间的对象。

isActive域:定义了一个当回放开始/结束的时候发送 isActive true/false 事件。

isPaused域:定义了一个当回放暂停/继续的时候发送 isPaused true/false 事件。提示:不支持VRML97

fraction_changed域:定义了一个fraction_changed 持续发送[01] 范围之间的值以提供当前循环的进程。

time域:定义了一个Time 持续发送绝对时间,从197011, 00:00:00 GMT 经过的秒数以提供一个计时模拟。

containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Sphere, children Group, proxy ShapecontainerField属性只有在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朝向插补器节点语法定义

 

2OrientationInterpolator朝向插补器节点祥解

OrientationInterpolator朝向插补器节点包含DEFUSEkeykeyValueset_fractionvalue_changedcontainerField以及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域:定义了一个按照相应的keykeyValue对,输出相应时间段的线性插值。

containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为children,包含几何节点。如:geometry Sphere, children Group, proxy ShapecontainerField属性只有在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='&quot;zjztp.jpg&quot;

&quot;http://www.web3d.org/x3d/content/examples/Basic/KelpForestExhibit/zjztp.jpg&quot;'/>

            <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编程方法。

 

 

 

 

 

 

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089