一、简介
X3D(Extensible 3D)是由Web3D联盟于1998年底提出的。Web3D联盟已经完成可扩展的三维图形规范(Extensible 3D Specification),称为X3D规范。X3D规范使用可扩展标记语言XML表达对VRML几何造型和实体行为的描述能力,缩写X3D就是为了突出新规范中VRML与XML的集成。
X3D是下一代具有扩充性三维图形规范,并且延伸了VRML97的功能。从VRML97到X3D是三维图形规范的一次重大变革,而最大的改变之处,就是X3D结合了XML和VRML97。X3D将XML的标记式语法定为三维图形的标准语法,并且已经完成了X3D的文件格式定义。目前世界上最新的网络三维图形标准——X3D已成为网络上制作三维立体场景和造型的新宠。
二、特点
X3D是互联网三维立体图形国际通用软件标准,定义了如何在多媒体中整合基于网络传播的交互三维内容。X3D将可以在不同的硬件设备中使用,并可用于不同的应用领域中,如科学可视化、航空航天模拟、虚拟战场、多媒体再现、教育、娱乐、网页设计、共享虚拟世界等方面。X3D也致力于建立一个三维立体场景造型与多媒体的统一的交换格式。X3D是VRML的继承,VRML是原来的网络3D图形的ISO标准(ISO/IEC 14772)。X3D标准是XML标准与3D标准的有机结合,提供了以下的新特性:更先进的应用程序界面,新增添的数据编码格式,严格的一致性,组件化结构用来允许模块化的支持标准。
其特点如下:
(1)程序驱动:利用虚拟现实语言创建三维立体造型和场景。
(2)强大网络功能:利用X3D提供的网络节点实现各种网络功能,如X3D场景网上浏览、下载、共享等,也可以通过超链接对象连接到其他场景或网络资源。
(3)虚拟现实图形绘制:在3D图形中,使用多边形化几何体、参数化几何体、变换层级、光照、材质、多通道以及多进程纹理绘制;在2D图形中使用3D变换层级中显示各种文本、二维平面图形、二维矢量等。
(4)多媒体功能:在三维立体空间中造型和场景能够实现多媒体制作,将文字、语音、图像、影片等融入三维立体场景,播放影视节目、环绕立体声音达到舞台影视效果。
(5)人工智能:在虚拟现实三维场景中,浏览者可以移动造型、进行碰撞检测、亲近度和可见度智能检测。
(6)开发者可以自定义对象:通过创建用户自定义的数据类型,可以扩展X3D程序的功能。
(7)强大程序接口功能:利用脚本语言实现与各种语言的接口,可以动态地控制三维立体场景,使之更加生动和鲜活。
(8)动态交互智能感知效果:利用虚拟现实硬件设备和鼠标在三维立体空间中对虚拟物体和造型进行选取和拖曳,产生身临其境的动态感知交互效果。
(9)虚拟现实动画设计:利用计时器和插补器节点实现物体和造型的各种动画效果,如人体的运动、汽车驾驶、轮船航行、宇宙飞船发射等。
(10)虚拟现实高级设计功能:虚拟人设计、地理信息系统、曲面设计、CAD设计、粒子火焰系统以及分布交互系统的整合等。
X3D虚拟现实技术描述了基于时间的行为、交互3D、多媒体信息的抽象功能。X3D 标准和规范不定义物理设备或任何依靠特定设备执行的概念,如屏幕分辨率和输入设备。只考虑到广泛的设备和应用,在解释和执行上提供很大的自由度,如ISO/IEC 19775不假设存在鼠标或2D显示设备。
每一个X3D应用都是一个包含图形、视觉和听觉对象的三维时空,并且可以用不同的机制动态地从网络存取或修改。每个X3D应用:为所有应用中包含的已经定义外部的对象建立一个隐含的境界坐标空间;由一系列3D和多媒体定义组成;可以为其他外部文件和应用指定超链接;可以定义程序化或数据驱动的对象行为;可以通过程序或脚本语言连接到外部模块或应用程序。
三、开发与运行环境
X3D虚拟现实系统开发与运行环境主要涵盖X3D系统的开发环境和运行环境。X3D系统的开发环境包括记事本X3D编辑器和X3D-Edit专用编辑器开发环境,利用它们可以开发X3D源程序和目标程序;X3D系统的运行环境主要指X3D浏览器安装和运行,主要包含Xj3D浏览器安装和使用以及BS Contact VRML-X3D 7.0浏览器安装及使用;最后,介绍X3D程序调试。
1.X3D开发环境
X3D软件开发环境主要指X3D编辑器,它是用来编写X3D源程序代码的有效开发工具,是开发设计X3D源程序代码的有利工具。X3D源文件使用UTF-8编码的描述语言,国际UTF-8字符集包含任何计算机键盘上能够找到的字符,而多数计算机使用的ASCII字符集是UTF-8字符集的子集。用一般计算机中提供的文本编辑器编写X3D源程序,也可以使用X3D的专用编辑器来编写源程序。
最简单的X3D编辑器可以使用Windows系统提供记事本工具编写X3D源程序,但软件开发效率较低。使用X3D-Edit专用编辑器编写源程序代码,会使软件项目开发的效率获得极大提高,同时可以转换成其他形式的代码执行。
(1)记事本X3D编辑器
编写X3D源代码有多种方法,这里介绍一种最简单、快捷的编辑方式。使用Windows系统提供记事本工具编写X3D源程序。
在Windows2000/XP操作系统中,选择【开始】|【程序】|【附件】|【记事本】,然后在记事本编辑状态下,创建一个新文件,开始编写X3D源文件。所编写的X3D源文件程序的文件名,X3D程序名(文件名)由文件名.扩展名组成,并且在X3D文件中要求文件的扩展名必须是以*.x3d或 *.x3dv结尾,否则X3D的浏览器是无法识别的。用文本编辑器编辑X3D源程序文件,对软件项目进行简单方便快速的设计、调试和运行。
利用文本编辑器对X3D源程序进行创建、编写、修改和保存工作,还可以对X3D源文件进行查找、复制、粘贴以及打印等。使用文本编辑器可以完成X3D的中小型软件项目开发、设计和编码工作,方便、灵活、快捷和有效,但对大型软件项目的开发编程效率较低。
(2)X3D-Edit专用编辑器
X3D-Edit是图形化X3D文件编辑器。X3D-Edit通过X3D 3.1 DTD 定义的 X3D 3.1 tagset标签集,来定制Java平台下的通用XML编辑器 IBM Xeena而定制的X3D场景图编辑器。用X3D-Edit编辑器编辑X3D场景图文件时,可以提供简化的、无误的创作和编辑方式。X3D-Edit通过XML文件定制了上下文相关的工具提示,提供了X3D每个节点和属性的概要,以方便程序员对场景图的创作和编辑。
使用X3D-Edit专用编辑器编写X3D源程序文件,对大中型软件项目的开发和编程具有高效、方便、快捷且灵活等特点,可根据需要输出不同格式文件供浏览器浏览。X3D-Edit使用 XML、DTD 文件定制的 Xeena(Java编写的通用XML文件编辑器)界面X3D-edit的开发不是一个单一的项目,通过利用XML和Java的优势,同样的XML、DTD文件将可以在其它不同的X3D应用中使用。如X3D-Edit中的工具提示为X3D-Edit提供了上下文敏感的支持,提供了每个X3D节点(元素)和域(属性)的描述、开发和设计,此工具提示也通过自动的XML转换工具转换为X3D开发设计的网页文档,而且此工具提示也将整合到将来的X3D Schema中。
2.X3D运行环境
X3D系统运行环境主要指X3D浏览器安装和运行。X3D浏览器主要分为:使用独立应用程序、插件式应用程序和Java技术三种类型的X3D浏览器,来浏览X3D文件中的內容。
Xj3D浏览器是独立应用程序,能够比较专业地浏览各种类型的X3D文件。Xj3D是Web3D提供的一系列开放的源代码,用来实现X3D规格的VRML/X3D浏览器,可以浏览*.x3d、*.x3dv、*.vrml等文件。
BS Contact VRML-X3D 7.0浏览器属于插件式VRML/X3D浏览器,可以浏览X3D文件和VRML文件等。
主要介绍Xj3D浏览器安装和使用以及BS Contact VRML-X3D 7.0浏览器安装及使用。
(1)Xj3D浏览器安装使用
在X3D浏览器中,Xj3D是一种开放源代码与X3D-Edit编辑器匹配的,无版权纠纷的专业X3D浏览器。Xj3D可以浏览*.x3d文件、*.x3dv文件、*.wrl文件等,它是X3D-Edit编辑器首选开发工具。
XJ3D浏览器使用:在正确安装XJ3D浏览器后,在c:\Program Files\Xj3D下,查找browser.bat和converter.bat两个批处理文件,可以将browser.bat创建快捷方式为Xj3DBrowser.bat放在桌面上。
运行Xj3D浏览器:在桌面上双击“Xj3DBrowser”,启动Xj3D浏览器,然后运行X3D源程序。如图1所示。

