2)Cone圆锥体节点详解
Cone圆锥体节点包含DEF、USE、height、bottomRadius、side、bottom、solid、containerField以及class域等。
3)域数据类型描述
SFFloat域是单值单精度浮点数;SFBool域是一个单值布尔量,取值范围[true | false]。
4)事件的存储/访问类型描述
表示域的存储/访问类型,包括inputOnly、outputOnly、initializeOnly以及inputOutput等,用来描述该节点必须提供该属性值。
5)Cone圆锥体节点域、域名和域值详解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性。该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率,该属性是可选项。
height域指定了圆锥体的高。圆锥体的高位于Y轴方向,且以原点为中点。该域值为单精度浮点数,存储/访问类型是initializeOnly。该域值必须大于0.0,其默认值为2.0,就是圆锥体的底部的中心位于Y轴-1.0处,顶点位于Y轴1.0处。
bottomRadius域指定了以原点为中心,以Y轴为中心轴的圆锥体的底部圆的半径。该域值为单精度浮点数,存储/访问类型是initializeOnly。该域值必须大于0.0,其默认值为1.0,就是该圆锥体底部的半径为1.0。
side域指定该圆锥体是否有锥面。该域值为单值布尔类型,存储/访问类型是initializeOnly。如果该域值为TRUE,则创建锥面;如果该域值为FALSE,则不创建,该域值的默认值为TRUE。
bottom域指定一个是否创建该圆锥体的底部。该域值为单值布尔类型,存储/访问类型是initializeOnly(初始化类型)。如果该域值为TRUE,则创建底部;如果该域值为FALSE,则不创建,该域值的默认值为TRUE。
solid域定义了一个圆锥体造型表面和背面绘制的布尔量,当该域值为true时,表示只构建圆锥体对象的表面,不构建背面;当该域值为false时,表示圆锥体对象的正面和背面均构建。该域值的取值范围[true|false],其默认值为true。
containerField域表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为geometry,包含几何节点。如:geometry Sphere、 children Group、 proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
(4)Cylinder圆柱体节点
Cylinder圆柱体节点定义了一个圆柱体的原始造型,Cylinder圆柱体节点描述了一个圆柱体的几何造型。根据圆柱体的半径大小、圆柱体高度的不同,可以改变圆柱体的大小尺寸。圆柱体节点通常作为Shape节点中geometry几何子节点。Cylinder圆柱体节点是X3D基本几何造型节点,一般作为Shape节点中geometry子节点。利用Shape节点中Appearance外观和Material材料子节点用于描述Cylinder圆柱体节点的纹理材质、颜色、发光效果、明暗、光的反射以及透明度等,提高开发与设计的效果。
1)Cylinder圆柱体节点语法定义
Cylinder圆柱体节点语法定义了一个三维立体空间圆柱体造型的属性名和域值,利用Cylinder圆柱体节点的域名、域值、域的数据类型以及事件的存储访问权限的定义来创建一个三维立体空间Cylinder圆柱体造型。主要利用Cylinder圆柱体节点中的高度(height)、圆柱底半径(bottomRadius)、侧面(side)、底面(bottom)以及实心(solid)参数设置创建X3D三维立体圆柱体造型。
Cylinder圆柱体节点语法定义如图5所示。
Cylinder圆柱体节点数据结构: 图标
域名(属性名) |
域值(属性值) |
域数据类型 |
存储/访问类型 |
XML属性类型 |
DEF |
ID |
|
|
#IMPLIED |
USE |
IDREF |
|
|
#IMPLIED |
height |
2 |
SFFloat |
initializeOnly |
CDATA |
radius |
1 |
SFFloat |
initializeOnly |
CDATA |
top |
true |
SFBool |
initializeOnly |
(true|false) |
side |
true |
SFBool |
initializeOnly |
(true|false) |
bottom |
true |
SFBool |
initializeOnly |
(true|false) |
solid |
true |
SFBool |
initializeOnly |
(true|false) |
containerField |
geometry |
|
|
NMTOKEN |
class |
|
|
|
CDATA#IMPLIED |
|
图5 Cylinder圆柱体节点语法定义
2)Cylinder圆柱体节点详解
Cylinder圆柱体节点包含DEF、USE、height、radius、top、side、bottom、solid、containerField以及class域等。
3)域数据类型描述
SFFloat域是单值单精度浮点数;SFBool域是一个单值布尔量,取值范围[true | false]。
4)事件的存储/访问类型描述
表示域的存储/访问类型,包括inputOnly、outputOnly、initializeOnly以及inputOutput等,用来描述该节点必须提供该属性值。
5)Cylinder圆柱体节点域、域名和域值详解
DEF为节点定义一个名字,给该节点定义了唯一的ID,在其它节点中就可以引用这个节点。用DEF为节点命名时,使用有意义的描述性的名称可以规范文件,以提高X3D文件可读性,该属性是可选项。
USE用来引用DEF定义的节点ID,即引用DEF定义的节点名字,同时忽略其它的属性和子对象。使用USE来引用其它的节点对象而不是复制节点可以提高性能和编码效率。该属性是可选项。
height域指定了圆柱体的高。该域值必须大于0.0,其默认值为2.0,是圆柱体的底部的位于Y轴-1处,顶部位于Y轴的1处。该域值的尺寸以米为单位,几何尺寸一旦初始化后就不可以再更改,通过使用Transform缩放尺寸。
radius域指定了以原点为中心,Y为轴的圆柱体的半径。该域值必须大于0.0,其默认值为1.0。该域值的尺寸以米为单位,几何尺寸一旦初始化后就不可以再更改,通过使用Transform缩放尺寸。
top域指定了是否创建该圆柱体的顶部。如果该域值为TRUE,则创建顶部圆;如果该域值为FALSE,则不创建顶部圆。该域的默认值为TRUE,一旦初始化后就不可以再更改。
bottom域指定了是否创建该圆柱体的底部。如果该域值为TRUE,则创建底部圆;如果该域值为FALSE,则不创建底部圆。该域的默认值为TRUE,一旦初始化后就不可以再更改。
side域的域值指定是否创建该圆柱体的曲面。如果该域值为TRUE,则创建曲面(不画内表面);如果该域值为FALSE,则不创建曲面。该域的默认值为TRUE,一旦初始化后就不可以再更改。
solid域定义了一个圆柱体造型表面和背面绘制的布尔量,当该域值为true时,表示只构建圆柱体对象的表面,不构建背面;当该域值false时,表示圆柱体对象的正面和背面均构建。该域值的取值范围[true|false],其默认值为true。
containerField域表示容器域是field域标签的前缀,表示了子节点和父节点的关系。该容器域名称为geometry,包含几何节点。如:geometry Sphere、 children Group、 proxy Shape。containerField属性只有在X3D场景用XML编码时才使用。
class域是用空格分开的类的列表,保留给XML样式表使用。只有X3D场景用XML编码时才支持class属性。
三、天有不测风云场景开发与设计
天有不测风云场景开发与设计,是利用天空、雨伞和算盘组成三维立体场景和造型。利用虚拟现实语言X3D中的几何节点、组节点以及纹理图像绘制技术,创建一个天有不测风云三维立体动态场景和造型。使用球节点、圆柱节点以及锥节点和造型外观材料节点创建一个雨伞造型,运用球节点、圆柱节点和长方体节点创建一个算盘造型。
1.语法结构
天有不测风云场景造型设计,利用几何节点、纹理贴图技术以及造型外观材料节点进行颜色绘制设计,采用内联节点实现子程序调用,实现天有不测风云绚丽景观设计。
天有不测风云场景造型由X3D头节点、场景根节点、基本几何节点、纹理节点以及内联节点构成,利用几何节点进行组合及纹理绘制创建雨伞造型,运用几何节点的组合和造型外观颜色设计,构造一个算盘造型。
天有不测风云场景造型语法结构如图6所示。

