我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>百科>文献资料>文献论文

可用于虚拟建筑环境的Web3D技术初探-2

文章来源:网络收集整理 作者:佚名 发布时间:2011年05月13日 点击数: 字号:

本章参考文献:
[1]黄铁军,柳建. VRML国际标准与应用指南[M].北京:电子工业出版社,1999.4-6.
[2]石教英. 虚拟环境(VE)技术及其应用[A]. 全国第一届虚拟环境研讨会论文集[C],1994.
[3]杨宝民.朱一宁. 分布式虚拟现实技术及其应用[M]. 北京:科学技术出版社,2000. 1-10.
[4]Mark Pesce. History of Virtual Reality Modeling Language.[OL]. http:// webspace.sgi.com.
[5]It Just Works Technology for Online 3D Professionals[OL]. http://www.eyematic.com/ products_shout3d.html.
[6]Cult3d technical white paper.[OL]. http:// www.cult3d.com/ cult3d/ c3d_ tech_white.pdf.
[7]3DML[OL]. http://www. Flatlang.com.
[8]石教英. 虚拟现实基础及使用算法.北京:科学技术出版社,2002.162-168.
[9]About the Web3D Consortium[OL]. http://www.web3d.org/fs_aboutus.htm.
[10]Cortona for Internet Explorer[OL]. http://www.parallelgraphics.com/products/cortona/ download/.
[11]邹经宇.薛玉彩. 基于城市虚拟三维环境的城市公共空间视觉延续性的比较研究[A]. 第二届"虚拟现实与地理学"学术研讨会学术论文集[C].2002.
[12]香港大学建筑系网页[OL]. http://www.arch.hku.hk/,2002-06-21
[13]朱庆等.三维城市模型与数码城市GIS[A]. 第二届"虚拟现实与地理学"学术研讨会学术论文集[C].2002.
[14]东南大学建筑系网页[OL]. http://www.seu.edu.cn/arch.seu.edu.cn,2002-7-23.
[15]A. Hei nonen, S. Pulkkinen, and I. Rakkolainen. An Information Database for VRML Cities[OL]. http://www.uta.fi/hyper/projektit/tred/.
[16]Living and Building interactive[OL]. http://www.navigram.com/.
[17]External authoring interface[DB-OL]. http://www.web3d.org /technicalinfo/specifications/ ISO_IEC_14772-2/index.html.
[18]Cosmo Player[OL] .http://www.cosmo.com.
[19]About Blaxxun Contact[OL]. http:// developer.blaxxun.com/ download/ index.html.
[20]Cortona VRML Client the plug-in for MS Internet Explorer and Netscape Navigator[OL]. http://www.parallelgraphics.com/products/browsers/.

本章注释:
①VRML的名称是有HP公司的欧洲实验室的Rava Raggett提出的,Rava Raggett是万维网的早期开发者之一.

注:文中一些专业名词常用者采用中文表达,同时也给出英文原文,另有一些专业名词笔者未做翻译;以下各章同.

第二章 VRML虚拟现实建模语言及其在虚拟建筑环境中的应用分析
VRML(Virtual Reality Modeling Language)是虚拟现实建模语言的缩写形式,它定义了一种描述互连网上交互式三维多媒体的标准文件格式 [1]①.VRML定义了三维应用系统中常用的语言描述规范,如层次变换,光源,视点,几何体,动画,雾,材料特性和纹理映射等,VRML还定义了一些简单的行为特征的描述功能.

  VRML与虚拟现实要求的三维图像质量还有很大距离,VRML不强求虚拟现实要求的逼真性和沉浸感,实际上也是目前网络的传输能力和大多数Internet客户端的硬件水平决定的.VRML作为一种虚拟环境的描述语言独立存在,VRML根据场景规模的要求具有很强的伸缩性,以VRML为基础可以建立不同级别的应用,这一特点使得VRML在电子商务,教育,工程,交互式娱乐等多个领域受到广泛的关注.