图1 启动Xj3D浏览器运行X3D源程序
(2)BS Contact VRML-X3D 7.0浏览器安装使用
BS Contact VRML-X3D 7.0浏览器安装:获取BS_Contact_VRML-X3D_7.0浏览器程序后,双击“BS_Contact_VRML-X3D_7.0”图标,开始自动安装,按提示要求正确安装BS Contact VRML-X3D 7.0浏览器。
四、基本语法
X3D基本语法涵盖X3D文件结构、语法结构、语法定义等。X3D文件结构阐述了X3D文件具体表现形式和编程风格;X3D语法结构描述X3D在开发与设计的过程中的场景语法图;X3D语法定义指X3D文件中各种节点的语法定义规则。
通过语法结构、语法定义、文件结构能够更好地理解、掌握X3D语法结构、数据类型以及编程技巧,用最短的时间掌握X3D软件开发技术,实现虚拟现实软件项目开发的目的。
1. 文件结构
X3D文件结构包含文件头、文件体及注释等内容,在主程序概貌中包括头文档、组件、说明以及场景等。在场景中利用基本几何节点、复杂节点、组节点、纹理节点、效果节点、组件节点、人性化节点以及动态感知节点等创建虚拟现实三维立体场景,使浏览者体验身临其境的感受。在编写X3D文件、节点和域时,特别要注意大小写,X3D语言对大小写是敏感的,在书写X3D文档时要区分大小写,即X3D文件严格区分大小写。
X3D文件结构由X3D文件头、文档类型DTD格式、X3D主程序概貌组成。其中X3D主程序概貌又包含头文档和场景;头文档又包含组件和说明信息;场景包含X3D中的各种三维立体节点文件。
X3D文件结构如图2所示。

