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

一、动画设计

虚拟现实动画设计是以传统计算机系统和虚拟现实软件为平台,创建虚拟现实三维立体空间游戏动画场景。利用虚拟现实语言X3D中各种基本节点、群节点以及场景效果节点、动态感知节点等进行三维立体造型和游戏动画场景设计。利用软件项目开发方法和技术提高虚拟现实软件项目产品开发质量、速度和效率。使用户亲身感受虚拟现实技术的魅力,在虚拟现实游戏场景环境中直接感受与虚拟造型和景物动态交互作用,产生身临其境的游戏真实感受。在虚拟现实环境中,真实感受视觉、听觉、触觉、娱乐以及智能感知的自然效果。

二、动画节点设计

X3D虚拟现实动画设计中,X3D斜拉桥动画场景设计涉及主要X3D节点设计包含X3D基本几何节点、复杂节点以及动态感知节点等。在前几讲中已经对几何节点进行了阐述,本文主要对本程序中涉及到的主要节点加以介绍。

1.几何节点

X3D虚拟现实复杂几何节点含盖PointSet“点”节点、IndexedLineSet“线”节点、IndexedFaceSet“面”节点、IndexedTriangleFanSet节点、ElevationGrid海拔栅格节点以及Extrusion挤出造型等复杂节点。主要介绍IndexedFaceSet“面”节点的语法定义和解释。

1IndexedFaceSet“面”节点

X3D文件中,创建面是通过IndexedFaceSet 节点来实现的,创建立体几何造型,也可组成实体模型,并对其进行着色。IndexedFaceSet节点通常作为造型节点的geometry域的值。

1)语法定义

IndexedFaceSet“面”节点定义了一个几何“”节点,用以创建一个三维立体空间面造型,根据开发与设计需求设置空间物体面的点坐标和线的颜色来确定空间的“面”。还可以利用Appearance外观和Material材料节点来描述IndexedFaceSet“面”节点的纹理材质、颜色、发光效果、明暗以及透明度等。

IndexedFaceSet“面”节点语法定义如图1所示。 

 



 

1  IndexedFaceSet“面”节点语法定义

 

2IndexedFaceSet“节点详解

IndexedFaceSet“面”节点包含DEFUSEcoordIndexccwconvexsolidcreaseAnglecolorPerVertexcolorIndexset_coordIndexset_colorIndexColorCoordinatecontainerField以及class域等。其中*表示子节点。

2)域数据类型描述

MFInt32域:是一个多值含有32位的整数。SFBool:是一个单值布尔量,取值范围[true | false]SFColor域:只有一个颜色的单值域,它指定了红绿蓝(RGB三个浮点数;SFNode含有一个单节点;SFFloat域:是单值单精度浮点数。

3)事件的存储/访问类型描述

表示域(属性)的存储/访问类型包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。

4IndexedFaceSet“节点域、域名和域值详解

DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性,该属性是可选项。

USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。

coordIndex域:指定了一个按照顺序以坐标索引来使用coordinates节点中提供坐标。编号的起点为0,一组设置间可以使用逗号分割以便于阅读代码。使用-1来分割不同的多边形索引。

ccw域:指定了一个面是按顺时针方向索引,还是逆时针索引。当该域值“true”指定为逆时针,按顶点坐标方位的顺序,当ccw值为“false”时可以翻转solid(背面裁切)及法线方向,默认值为“true”。

Convex:指定了一个针对所有的面都是凸多边形(true值),或可能有凹多边形(false值)。在凸多边形的平面里,没有自相交的边,所有的内部角都小于180度。概貌互换提示:可能只支持convex=true IndexedFaceSets造型。缺省值convex=true”时,凹几何体可能不可见。

solid域:定义了一个布尔量,当该域值true时,表示只构建“面”对象的表面,不构建背面;当该域值false时,表示“面”对象的正面和背面均构建。该域值的取值范围[true|false],其默认值为true

creaseAngle:定义了一个决定相邻面渲染方式的角,如果两个相邻面的法线夹角小于creaseAngle,就把两个面的边平滑渲染,反之会渲染出两个面的边线。概貌互换提示:可能只支持弧度值0和Π。提示:creaseAngle值为0 时锐利地渲染所有的边,creaseAngle 值为3.14 时平滑地渲染所有的边。

colorPerVertex指定了一个Color 节点被应用于每顶点上(true),还是每多边形上(false)。缺省值为“true”。

colorIndex域:指定了一个按照顺序以索引来使用颜色。如果渲染的Coordinate point点集原来是定义用在IndexedFaceSet时,索引值可能需要重复每个起点的值以封闭多边形。

normalPerVertex域:指定了一个Normal节点被应用于每顶点上(true),还是每多边形上(false),缺省值为“true”。

normalIndex域:指定了一个法向量索引列表,通过这个列表来指定要使用的法向量。该域值的默认值为空的法向量索引列表。

texCoordIndex域:用来定义一连串索引,每个索引都对应TextureCoordinate节点(纹理坐标)中的每组坐标值。按照顺序索引纹理坐标以进行帖图,可以使用3D创作工具创作。

set_coordIndex域:设定了一个按照顺序以坐标索引来使用coordinates节点中提供坐标。编号的起点为0,一组设置间可以使用逗号分割以便于阅读代码,使用-1来分割不同的多边形索引。

set_colorIndex域:设定了一个按照顺序以索引来使用颜色。