2.1 VRML基本特性

  VRML的访问方式是基于客户机/服务器模式的,其中服务器提供VRML文件及VRML文件引用的其它资源(图像,视频,音频),客户端通过网络将VRML文件及其引用的资源下载到本地机,通过本地平台上的VRML浏览器交互式的访问该文件描述的虚拟场景.由于浏览器是本地平台提供的,从而实现了VRML的平台无关性.

  VRML文件可以引用其它多种标准格式文件,VRML具有将二维图像,三维形体,文字和多媒体影音集成为统一的整体的能力.当把这些媒体和脚本描述语言(Scripting Language)以及Internet的功能结合在一起时,可以创建基于Internet的丰富多彩的交互性三维虚拟世界.
此外,VRML试图建立一种分布式场景.VRML提供多种机制使VRML虚拟场景可以跨越互联网.VRML可以利用外部原型EXTERNPROTO从互联网上获取新的类型,这是实现VRML扩充能力的基本机制.通过内联节点Inline可以引用互联网上其它的VRML文件,并将其合并到当前场景中,从而组合成更大的虚拟场景.Anchor节点提供的超链接功能可以使得虚拟场景象HTML页面一样相互编织在一起形成网状的复杂结构.传统的VR中使用的实时3D渲染引擎在VRML上得到了很好的体现,这也是VRML不同于三维建模和动画的特点,后者需要预先渲染,因而不具有交互性.
VRML提供多种机制实现三维虚拟场景有限的动态和交互性能.

2.2 VRML的基本概念与体系结构

2.2.1 节点(Node)

  VRML描述的虚拟场景由多种场景对象构成,对象及其属性用节点(node)描述,节点是VRML文件的基本单元.
节点因其类型的不同具有不同的公共接口声明,公共接口声明一般包括类型名(type name),域(fields),事件(events)及名称(name,节点可

被命名作为该节点对象的引用).

  节点可以通过DEF语句命名,一个经过命名的节点可以通过USE语句被引用,类似面向对象的封装机制.VRML的每个节点都属于特定的某种类型,如Sphere(球体),Color(颜色),Group(组) ,Sound(声音),PointLight(点光源)等.VRML97定义了54种基本节点类型(内部节点类型),此外,用户可以通过原型(prototype)定义自己的节点类型.
VRML的每一个节点都有零个或多个域(field),域值决定了该种节点类型的对象在虚拟场景中的状态.

  节点类型大都具有接收和发送的事件(Event)的能力,其中事件入口是节点接收事件的逻辑接收器,从事件入口进入的事件成为入事件,入事件将导致节点状态的改变.事件的出口是节点产生事件的逻辑输出端,从事件出口送出的事件称为出事件.

  外露域(exposedField)是域,入事件,和出事件的统一体,它既可作为域确定节点的状态,又作为事件入口接收事件,还能把变动的值送往其它节点.

下面一个Anchor节点的接口声明:
Anchor{
eventIn MFNode addChildren
eventIn MFNode removeChildren
exposedField MFNode children []
exposedField SFString description ""
exposedField MFString parameter []
exposedField MFString url []
field SFVec3f bboxCenter 0 0 0 # (-,)
field SFVec3f bboxSize -1 -1 -1 # (0,) or -1,-1,-1
}
域和事件本身也有类型.VRML97定义了20种基本数据类型.如SFBool(单值布尔型),SFNode,MFNode,SFString等.

2.2.2 场景图(Scene Graph)

  VRML的场景中的节点对象是按一定的规则组织在一起的,节点按照一定的规则构成场景图(scene graph).场景图的构成有两类,第一类是视觉,听觉对象按照层次体系组织起来,反映了虚拟场景的空间结构.另一类是事件和路由(route)机制,形成路由图(route graph),确定虚拟场景的动态变化.

  场景图的结构称为有向无环图(DAG Directed Acyclic Graph).
