您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > chp6虚拟现实建模语言
第六章虚拟现实建模语言(VRML)95第六章虚拟现实建模语言(VRML)VRML(VirtualRealityMakeupLanguage)是描述虚拟环境中场景的一种标准,它定义了三维应用系统中常用的语言描述,如层次变换、光源、视点、几何造型、动画、材质、雾化和纹理映射等,并具有简单的行为特征描述功能。VRML(虚拟现实建模语言)是一个开放的、可扩展的、工业标准的景象描述语言;VRML是一种描述面向WEB、面向对象的三维造型语言,解释性的语言,不仅支持数据和过程的三维显示,而且能使用户走进视、听效果逼真的虚拟世界。设计VRML的一个主要目的是保证它成为多个虚拟现实系统或其组成部分有效的三维文件交换格式,并且能运行在网络的不同计算机上。VRML类似于HTML(超文本标记语言),趋向发展成为一种单一的、多平台的用于发布网上三维WEB页面的语言。VRML提供了一种将三维、二维文字和多媒体集成为一个混合模型的技术,与的功能结合起来,可以开发新的交互应用。在将来,三维模式会成为主要的用户界面形式。VRML主要具有以下功能:存在感、多感知性、交互性、动态显示、立体感、立体声、动态显示等。6.1VRML的发展1994年,在瑞士日内瓦举行的第一届国际互联网大会上,一些与会者提出为创建三维网络的界面,必须有一种通用的描述性语言,用于在上的超级链接,类似于超文本描述语言(HTML),于是诞生了虚拟现实标识语言(VirtualRealityMakeupLanguage)。很快,它又被改称为虚拟现实造型语言(VirtualRealityModelingLanguage,VRML),因为这个名称更能反映它的目的。由于VRML将要在网络上跨平台传输,所以需要为它定义一种文件格式,在经过一番选择后,SiliconGraphics公司(SGI)所开发的OpenInventor软件的开放式三维文件格式被选定作为VRML的文件格式。1995年,VRML1.0版本正式推出,1996年,在对1.0版本进行重大改进的基础上推出了2.0版本,其中添加了场景交互、多媒体支持,碰撞检测等功能。1997年,经过标准组织的评估后,VRML2.0成为国际标准,并改称VRML97。当前,研究人员已经开发出了许多基于VRML的实验或实用系统,如远程教育、建筑物的漫游、医学实验演示和虚拟剧场等等。在一些传统的协同设计领域,也有人将VRML引入到了其中,借助于VRML提供的良好的交互性和真实性,使得在协同工作中,各开发者之间的交流变得很直观自然。6.2VRML编程基础VRML是一种标记语言,使用VRML编写的文档称为VRML文档(或VRML程序),其通常的扩展名为.wrl,它是一种文本格式的文件,可以用文本编辑器打开编辑。VRML也支持二进制文件格式,后缀为.wrz。VRML的访问方式是基于客户/服务器模式,其中服务器提供VRML文件及支持资源,客户通过网络下载文件,并通过本地平台上的VRML浏览器交互式访问该文件描述的虚拟境界(VirtualWorld),因为浏览器是本地平台提供的,从而实现了和硬件平台的无关性。VRML以节点为基本元素来描述虚拟世界。众多的节点构成了VRML场景(Scenegraph)。构建VRML场景一般使用可视化编辑器来建模,使用专门的建模工具避免了直接使用文本建模的一些问题,可以生成复杂场景,并且使用起来相当方便,常用的建模工具有CosmoWorlds、X3dEdit.exe、VRMLPad、ParaGraphInternational公司的Internet3DSpaceBuilder(简称ISB)等。现在的VRML语言编辑器对词法,语法错误的处理非常弱。除了工具建模,还可以把常见的图形格式转换成VRML场景。在Web网上,第六章虚拟现实建模语言(VRML)96存在着大量的各种各样的三维文件格式,转换工具的作用就是在这些文件格式之间进行转换。常用的三维建模软件3DSMAX就可以导出WRL文件。需要注意的是,所有的转换程序都有局限性,例如在转换特定文件中的光照和纹理贴图时就会失败。解释VRML文件并构造三维模型的软件称为VRML浏览器。VRML浏览器通常是以插件的形式附着在Web浏览器中,如IE、NetScape等Web浏览器都有自带的VRML浏览器,但这些浏览器的功能有限,对VRML的支持不很充分。一些公司开发的VRML浏览器则通常功能强大,如SGI公司的CosmoPlayer、SONY的CommunityPlaceBrower等等。下面是一个VRML的简单例子,程序构造了一个半径为1个单位被照亮的三维红球。程序例6.2.1sphere.wrl#VRMLV2.0utf8Shape{appearanceAppearance{materialMaterial{emissiveColor100}}geometrySphere{radius1}}图6.2-1sphere.wrl结合程序说明以下VRML的文件结构:VRML的MIME类型定义为x-world/x-vrml。它用来定义Internet上传送的文件内容类型的软件标准。一个完整的VRML文件由五部分组成:文件头、脚本、场景图、原型和事件路由。并不是所有的文件都包括这些要素,唯一必须的是VRML文件头。VRML2.0标准的文件头为#VRMLV2.0utf8,每个VRML2.0文件必须以此作为开始。“utf8”是国际标准组织确认的一个标准,在VRML文本节点中引导语言字符。VRML是区分大小写字母的。以£或#开头的文本行是注释行,直到下一个回车符为止,它将被浏览器解释所忽略。Shape是VRML的一个节点类型(Node),它有两个域(Field):appearance和geometry,分别用于定第六章虚拟现实建模语言(VRML)97义物体的外观属性(如材质、纹理)和几何属性。appearance域后紧跟的Appearance也是VRML的一个节点,它的内容就是该物体的外观属性。Appearance可以定义material(材质)、texture(纹理)和textureTransform(纹理映射)三种属性。Material节点紧跟在material域后面,其内容就是物体的材质属性。emissiveColor100表示球的表面材质反射100%的红光、0%的绿光和0%的蓝光。geometry域后的Sphere节点表示物体是一个球体,radius1表示球体的半径是1个单位。一个VRML文件包含一个而且是唯一的场景图,此图在最高级由一个VRML节点定义,这个最高级很可能是一组带有许多子节点的节点。节点的实例可以赋予一个名字,以允许复制或者引用它们。VRML是一个基于对象的语言,它以节点描述3D空间对象。节点一般包括:节点的类型(必需)、一对大括号(必需),括号中的一定数目描述节点属性的域(可选)和域值。括号将节点的域信息组织在一起,组织在括号中的域是属于节点的,由节点及其相关域定义的造型或属性在空间中被视为一个整体。一个节点可以与C++或Java中的对象相对应,你可以把节点视为派生类型Box、Sphere、Sound、Spotlight等定义的基类。每个对象节点都有共同的属性,如类型名称、默认域值和收发设置域信息的能力(VRML2.0中的事件)。当你定义一个派生类时,你可以仅用默认值,就象在C++中使用一样。VRML的一个好处就是当你定义一个节点时,你总是包含一个可视的、有形的结果。VRML提供了许多预定义的节点,例如从你的场景元素继承特性生成的对象库,它还可以使你通过原型派生和使用自身的节点。在VRML场景中通过把节点分组生成场景图来组织虚拟世界的布局和功能。场景图有点象树根,树干是最高结构层,子群组成树枝,节点在下面。在场景图分层结构中,子节点从它的每个父节点继承如位置、方向等特性。为了说明问题,程序例6.2.2的结构如图6.2-2所示,显示了VRML场景图中节点的层次结构。在程序例中,DEF是命名特定节点的关键词。程序例6.2.2scene.wrl#VRMLV2.0utf8DEFTRUNKTransform{translation0.01.00.0rotation0.01.00.00.39children[DEFBALLTransform{translation3.00.00.0children[Shape{appearanceAppearance{materialMaterial{emissiveColor100}}geometrySphere{radius1}}]}DEFCUBEAnchor{url[]children[Shape{第六章虚拟现实建模语言(VRML)98geometryBox{size122}}]}]}图6.2-2scene.wrl的场景等级结构节点的域(field)是参数或者关键字,它们的值描述了节点对象的属性。域可以分为两类:(1)属性域,它用于对所要定义的节点定义属性,如:Spotlight节点的AmbientIntensity或SphereRadius;(2)“连接”域,它用于把属性值传递给另外的节点。如Shape节点包括两个连接域的例子:geometry域,它接受一个Geometry节点的参数和Sphere、Box或Cone;appearance域,它接受Appearance节点的描述。使用连接域的节点可以使你在运行时使用事件触发器选择它的位置,例如传感器和脚本。其它的域是私有的,其值只能在开始时设定。6.3VRML的度量单位VRML的度量单位是标准化了的,角度以弧度表示,长度单位则是米表示。例如你定义一个长、宽、高均为一个单位的盒子,它代表了一个边长为1米的立方体。如果立方体放在地板上,你把它旋转45度角,从一个顶点观察它,那么在Y轴上它转动了л/4或0.785弧度。6.4坐标系统和显示在VRML的场景中设置物体需要有明确的坐标,在同一个场景中,有一个统一的坐标系。这个坐标系是一个右手坐标系,在初始时(即观察者没有移动位置和改变视角),该坐标系的X轴为沿屏幕水平向右,Y轴为沿屏幕垂直向上,Z轴为从屏幕指向用户。VRML的geometry节点对象参照这个坐标系,使用三维坐标系统描述点的位置。在初始状态下,VRML的geometry节点(除了文本)都被定位在空间坐标(0,0,0)点上,且高度以Y轴正方向表示(Text节点从缺省位置左端开始文本串,沿X轴正方向放置每个连续的文字)。VRML提供了称为Primitives的许多种基节点对象,包括Box、Sphere、Cone和Cylinder,可以使用它们构造三维场景。这些Primitives只能提供一些基本的几何体,如果想构造更复杂的三维模型,如一第六章虚拟现实建模语言(VRML)99个人脸的多边形面片,则需要利用IndexFaceSet节点,用多边形的数据去填充该节点内的相应域。IndexFaceSet包含的每个顶点都由子节点Coordinate中的三维点列描述,而子节点CoordIndex中则列出了每个多边形的顶点在点列中的索引值,各个多边形的索引集之间用-1作为间隔。多边形的法线方向与所给的顶点顺序符合右手法则,即按照该多边形在CoordIndex中列出的顺序弯曲右手手指,拇指的方向就是多边形的法线方向。如果将IndexdFaceSet的ccw(counterclockwise)域设置为FALSE(默认值为TRUE),则该节点内的所有多边形的法线方向都将反转。6.5线性变换在VRML中,几何元素的线性变换是通过Transform节点控制的,Transform是一个基本结构,它是一个常见的群组节点(Groupingnode),可以作许多物体的容器。然而,Transform提供了更强大的功能,在计算机图形中,“运动”总是和变换(transformation)紧密相连的—无论是缩放比例、旋转或是平移。VRML2.0中,Transform节点将其定义的变换施加于物体。它的各域的缺省值定
本文标题:chp6虚拟现实建模语言
链接地址:https://www.777doc.com/doc-3881443 .html