第六讲虚拟现实建模语言X3D2020/2/101X3D概述Web3D出自Web3D联盟(Web3DConsortium(W3DC)),其前身是VRML联盟。所谓X3D标准就是XML标准与3D标准的有机结合,X3D被定义为可交互操作,可扩展,跨平台的网络3D内容标准。2020/2/101.1坐标系统与计量单位X3D采用常用的三维笛卡尔坐标系统。屏幕的正右方默认为X正轴,屏幕的正上方默认为Y正轴,屏幕向外默认为Z正轴。X3D的计量单位主要包括三维空间的长度、角度、时间、颜色等单位的约定。2020/2/101.2X3D浏览器和制作软件X3D浏览器主要可以分成两种类型:第一种是独立应用程序,即不依赖Web浏览器独立执行的应用程序,如OctagonPlayer、Xj3D等。第二种是Web浏览器的插件形式,需内嵌至浏览器内,如BSContact、FluxPlayer等。X3D制作软件有:X3D-Edit、BSEditor、VivatyStudio、SwirlX3DEditor、Wings3D、OctagaExporter、VrmlPad等。2020/2/101.3X3D文件的类型X3D的档案可以采用XML或VRML的语法,也可以使用UTF-8文本格式或二进制编码格式。不同的格式可以通过文件的后缀表示出来,一般的X3D制作软件也同时支持VRML格式的.wrl文件。编码方式扩展名MIME类型VRML.x3dvmodel/x3d+vrmlXML/X3D.x3dmodel/x3d+xml二进制.x3dbmodel/x3d+binary2020/2/102.1场景图、节点与字段场景结构图2020/2/102.2字段的数据类型X3D中字段的值,可以是布尔值、整数、浮点数、向量、字符串甚至表示图片的点阵值。数据类型解释默认值SFBool布尔值,TRUE或FALSEFALSEMFBool空集合SFColorRGB的颜色,每一个颜色分量以0.0到1.0的浮点数表示(000)MFColor空集合SFColorRGBARGBA的颜色,每一个颜色分量以0.0到1.0的浮点数表示,其中A是指不透明度(0000)MFColorRGBA空集合SFDouble双精确度的浮点数0.0MFDouble空集合SFFloat单精度的浮点数0.0MFFloat空集合SFImage二维的位图,前三个整数值分别表示位图的宽、高及颜色的分量个数,其后依左下右上的顺序接着每个pixel的颜色值。每个pixel的颜色值可以用不同分量个数表示,如果只有一个分量,则表示强度(黑白);如果二个分量,则表示强度+透明度;如果三个分量,则表示RGB;如果四个分量,则表示RGBA(000)MFImage空集合SFInt3232位的整数0MFInt32空集合SFNodeX3D中的节点NULLMFNode空集合SFRotation以四个浮点数表示的旋转量。前三个数表示旋转轴的向量,第四个数表示逆时针的旋转角度(0010)MFRotation空集合SFStringUTF-8编码的字符串空字符串MFString空集合SFTime时间值。从格林威治时间的公元1970年1月1日零晨到目前所经过的秒数,负值代表公元1970年以前-1MFTime空集合SFVec2d双精确浮点数的二维向量(00)MFVec2d空集合SFVec2f单精确浮点数的二维向量(00)MFVec2f空集合SFVec3d双精确浮点数的三维向量(000)2020/2/102.3文档头?xmlversion=1.0encoding=UTF-8?!DOCTYPEX3DPUBLICISO//Web3D//DTDX3D3.0//EN='Immersive'headcomponentname='GeoSpatial'/componentname='NURBS'level='2'/metaname='description'content='X3D文档头的示范程序代码'/metaname='filename'content='X3dHeaderPrototypeSyntaxExamples.x3d'//headScene!--场景中的节点放在这里--/Scene/X3D2020/2/102.4注释和保留字在编写X3D代码时,为了使代码结构合理、清晰、具有层次感,经常需要在代码重添加注释信息。!--这是一个注释--2020/2/102.5X3D文档结构有些节点可以包含子节点,因而产生父节点子节点的关系,但这样的关系并不是可以任意建立的。例如,Shape(形状)节点可以包含一个Box(立方体)节点以表示其几何形状:ShapeBox//Shape2020/2/102.6节点复用(DEF与USE)在X3D场景中往往有多个相同属性的节点出现,为了不重复添加节点属性,X3D中的节点属性窗口中提供了DEF和USE两个属性可以实现节点属性的复用。只需要使用DEF语法命名第一次出现的节点,再以USE语法使用该命名的节点,并不需要每一个节点都重新定义一遍。BoxDEF=boxsize=101010/BoxUSE=box/2020/2/103.1X3D的编辑器--X3D-EditX3D-Edit是图形化Extensible3D(X3D)文件的开源编辑器。它支持X3D和VRML格式,它基于XML编辑器Xeena,并且在JAVA平台上运行。在编辑VRML或X3D场景图文件时,X3D-Edit可以提供简化的无错的创作和编辑方式。X3D-Edit通过XML文件定制了上下文相关的工具提示,提供了每个节点和属性的概要,以方便作者对场景图的创作和编辑。2020/2/103.2X3D-Edit最基本的安装和配置安装和配置步骤如下:1.安装VRML/X3D浏览器,本书使用BSContact7.2作为Web浏览器插件。2.安装Java虚拟机或JavaSDK()文件。3.下载X3D-edit。并安装。我们将使用X3D-Edit进行X3D的设计和应用。2020/2/103.3创建一个新的X3D文件1.运行X3D-Edit,出现如图所示的界面。2020/2/103.4修改head节点下的内容head是X3D的第一个节点,放在场景节点的开头。它对应于HTML中的head标记。headmetacontent='MyfirstX3D'name='title'/metacontent='MyfirstX3D'name='description'/metacontent='BIFT'name='creator'/metacontent='1'name='version'//head2020/2/104.1Shape及外观材质节点在X3D文档中,Scene是X3D场景图的根节点,所有的场景节点都应添加到该节点下,并且在每个文件里只允许有一个Scene根节点。ShapeDEF=USE=containerField=containerFieldclass=/Shape2020/2/104.1Shape及外观材质节点Shape、Appearance和Material三个节点可以搭建X3D显示三维几何体的基本框架,常用的代码编码方式如下?xmlversion=1.0encoding=UTF-8?X3Dprofile='Immersive'SceneShapeAppearanceMaterialdiffuseColor='100'//Appearance……几何体节点/Shape/Scene/X3D2020/2/104.2文本节点(Text)Text是一个用于文本显示的几何节点,Text节点的使用语法为:TextDEF=USE=length=maxExtent=0string=containerField=geometryclass=/Text2020/2/104.2文本节点(Text)【例5-1】显示文字信息,代码如下?xmlversion=1.0encoding=UTF-8?X3Dprofile='Immersive'SceneShapeTextlength=208string='HelloWord!fromBIFT'FontStylestyle='BOLDITALIC'//Text/Shape/Scene/X3D2020/2/104.32D图形的创建【例5-2】显示四个像素点?xmlversion=1.0encoding=UTF-8?X3Dprofile='Immersive'ShapePointSetCoordinatepoint=-320,320,-3-20,3-20/Colorcolor=//PointSet/Shape/Scene/X3D2020/2/104.32D图形的创建【例5-3】显示4个不同颜色点的像素点。?xmlversion=1.0encoding=UTF-8?X3Dprofile='Immersive'ShapePointSetCoordinatepoint=-320,320,-3-20,3-20/Colorcolor=111,100,010,001//PointSet/Shape/Scene/X3D2020/2/104.4基本3D造型X3D提供了立方体(Box)、圆柱(Cylinder)、圆锥(Cone)、球体(Sphere)等基本3D造型节点。2020/2/104.4基本3D造型【例5-6】定义一个长为2,宽和高均为1的立方体。?xmlversion=1.0encoding=utf-8?!--!DOCTYPEX3DPUBLIC:///=211/AppearanceMaterialdiffuseColor=110//Appearance/Shape/Scene/X3D2020/2/105移动、旋转和缩放在X3D场景空间中,每一个造型都有其空间坐标,通过修改空间坐标系就可以使该造型在场景空间中移动、旋转和缩放等。平移使用Transform节点的Translation属性。旋转使用Transform节点的Rotation属性。缩放使用Transform节点的Scale属性。2020/2/106背景环境的设计背景环境主要讲两个节点,即Background背景节点和Fog雾节点。Background节点使用六张静态图片构成X3D世界中的背景,此背景节点用来表示彩色的背景以模拟地表及天空,也是放在场景中所有几何对象与地表天空之间的背景材质、或全景画背景。Fog节点将对象与color域指定的色彩相混合而营造出一种类似现实环境中的雾的大气效果2020/2/107视点和导航在X3D场景空间中,为了能够让浏览者方便地控制自己的观察位置和角度,X3D提供了视点节点Viewpoint。同时为了能以不同方式来浏览,X3D提供了NavigationInfo导航节点。Viewpoint节点指明了一个X3D场景空间中的观察位置和视角方向。NavigationInfo节点用来指定场景的观看方式和替身的物理特征。2020/2/107视点和导航2020/2/108光源