VRML某些节点包含SFNode或MFNode域,从而可以包含其它类型的节点对象.在场景图的表示中,若节点对象A到B有一条弧,则意味着节点A有一个SFNode域或MFNode,此域值直接包含节点B.节点不能包含自身(Acyclic),既形成环形结构.

  节点之间的层次关系分两种.第一类是如上所述的根据节点语义定义的通过特定域包含特定节点而形成的层次关系,例如Shape节点的appearance和geometry域都是SFNode类型,Shape节点和appearance以及Shape和geometry节点之间就形成上下层的关系,同样appearance和Material节点,ImageTexture节点,TextureTransform节点之间也形成上下层的关系.

  另一类层次关系是通过组节点(Grouping Node) 把一组子节点组织起来,从而形成父子关系.如表示一虚拟人替身的几何节点可以是一个组节点,它又可以由头节点,各四肢节点,躯干节点组成.组节点有Anchor,Billboard,Group,Inline,LOD,Transform等8种,它们都有一个MFNode类型的域用来包含一组子节点.

  如Group节点的children域,它是一个MFNode类型的域,用来包含子节点,利用组节点可以把三维虚拟场景组织成更为有序的结构.

Group{
eventIn MFNode addChildren
eventIn MFNode removeChildren
exposedField MFNode children []
field SFVec3f bboxCenter 0 0 0 #(-,)
field SFVec3f bboxSize -1 -1 -1 #(0,) or -1,-1,-1
}
2.2.3 虚拟场景的坐标系及变换层次

  坐标系是为了控制场景对象在场景中的位置,VRML场景中的所有对象都隐含的拥有自己的坐标系.其中根节点所在的坐标系称为世界坐标系(World Coordinate System),VRML也支持局部坐标系(Local Coordinate System).一个局部坐标系可以嵌套在上一层坐标系中,不同坐标系之间存在着变换关系(通过Transform及Billboard节点).
在虚拟场景中一个或多个特定空间位置的根节点与子节点构成变换层次关系(Transformation hierarchy),坐标变换随变换层次不断积累形成复合变换.凡是每一个Transform节点之内的变换,其作用范围只达到并包括其自身包含的范围,一旦超出了Transform的包含范围,变换将被取消.

图2-1表示了一个带有嵌套Transform的VRML文件,用虚线框画出嵌套层.在给定虚线框内的Transform只对其包含的节点起作用.
 


 

图2-1 Transform节点作用范围


如图2-1,b.wrl受Transform1及Transform2双重作用,而a.wrl只受Transform1的作用.变换的次序是,首先对物体本身的Transform进行变换,这种变换基于局部坐标系.然后将变换施加与上一层节点,如果还有上一层节点.依次类推,一直到最顶层,最终的变换结果将得出物体在世界坐标中的正确位置.
差补器(Interpolator)节点,导航(NavigationInfo),脚本(Script),时间检测器(TimeSensor)和场景信息(WorldInfo)节点则变换层次关系的影响.

2.3 VRML的事件体系

  RML的交互和动态性能是通过VRML的事件体系实现的.如2.2节所述,VRML的节点由域和事件构成,其中域的取值决定了节点的状态,从而各个节点综合决定了整个虚拟场景的状态,事件则为节点提供了接受外界消息和向其它节点发送消息的能力.节点通过事

件入口(eventIn)接收事件,通过事件出口(eventOut)发送事件,一个节点的事件出口和另一个节点的事件入口之间的用于传递事件的通路称为路由(route),通过路由连接起来的节点构成事件体系.
 

图2-2 输出事件与输入事件

  事件的产生可以有多种原因,如场景的变化,用户的交互以及时间的变化.检测器节点(sensor)可以检测到这些变化并发出初始事件.VRML定义了9种检测器节点类型,其中4种检测环境变化,称为环境检测器,另外5种检测用户外部设备(如鼠标)的动作,称为设备检测器.