图6 天有不测风云场景造型语法结构图
四、源程序
天有不测风云场景造型设计是利用虚拟现实X3D三维立体网络程序设计语言中,提供的基本几何节点开发与设计。使用背景节点、球体节点、圆柱节点、长方体节点、纹理节点以及内联节点等,采用圆柱节点、圆锥节点和纹理贴图技术创建雨伞造型,利用长方体节点、圆柱体和球节点创建算盘造型,利用背景节点创建天空场景。
利用X3D-Edit专用编辑器或记事本编辑器直接编写*.x3d源程序,在正确安装X3D-Edit专用编辑器前提下,启动X3D-Edit专用编辑器进行编程。利用X3D基本几何节点、背景节点、纹理节点、内联节点等编写X3D源程序。
在X3D源程序实例/目录下,提供X3D源程序:px3d2.x3d源程序。
【实例源程序】天有不测风云场景造型设计px3d2.x3d源程序,利用X3D基本语法和几何节点定义开发与设计编写源程序,使用X3D背景节点、球节点、圆柱节点、圆锥节点、长方体节点、纹理节点以及内联节点等设计编写,源程序展示如下。
X3D天有不测风云场景造型设计px3d2.x3d主程序:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1
<X3D profile="Immersive" version="3.1">
<head>
<meta content="px3d2.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>
<Transform DEF="_Transform" rotation='1 1 0 0.7'>
<Background DEF="_Background" skyAngle='1.536,2.021' skyColor='1 1 1,0.98 0.98 0.98,0.2 0.6 0.2'>
</Background>
<Shape>
<Appearance>
<Material ambientIntensity='0.4' diffuseColor='0.5 0.5 0.7' shininess='0.2' specularColor='0.8 0.8 0.9'>
</Material>
</Appearance>
<Cylinder bottom='true' height='6.6' radius='0.1' side='true'
top='true'>
</Cylinder>
</Shape>
<Transform DEF="_Transform_1" translation='0 3 0'>
<Shape DEF="_Shape">
<Appearance>
<Material diffuseColor='0.5 0.5 0.7'>
</Material>
<ImageTexture url='"0105.jpg"'>
</ImageTexture>
</Appearance>
<Cone DEF="_Cone" bottomRadius='3' height='1' side='true'
bottom='false'>
</Cone>
</Shape>
</Transform>
<Transform translation='0 3.5 0'>
<Shape>
<Appearance>
<Material ambientIntensity='0.4' diffuseColor='0.5 0.5 0.7' shininess='0.2' specularColor='0.8 0.8 0.9'>
</Material>
</Appearance>
<Sphere radius='0.18'>
</Sphere>
</Shape>
</Transform>
<Transform translation='0 -3 0'>
<Shape>
<Appearance>
<Material ambientIntensity='0.4' diffuseColor='0.5 0.5 0.7' shininess='0.2' specularColor='0.8 0.8 0.9'>
</Material>
</Appearance>
<Cylinder bottom='true' height='1' radius='0.2' side='true'
top='true'>
</Cylinder>
</Shape>
</Transform>
</Transform>
<Transform translation="12 -5 -18">
<Inline url="px3d2-1.x3d"/>
</Transform>
</Scene>
</X3D>
天有不测风云场景造型设计在主程序中利用内联节点实现子程序调用,在子程序中使用几何节点、组节点、坐标变换节点以及造型外观材料节点创建一个黄金颜色的算盘造型,虚拟现实X3D算盘造型源程序:px3d2-1.x3d子程序。
<?xml version="1.0" encoding="UTF-8"?>
<X3D profile="Immersive" version="3.1">
<head>
<meta content="px3d2-1.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.2 0.5 0.6'>
</Background>
<Transform DEF="rimrow" translation='0 1.7 0'>
<Shape DEF="_Shape">
<Appearance>
<Material ambientIntensity='0.4' diffuseColor='0.3 0.2 0' shininess='0.2' specularColor='0.7 0.7 0.6'>
</Material>
</Appearance>
<Box DEF="_Box" size='10 0.18 0.6'>
</Box>
</Shape>
</Transform>
<Transform translation='0 -1 0'>
<Transform USE="rimrow"/>
</Transform>
<Transform translation='0 -3.2 0'>
<Transform USE="rimrow"/>
</Transform>
<Transform DEF="rimarrange" translation='-5 0.1 0'>
<Shape>
<Appearance>
<Material ambientIntensity='0.4' diffuseColor='0.3 0.2 0' shininess='0.2' specularColor='0.7 0.7 0.6'>
</Material>
</Appearance>
<Box size='0.18 3.4 0.6'>
</Box>
</Shape>
</Transform>
<Transform translation='10 0 0'>
<Transform USE="rimarrange"/>
</Transform>
<Transform DEF="pole">
<Transform scale='0.2 5 0.2' translation='0 0.1 0'>
<Shape>
<Appearance>
<Material ambientIntensity='0.4' diffuseColor='0.3 0.2 0' shininess='0.2' specularColor='0.7 0.7 0.6'>
</Material>
</Appearance>
<Cylinder bottom='true' height='0.6' radius='0.5'
side='true' top='true'>
</Cylinder>
</Shape>
</Transform>
<Transform scale='0.5 0.2 0.5' translation='0 0 0'>
|