set_normalIndex域:设定了一个法向量索引列表,通过这个列表来指定要使用的法向量。该域值的默认值为空的法向量索引列表。

set_texCoordIndex域:设定了一个按照顺序索引纹理坐标以进行帖图。可以使用3D创作工具创作。

containerField域:表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为geometry,包含几何节点。如geometry Box children Group proxy ShapecontainerField属性只有在X3D场景用XML编码时才使用。

class域:是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。

2. 控制节点 

动画控制节点实现动画效果,在现实世界中,万物都是在变化着的,如海水波浪运动、汽车形势、树叶由绿变黄等,这些都可归属为动画。同样,在X3D中也可以实现动画效果,使X3D世界更加生动、真实、鲜活。X3D提供了多个用来控制动画的插补器,主要介绍PositionInterpolator位置插补器节点。

PositonInterpolator位置插补器节点是空间造型位置移动节点,用来描述一系列用于动画的关键值,使物体移动形成动画。该节点不创建任何造型,在一组SFVec3f值之间进行线性插值。适合于对平移进行插值。

1)语法定义 

PositionInterpolator 位置插补器节点产生指定范围内的一系列三维值。其结果可以被路由到一个Transform节点的translation属性 或另一个Vector3Float 属性。典型输入:ROUTE someTimeSensor.fraction_changed TO someInterpolator.set_fraction。典型输出:ROUTE someInterpolator.value_changed TO destinationNode.set_attribute

PositonInterpolator位置插补器节点语法定义如图2所示。

 


 


2  PositonInterpolator位置插补器节点语法定义

 

2)节点详解

PositionInterpolator 位置插补器节点包含DEFUSEkeykeyValueset_fractionvalue_changedcontainerField以及class域等。

1)域数据类型描述

SFFloat域:是单值单精度浮点数。MFFloat域:是多值单精度浮点数。SFBool:是一个单值布尔量。SFVec3f域:定义了一个单值单精度三维矢量。MFVec3f域:定义了一个多值单精度多组三维矢量。

2)事件的存储/访问类型描述

表示域(属性)的存储/访问类型,包括inputOnly(输入类型)、outputOnly(输出类型)、initializeOnly(初始化类型)以及inputOutput(输入/输出类型)等,用来描述该节点必须提供该属性值。

3)节点域、域名和域值详解

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开发工具对斜拉桥三维立体场景进行编码、测试和运行。利用结构化、模块化、组件化以及面向对象的开发设计思想,开发虚拟现实软件工程项目。

(1)造型设计

虚拟现实X3D斜拉桥场景软件设计是利用软件工程思想开发设计,采用渐进式软件开发模式对虚拟现实斜拉桥场景进行开发、设计、编码、调试和运行。循序渐进不断完善软件项目的开发与设计。

虚拟现实斜拉桥场景设计由斜拉桥桥墩、桥体、树木、引桥和拉线等组成,还有行使的汽车、流动的河水使斜拉桥场景的设计更加生动和鲜活。采用模块化、组件化以及面向对象的设计思想,使虚拟现实斜拉桥场景设计层次清晰、结构合理。虚拟现实斜拉桥场景设计层次结构如图3所示。

  


 

3  虚拟现实X3D斜拉桥场景设计层次结构图

 

四、斜拉桥场景造型源程序实例

虚拟现实斜拉桥场景设计利用虚拟现实程序设计语言X3D对跨江斜拉大桥、河流和汽车三维立体场景进行设计、编码和调试。利用现代软件开发的极端编程思想,采用绝对编程、自动测试、简单设计以及先测试后设计开发理念,融合结构化、组件化和模块化的设计思想,使软件开发设计层次清晰、结构合理。利用虚拟现实语言的各种基本节点和复杂节点创建生动、逼真的三维立体跨江斜拉大桥场景。

使用背景节点、视角节点、坐标变换节点、内联节点、组节点、重定义节点、重用节点、面节点、时间传感器节点、动态插补器节点、事件和路由等进行设计和开发,利用内联节点实现子程序调用,实现模块化和组件化设计。利用动态智能感知节点设计行驶的汽车,流动的河水。使跨江斜拉大桥场景设计更加逼真、生动、雄伟壮观。

利用X3D-Edit专用编辑器或记事本编辑器直接编写*.x3d源程序,在正确安装X3D-Edit专用编辑器前提下,启动X3D-Edit专用编辑器进行编程。利用X3D基本几何节点、背景节点、复杂节点以及动态感知节点等编写X3D源程序。

X3D源程序实例/px3d3目录下,提供X3D源程序:px3d3.x3d源程序。

实例源程序:拟现实跨江斜拉大桥三维立体场景设计px3d3.x3d源程序,利用X3D几何节点、复杂节点以及动态感知节点进行开发与设计编写源程序,使用X3D背景节点、几何节点、内联节点、复杂节点以及动态感知节点等设计编写,源程序展示如下。

虚拟现实X3D跨江斜拉大桥三维立体场景造型设计源程序:px3d3.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 profile='Immersive' version='3.1' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.1.xsd'>

  <head>

    <meta content="px3d3.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>

    <Viewpoint description='Transformed texture window' position='1 5 58.825'/>

<Background groundColor='0 0 0' skyAngle='1.309 1.571' skyColor='0 0.2 0.7 0 0.5 1

1 1 1'/>

    <!--************************************************************-->

    <Transform bboxCenter="0 0 0" bboxSize="-1 -1 -1" center="0 0 0"

 

  推荐精品文章

·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