事件一旦产生,将按时间顺序沿路由向目标节点发送,并被目标节点处理,这种处理可能改变节点状态,或是产生新的事件,或是修改场景图的结构.VRML处理事件的方式由其节点自身定义,其中插补器节点(Interpolator)是一种特殊的事件处理器,它们可以根据给定的关键帧值通过特定的插值算法输出用于关键帧动画的值序列.

  VRML的脚本(Script)节点用于定义复杂的事件,Script节点可以包含利用脚本描述语言(ECMAScript或Java经编译的.class文件)编写的函数.Script节点收到事件后将执行特定的函数,函数能够通过事件路由机制发送事件或是向Script节点指向的节点发送事件.脚本还可以动态的增加或删除路由,从而修改事件路由的拓扑结构.

图2-3描述的是VRML虚拟场景中的事件体系的执行机制和事件流程。

图2-3 场景图事件体系的概念执行模型[2]

2.4 简单的VRML场景实例

以下是一个简单的VRML场景的例子,借以说明一个VRML文件的一些编写规范.
 

Ex2-01:
#VRML V2.0 utf8
Transform {
children [
NavigationInfo { headlight FALSE } # You can add your own light
DirectionalLight { # First child
direction 0 0 -1 # Light illuminating the scene
}
Transform { # Second child - a red sphere
translation 3 0 1
children [
Shape {
geometry Sphere { radius 2.3 }
appearance Appearance {
material Material { diffuseColor 1 0 0 } # Red
}
}
]
}
Transform { # Third child - a blue box
translation -2.4 .2 1
rotation 0 1 1 .9
children [
Shape {
geometry Box {}
appearance Appearance {
material Material { diffuseColor 0 0 1 } # Blue
}
}
]
}
] # end of children for world
}


#VRML V2.0 utf8

  VRML的文件头,表明该文件是VRML2.0版本,VRML97采用同样版本声明,utf8[3]②表示此文件采用utf8的编码方案.
首先是一个Group(组节点),组节点的花括号之内的所有内容将被视为一个整体,利用组节点可以把虚拟场景组织成条理清晰的树形分枝结构.

  Children是Group的域,在Children后的方括号内定义的是Group节点的所有子对象.

  场景中定义了一个红色的球体和一个蓝色的立方体,它们包含在Shape节点内,而每个Shape节点有在各自的Transform中.
Transform节点除实现平移,旋转和缩放变换以外,其作用和Group节点一样起到将不同节点分组的作用.Transform节点的Translation域节点用于定义Transform节点所在坐标系相对于上层坐标系的平移变换.
Shape节点的appearance是一个Appearance节点,此Appearance节点的meterial域则定义了一个Material节点,Material有包含diffuseColor域.

  Shape节点的geometry则定义了几何体,VRML包括多种几何造型节点用于建立复杂的三维虚拟场景.
