一、X3D三维立体场景设计
X3D三维立体场景设计利用X3D虚拟现实程序的基本几何节点,开发设计虚拟现实三维立体场景和造型,使浏览者在三维立体空间体验身临其境的感受。
利用X3D虚拟现实几何节点、背景节点、模型节点、空间变换节点、内联节点以及动态感知节点等,开发设计三维立体几何场景造型,本文以天有不测风云场景造型为例讲述X3D虚拟现实技术的开发。
二、X3D几何立体节点
X3D几何立体节点设计提供基本几何节点作为设计对象,进行场景和造型的设计。在开发和设计过程中,如果基本几何节点不够用,可以使用点、线、面以及挤压等复杂节点进行设计和开发。本程序所涉及的主要节点语法定义:
1.Shape模型节点
X3D几何3D节点主要由shape模型节点、三维立体造型节点以及相关几何节点组成。利用3D几何节点创建三维几何造型,也可以创建实体模型,还可以对其进行着色。shape模型节点由Appearance外观节点和几何节点构成。Appearance外观子节点定义了物体造型的外观,包括纹理映像、纹理坐标变换以及外观的材料节点;Geometry几何造型子节点定义了立体空间物体的几何造型。
Shape模型节点设计,在X3D文件Scene根节点中,添加开发与设计所需要三维立体场景和造型时,在Shape模型节点中包含两个子节点分别是Appearance外观节点与Geometry几何造型节点。Appearance外观子节点定义了物体造型的外观,包括纹理映像、纹理坐标变换以及外观的材料节点;Geometry几何造型子节点定义了立体空间物体的几何造型,如Box 节点、Cone节点、Cylinder节点和Sphere节点等原始几何结构。
Shape节点语法定义
Shape模型节点是在X3D文件中根Scene节点基础上,选择或添加一个Shape模型节点或其他节点可以编辑各种三维立体场景和造型。Shape模型节点定义了一个X3D立体空间造型所具有的几何尺寸、材料、纹理和外观特征等,这些特征定义了X3D虚拟空间中创建的空间造型。Shape节点是X3D的核心节点,X3D的所有立体空间造型均使用Shape节点创建,所以Shape节点在X3D文件中显得尤为重要。
Shape模型节点可以放在X3D文件中任何组节点下,Shape模型节点可以包含Appearance子节点和geometry子节点,可以用符合类型定义的原型 ProtoInstance来替代。Shape模型节点语法定义如图1所示