图2 X3D文件结构图
2.语法结构
X3D文件语法结构是由X3D文件头、文档类型声明、文档体(主程序概貌和场景)等组成,其中,头文档又包含组件和元数据;场景主体涵盖X3D所有节点。
X3D文件头起着序码部分作用,是X3D文件必须书写的部分。主程序概貌是X3D文件主程序框架的主体部分,是X3D文件的精髓和灵魂。
概貌中的头文件作用是引入外部组件及文档说明,概貌中的场景主体描述是对X3D文件三维立体场景中的自然景观、人文环境、建筑造型、街道等创建和编码的过程。
(1) X3D文件头
在每一个X3D文件中,文件头是必须的位于X3D文件的第一行。X3D文件是以UTF-8编码字符集用XML编写的文件。每一个X3D文件的第一行应该有XML的声明语法格式(文档头)表示。
X3D使用XML语法格式声明
<?xml version="1.0" encoding="UTF-8"?>
语法解释:
1) 声明从“<?xml”开始,到“?>”结束。
2) ersion属性指明编写文档的XML的版本号,该项是必选项,通常设置为“1.0”。
3)encoding属性是可选项,表示使用编码字符集。省略该属性时,使用缺省编码字符集,即Unicode码,在X3D中使用国际UTF-8编码字符集。
UTF-8的英文全称是UCS Transform Format,而UCS是Universal Character Set的缩写。国际UTF-8字符集包含任何计算机键盘上能够找到的字符,而多数计算机使用的ASCII字符集是UTF-8字符集的子集,因此使用UTF-8书写和阅读X3D文件很方便。UTF-8支持多种语言字符集,由国际标准化组织ISO 10646-1:1993标准定义。
(2) X3D文档类型声明
X3D文档类型声明用来在文档中详细地说明文档信息,必须出现在文档的第一个元素前,文档类型采用DTD格式。<!DOCTYPE……>描述以指定X3D文件所采用的DTD,文档类型声明对于确定一个文档的有效性、良好结构性是非常重要的。
X3D文档类型声明:
<!DOCTYPE X3D PUBLIC "http://www.web3d.org/specifications/x3d-3.1.dtd"
"file:///www.web3d.org/TaskGroups/x3d/translation/x3d-3.1.dtd">
DTD可分为外部DTD和内部DTD两种类型。外部DTD存放在一个扩展名为DTD的独立文件中;内部DTD和它描述的XML文档存放在一起,XML文档通过文档类型声明来引用外部DTD和定义内部DTD。
X3D使用内部DTD的书写格式:
<!DOCTYPE 根元素名[内部DTD定义……]>
X3D使用外部DTD的书写格式:
<!DOCTYPE 根元素名 SYSTEM DTD文件的URI>
说明:URI(Uniform Resource Identifier)为统一资源标识符,泛指所有以字符串标识的资源,其范围涵盖了URL和URN。(Uniform Resource Locator)为统一资源定位码(器),是指标有通信协议的字符串(如HTTP、FTP、GOPHER),通过其基本访问机制的表述来标识资源;URN为统一资源名称,用来标识由专门机构负责的全球唯一的资源。
(3) X3D文件体
X3D文件体主要描述X3D主程序概貌,主程序概貌涵盖了组件、说明以及场景中的各个节点等信息。
X3D文件体是用来指定X3D文档所采用的概貌属性。概貌中定义了一系列内建节点及其组件的集合,X3D文档中所使用的节点,必须在指定概貌的集合的范围之内。概貌的属性值可以是“Core、Interchange、Interactive、MPEG4Interactive、Immersive及Full”。
X3D主程序概貌采用
<X3D profile="Immersive"
xmlns:xsd=http://www.w3.org/2001/XMLSchema-instance xsd:noNamespaceSchemaLocation="http://www.web3d.org/specifications/x3d-3.1.xsd">
</X3D>
X3D根文档标签包含概貌信息和概貌验证,在X3D根标签中XML概貌和X3D命名空间也可以用来执行XML概貌验证。主程序概貌又包含头元素和场景主体,头元素又包含组件和说明信息,场景中可以创建需要的各种节点。头元素用以描述场景之外的其它信息,如果想使用指定概貌的集合范围之外的节点,可以在头元素中加入组件语句,表示额外使用某组件及支援等级中的节点,如在Immersive概貌中加入“GeoSpatial”地理信息支持。另外,可以在头元素(head)元素中加入“meta”子元素描述说明,表示文档的作者、说明、创作日期或著作权等相关信息。
X3D头元素<head>描述
<head>
<meta content="px3d1.x3d" name="filename"/>
<meta content="一个X3D 程序范例!!!" name="description"/>
<meta content="zjz" name="author"/>
<meta content="2008-2-25" name="created"/>
</head>
(4) 组件与支持等级
X3D文件中的节点依据功能的不同而分类,每一种分类就是一种组件。如 Geometry3D component中包含所有三维的几何节点,有Box、Cone、Cylinder、ElevationGrid、Extrusion、IndexedFaceSet及Sphere。也就是说,在相同组件中的节点通常有共同的功能。
在每一个组件中分别定义了几种支持等级,较低的支持等级表示支持该组件中较少的节点与字段,较高的支持等级需要支持较多的节点与字段。如“Geometry3D”中有4个支持等级,“level1”只需要支持“Box、Cone、Cylinder、Sphere”四个节点,而“level 4”就得支持“Geometry3D component”中所有的节点。X3D中经常出现“component、level”,理解它们的作用和意义在开发设计X3D文档时会发挥作用。
主程序概貌根据不同的需求,X3D定义出几组概貌(Core、Interchange、Interactive、MPEG-4 interactive、Immersive、Full),每一个概貌中包含了一系列特定等级的组件的集合。例如,“Core profile”中仅包含“Core level 1 component”,而“Full profile”中包含了所有的component。每一份X3D文件都需指定其使用的概貌。
X3D模块化是指X3D由许多模块组成的,最小是域,依次是节点、等级、组件、概貌。使用者可以根据自己的需求,选择适当的模块,在实际应用上,就不必非得完整地实现整个规范内容,不仅大幅减少工作的难度,同时也能提高编码的效率和执行效能,大大增加软件的可扩展性。
(5) X3D场景主体<Scene>描述
X3D主程序概貌中的场景主体描述是利用X3D语言中各种节点和域数据类型,对X3D文件三维立体场景中的自然景观、人文环境、建筑造型、街道等进行编码的全过程。
<Scene>
<NavigationInfo type=""EXAMINE" "ANY""/>
<Shape>
<Appearance>
<Material diffuseColor="0 1 0"/>
</Appearance>
<Sphere radius="1.0"/>
</Shape>
<Background skyColor="1 1 1"/>
</Scene>
场景主体由一对<Scene>和</Scene>组成,中间可以插入背景节点、视角节点、导航节点、几何节点、复杂造型节点等场景三维立体空间所需的各种场景和造型。
(6) 一个完整X3D程序文件
其代码如下:
<X3D 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="px3d1.x3d" name="filename"/>
<meta content="一个X3D 程序范例!!!" name="description"/>
<meta content="zjz" name="author"/>
<meta content="2008-2-25" name="created"/>
</head>
<Scene>
|