Shape {
geometry Box {}
appearance Appearance {
material Material { diffuseColor 0 0 1 } # Blue
}


2.5 VRML用于虚拟建筑环境

  虚拟建筑环境与普通的三维场景相比,具有其特殊性,在场景的制作过程中针对不同问题应采取不同的策略.虚拟建筑环境尺度大,内容复杂,在场景制作过程中应在保证一定视觉效果的同时尽可能简化模型.

2.5.1 VRML场景中的绿化植物造型

  建筑虚拟场景中经常存在着大量的植物,如花丛,树木等.同建筑物等可以准确定义的物体相比,自然景物要复杂得多.比如说,一棵树上有成千上万各种各样不同形状不同方向的枝条和叶子.要用常用的计算机图形造型手段来描述这样的场景,也就是说要用各种多边形曲面来描述这些自然景物是不可能的.

  关于植物造型的问题有过大量的研究,提出了很多植物绘制算法和工具,如z-buffer 阴影生成算法和光线跟踪算法.对于高度复杂的自然场景,则采用纹元(texel)和体纹理映射的方法[4].基于复杂的几何模型生成的植物造型在VRML场景中显然是不适用的,VRML支持的几何造型类型是相当有限的,一个植物的复杂几何模型被导入到VRML场景中将被转化为IndexFaceSet类型数据,将包含大量的顶点数据,如果场景中存在大量的树木造型,将使VRML文件变的很大,对于有限的网络传输能力和用户计算机的计算能力来说显然是不现实的.

  为了有效的减少数据量,一般采用一个三维面附以树木的纹理贴图代替三维几何造型的方法,VRML支持GIF透明贴图,这样就可以有效的勾勒出一个树木的实际效果,当用户漫游场景时,由于观察者视点的变化,不能保证三维面法线方向与视线一致,一般可将两个或两个以上的三维面成一定的角度布置,这样就可以保证在大多数情况下获得

一个完整的树木造型效果了.

图2-4 纹理贴图代替几何造型的树示例


  另一种方法是采用BillBoard,Billboard 节点是一种组节点,它可以调整自己的局部坐标系使自己的Z轴指向取景器.

2.5.2 在场景中采用层次细节模型(LOD)

  虚拟场景中为降低场景的复杂度,可利用细节层次算法(LOD)[5].LOD(Level of Detail)模型是指对同一场景或场景中的物体,使用具有不同细节的描述方法得到一组模型,供绘制时选择使用.一些复杂的形体,比如一栋建筑物,当其离观察者较远时还将全部的细节绘制出来,则会大大降低显示性能,也无必要,此种情况下可采用LOD.
LOD的基本思想是对场景的不同物体或不同部分,采用不同的细节描述,在绘制时,如果一个物体离视点比较远,或者这个物体比较小,就可以采用较粗的LOD模型绘制.反之,如果一个物体离视点比较近或物体比较大,就必须采用较精细的模型绘制.同样,场景中的运动的物体也可以采用类似的方法,运动的物体可采用较粗的模型,静止的物体采用相对精细的模型.

  VRML的LOD节点采用了简单的类似LOD的机制和方法,LOD节点为给定的对象指定多种细节层次(Level Of Detail)或复杂度,提示浏览器根据用户的距离自动选择对象的合适版本.
 

图2-5 LOD的范围值与层次细节


LOD节点的具体接口声明如下:
LOD {
exposedField MFNode level []
field SFVec3f center 0 0 0 #(-,)
field MFFloat range [] #(0,)
}
Level域包含一系列节点,分别描述不同细节层次的同一个或多个对象,这些节点按细节层次从高到低顺序排列.range域指定不同的层次切换的距离,center域是局部坐标系的一个偏移量,它指定LOD节点的中心,作为切换距离计算的参考点.
range域由一组递增的距离值构成,为了确定显示哪一个层次,系统首先将取景器位置变换到LOD的局部坐标系中,在计算取景器位置到LOD节点中心center的距离d.对于给定的d值,LOD节点通过计算步长函数L(d)来选择一个层次.
设n个距离R0,R1,R2,……,Rn-1把区间(0,+∞)分隔成n+1个子区间(0,R0),[R0,R1 ) ,……,[Rn-1,+ ∞),且设L0,L1,L2,……,Ln-1为步长函数L(d)的n个取值.对于给定距离d,层次节点L(d)定义为:
L(d) = L0 , d < R0,
= Li+1, Ri <= d < Ri+1, 其中-1 < i = Rn-1
下面是一个简单的例子,首先对一栋建筑物建立了三个不同细节的模型,分别存储为三个外部文件Building_L1.wrl, Building_L2.wrl, Building_L3.wrl.在观察者距建筑物在20m以内,20-60m之间以及60m以外不同情况下分别显示Building_L1, Building_L2, Building_L3三种细节层次不同的模型.
#VRML V2.0 utf8
Transform {
children [
LOD {
range [20,60]
level [
Inline{url "Building_L01.wrl"}
Inline{url "Building_L02.wrl"}
Inline{url "Building_L03.wrl"}
]
}
]

图2-6 LOD的范围值与层次细节

  如未对LOD节点的range域作明确规定,浏览器将自行选择显示不同的层次细节,即浏览器根据硬件平台的性能来调整场景渲染的复杂程度.

2.6 与场景交互

  交互性能对于虚拟建筑环境具有重要的意义.缺乏交互性的场景是不能吸引人的,因为能使人有身临其境的感觉重要的一点就是交互.一个动态的虚拟建筑场景可以大大的提高场景的真实性和趣味性.设想一个虚拟房间,用户可以交互式的打开房门,当用户走进房间虚拟的灯被打开,用户甚至亲自打开虚拟的音响听一段动人的音乐……
与虚拟的场景交互是通过一系列检测器来实现的,通过这些检测器节点,使浏览器感知用户的操作.例如一个TouchSensor节点,用来检测用户是否接触到一个虚拟物体,若被接触,TouchSensor将发出一个出事件(eventOut).
应用TouchSensor实现在场景中打开一个房门.
首先看TouchSensor的接口声明:

TouchSensor {
exposedField SFBool enabled TRUE
eventOut SFVec3f hitNormal_changed
eventOut SFVec3f hitPoint_changed
eventOut SFVec2f hitTexCoord_changed
eventOut SFBool isActive
eventOut SFBool isOver
eventOut SFTime touchTime
}

  isOver事件出口是在用户鼠标感应到被接触的三维对象时,用来引发isOver事件,该值为TRUE.反之,当鼠标离开该对象时,该值为FALSE.

  hitPoint_Changed事件出口是在当用户在被感应的三维对象上点击时,用来发送该值.其值表示对象上点的坐标.

  hitNormal_Changed事件出口是在当用户在被感应的三维对象上点击时,用来发送该值.其值表示对象上点的表面法向量.

  hitTexCoord_Changed事件出口是在当用户在被感应的三维对象上点击时,用来发送该值.其值表示对象上点纹理坐标.可以在纹理帖图上划分多个区域,类似HTML网页,在图片的多个区域设置不同的交互.
  isActive事件出口是在用户鼠标点击三维对象时,用来激活检测器,该域值由FALSE变为TRUE;反之,当检测器失效,该值变为FALSE.
TouchTime事件出口是当isOver为TRUE,而isActive为FALSE时,发送系统当前时间.
  以下在门Door上定义了一个TouchSensor检测器,当用户鼠

标接触到了门时,光标变化提示用户接触到了门,点击鼠标门将被打开.以下是实现这一功能的代码片段.

 

DEF Door Transform {
translation
children [
DEF Door_TIMER TimeSensor {loop FALSE cycleInterval 40}
DEF Door_POS_INTERP PositionInterpolator {
key[]
keyValue[]
}
DEF DOOR_ROT_INTERP OrientationInterpolator {
key[]
keyValue[]
}
Transform {
translation
children [
Shape {
appearance Appearance {}
geometry Box {size } #门的几何造型定义…
}
]
}
]
}

DEF TouchSensor_SENSOR TouchSensor {enabled TRUE }
ROUTE Door_TIMER.fraction_changed TO Door_POS_INTERP.set_fraction
ROUTE Door_POS_INTERP.value_changed TO Door.translation
ROUTE Door_TIMER.fraction_changed TO DOOR_ROT_INTERP.set_fraction
ROUTE DOOR_ROT_INTERP.value_changed TO Door.rotation
ROUTE TouchSensor_SENSOR.touchTime TO Door_TIMER.startTime

2.7 场景对象的自主行为

  以上讨论的是场景对象直接反馈用户的交互输入情况下的动态特性.实际上也可以独立于用户输入来为场景对象指定行为.
假设一个虚拟的房间墙上有一面钟或一副日历,那么钟和日历显示的时间或日期完全可以通过获取系统时间来更新,当用户"漫游"虚拟的房间时,钟的显示将是实时变化的.

  文献[6]描述了另一种对象行为,通过编程实现类似"智能代理"对象.例如一个抓住虚拟球的例子,球在不断的移动,用户试图抓住球,可以编制一个"注意力"智能代理,当球与掌心的距离小于一个给定的阈值时,球便会自动移动到用户的掌心.当用户更加熟练是,距离阈值可以减小,从而加大用户抓球的难度.相对于第一种行为,"智能代理"更加复杂,功能也更强.

  借鉴"智能代理"的概念,可以在虚拟建筑环境中建立智能对象,如一个智能导游,它可以为用户提供最佳的漫游路线.

上一页12345

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料