图1 Shape模型节点语法定义
(2)Shape模型节点域、域名和域值详解
Shape模型节点包含DEF、USE、bboxCenter、bboxSize、containerField、appearance、geometry以及class域等;其中*表示子节点。
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其他节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性名称可以规范文件,以提高文件可读性。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其他的属性和子对象。使用USE来引用其他的节点对象而不是复制节点可以提高性能和编码效率。
bboxCenter域表示边界盒的中心,默认值为[0 0 0],域数据类型为一单值三维矢量空间,包含有三个浮点数,数与数之间用空格分离,该值表示从原点到所给定点的矢量。存储/访问类型为initializeOnly。
bboxSize域表示边界盒尺寸大小,缺省值为[-1 –1 -1],域数据类型为一单值三维矢量空间,包含有三个浮点数,存储/访问类型为initializeOnly。为优化三维立体场景,也可以强制指定赋值。
containerField域表示容器域是field域标签的前缀,明确了子节点和父节点的关系。该容器域名称为children,含盖appearance子节点和geometry子节点。如:geometry Box、 children Group、 proxy Shape。containerField属性只有在X3D场景用XML编码时才可以使用。
appearance域定义了一个Appearance节点,Appearance节点定义了物体造型的外观,包括纹理映像、纹理坐标变换以及外观的材料节点。Appearance域的默认值为NULL,表示其外观为白色光,该域值为一个单值节点。
geometry域定义了一个几何造型节点,包含Box 节点、Cone节点、Cylinder节点和Sphere节点等原始的几何结构。geometry域的默认值为NULL,表示没有任何几何造型节点。该域值为一个单值节点。
class域是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
(3)XML属性类型说明
1)CDATA是属性的类型,表示字符数据不是标记的文本。
2)NMTOKEN是属性的类型,表示XML名称。
3)属性的缺省值default有3种不同类型的缺省值型态。
●#REQUIRED:表示必须提供属性值,用来描述节点必须提供该属性值,常用在限制必须有属性值的情况下。
●#IMPLIED:表示属性是可选的,用来描述节点的某个属性是可选的。
●#FIXED:表示总是使用固定值,如果提供的属性值是一个固定值,且必须出现时,可用#FIXED来限制。
2. X3D三维立体几何节点
X3D三维立体几何节点设计是在Shape模型节点中,利用它所包含的两个子节点创建三维立体造型,其中,两个子节点分别为Appearance外观节点与几何造型节点。Appearance外观子节点定义了物体造型的外观,包括纹理映像、纹理坐标变换以及外观的材料节点;几何造型子节点定义了立体空间物体的几何造型,如Box 节点、Cone节点、Cylinder节点和Sphere节点等原始的几何结构。
X3D三维立体几何节点定义了一个三维立体空间几何造型节点,包括Box 节点、Cone节点、Cylinder节点和Sphere节点等原始的几何结构,通常作为Shape节点的子节点。几何节点域的默认值为NULL,表示没有任何几何造型节点。
在X3D文件中的X3D三维立体几何节点贯穿整个X3D开发与设计的全过程,三维立体空间的几何节点,如:Box 节点、Cone节点、Cylinder节点和Sphere节点。
(1) Sphere球体节点
Shape模型节点可以包含Appearance子节点和几何子节点,Sphere球体节点是Shape模型节点下geometry几何节点域中的一个子节点。而Appearance外观和Material材料节点用于描述Sphere球体节点的纹理材质、颜色、发光效果、明暗、光的反射以及透明度。
Sphere球体节点描述了一个球体的几何造型,根据球体半径大小的不同,可以改变球体的大小。球体节点通常作为Shape节点中geometry子节点。
1)Sphere球体节点语法定义
Sphere球体节点语法定义了一个三维立体球体的属性和域值,通过Sphere球体节点的域名、域值、域的数据类型以及事件的存储访问权限的定义来描述一个三维立体空间球体造型。主要利用球体半径和实心参数创建X3D球体文件。Sphere球体节点语法定义如图2所示。
Sphere球体节点数据结构: 图标
域名(属性名) |
域值(属性值) |
域数据类型 |
存储/访问类型 |
XML属性类型 |
DEF |
ID |
|
|
#IMPLIED |
USE |
IDREF |
|
|
#IMPLIED |
radius |
1 |
SFFloat |
initializeOnly |
CDATA |
solid |
true |
SFBool |
initializeOnly |
(true|false) |
containerField |
geometry |
|
|
NMTOKEN |
class |
|
|
|
CDATA#IMPLIED |
|
图2 Sphere球体节点语法定义
2)Sphere球体节点详解
Sphere球体节点包含DEF、USE、radius、solid、containerField以及class域。
3)域数据类型描述
SFFloat域是单值单精度浮点数;SFBool域是一个单值布尔量,取值范围[true | false]。
4)事件的存储/访问类型描述
表示域的存储/访问类型,包括inputOnly、outputOnly、initializeOnly以及inputOutput等,用来描述该节点必须提供该属性值。
5)Sphere球体节点域、域名和域值详解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性。该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
radius域定义一个以原点为球心的三维球体的半径。SFFlot域类型表示一个单值单精度浮点数,该域值不可小于0.0,其默认值为1.0。如果改变三维立体球体的大小可以通过改变球体的radius半径的域值,也可以使用Transform节点对三维立体球进行定位、缩放和旋转等设计。
solid域定义了一个布尔量,当该域值为true时,表示只构建球体对象的表面,不构建背面;当该域值为false时,表示球体对象的正面和背面均构建。该域值的取值范围[true|false],其默认值为true。
containerField域表示容器域是field域标签的前缀,表示子节点和父节点的关系。该容器域名称为geometry,包含几何节点。如:geometry Sphere、 children Group、 proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
(2) Box立方体节点
Box立方体节点是一个三维立体几何节点,用来创建立方体、长方体以及立体平面的原始几何造型,该节点一般作为Shape节点中几何节点域的子节点。Box立方体节点描述了一个立方体的几何造型。根据立方体长、宽和高尺寸大小的不同,可以改变立方体的大小和长短。Box立方体节点通常作为Shape节点中geometry子节点。
1)Box立方体节点语法定义
Box立方体节点语法定义一个三维空间立方体造型的属性名和域值,通过Box立方体节点的域名、域值、域的数据类型以及事件的存储访问权限的定义来描述一个三维空间立方体造型。主要利用立方体尺寸大小分别定义立方体的长、高和宽和实心参数创建X3D立方体造型。Box立方体节点语法定义如图3所示。
Box立方体节点数据结构: 图标
域名(属性名) |
域值(属性值) |
域数据类型 |
存储/访问类型 |
XML属性类型 |
DEF |
ID |
|
|
#IMPLIED |
USE |
IDREF |
|
|
#IMPLIED |
size |
2 2 2 |
SFVec3f |
initializeOnly |
CDATA |
solid |
true |
SFBool |
initializeOnly |
(true|false) |
containerField |
geometry |
|
|
NMTOKEN |
class |
|
|
|
CDATA #IMPLIED |
|
图3 Box立方体节点语法定义
2)Box立方体节点详解
Box立方体节点包含DEF、USE、size、solid、containerField、class域等。
3)域数据类型描述
SFVec3f域定义了一个三维向量空间。一个SFVec3f域值包含有三个浮点数,数与数之间用空格分离。该值表示从原点到所给定点的向量。
SFBool域是一个单值布尔量,取值范围[true | false]。
4)事件的存储/访问类型描述
表示域的存储/访问类型,包括inputOnly、outputOnly、initializeOnly以及inputOutput等,用来描述该节点必须提供该属性值。
5)Box立方体节点域、域名和域值详解
DEF为节点定义一个名字,给该节点定义唯一的ID,在其他节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性名称可以规范文件,以提高X3D文件可读性。该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其他的属性和子对象。使用USE来引用其他的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
size域指定了一个以原点为中心的空间三维立方体或长方体的尺寸大小。该域值为三维数组,第一个数值为长方体在X轴方向上的宽度;第二个数值为长方体在Y轴方向上的高度;第三个数值为长方体在Z轴方向上的深度。size域的域值必须大于0.0,其默认值为2.0、 2.0、 2.0,即立方体的长、宽、高均为2.0。
solid域定义了一个立方体造型表面和背面绘制的布尔量。当该域值为true时,表示只构建立方体对象的表面,不构建背面;当该域值为false时,表示立方体对象的正面和背面均构建。该域值的取值范围[true|false],其默认值为true。
containerField域表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为geometry,包含几何节点。如:geometry Sphere、 children Group、 proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
(3) Cone圆锥体节点
Cone圆锥体节点定义了一个圆锥体的原始造型,是X3D基本几何造型节点,一般作为Shape节点中geometry子节点。Cone圆锥体节点描述了一个圆锥体的几何造型,根据圆锥体的半径大小、高度的不同,可以改变圆锥体的尺寸大小。利用Shape节点中Appearance外观和Material材料子节点描述Cone圆锥体节点的纹理材质、颜色、发光效果、明暗、光的反射以及透明度等,提高开发与设计的效果。
1)Cone圆锥体节点语法定义
Cone圆锥体节点语法定义了一个三维立体空间圆锥体造型的属性名和域值,利用Cone圆锥体节点的域名、域值、域的数据类型以及事件的存储访问权限的定义来创建一个三维立体空间Cone圆锥体造型。主要使用Cone圆锥体节点中的高度、圆锥底半径、侧面、底面以及实心参数设置创建X3D圆锥体造型。Cone圆锥体节点语法定义如图4所示。
Cone圆锥体节点数据结构: 图标
域名(属性名) |
域值(属性值) |
域数据类型 |
存储/访问类型 |
XML属性类型 |
DEF |
ID |
|
|
#IMPLIED |
USE |
IDREF |
|
|
#IMPLIED |
height |
2 |
SFFloat |
initializeOnly |
CDATA |
bottomRadius |
1 |
SFFloat |
initializeOnly |
CDATA |
side |
true |
SFBool |
initializeOnly |
(true|false) |
bottom |
true |
SFBool |
initializeOnly |
(true|false) |
solid |
true |
SFBool |
initializeOnly |
(true|false) |
containerField |
geometry |
|
|
NMTOKEN |
class |
|
|
|
CDATA#IMPLIED |
|
图4 Cone圆锥体节点语法定义
|