虚拟城市的开发技术探讨
通过VRML嵌入程序,可设置以下辅助工具:
Anchor:可将某一实体作为热点,当被点击时,取出网上所指定的文件。若为VRML场景文件,则该场景被下载显示。若为其他类型文件,由浏览器决定如何处理;
TouchSensor:对从指定设备的输入产生相应的事件,这些事件表示用户是否指向特定几何体,同时也表示用户何时何处按下定位设备的按钮;
ProxSensor:接近感知器,指定当用户进入、离开或在立方体的区域内移动时产生的事件;
TimeSensor:在时间变化是发出事件,可用来控制动画,也可用于某一时刻进行某项活动,或于某一时间间隔中产生事件;
NavInfo:描述有关观察者和观察模式的物理特性;
Background:设定场景的背景;
Fog:设置雾化的效果;
Sound:设定声音片段的有效范围,以产生随距离改变的音响效果;
Billboard:是某一对象随用户一起旋转,以使之始终面向用户;
LOD:允许浏览器在物体表示的不
同层次细节间自动切换;
Inline:可在文件中引入外部文件的场景,避免重复制作。
通过以上辅助工具,就可制作出虚拟城市场景及其交互和查询功能。
2.3.若干开发技巧介绍
2.3.1 减少文件大小的方法
(1) 使用实例:对于在场景中多次使用的对象,可在该对象首次使用时用DEF给物体命名,以后仅需通过名字即可引用该物体。
(2) 使用原型:原型物体是指那些使用频繁且改动不大的物体。使用它可减少文件的大小。由于使用了DEF/USE方法,物体一旦定义,只要指定发生变化的公共接口即可。另外,原型显示出场景层次中哪一部分可修改,浏览器可自由地优化那些不修改的部分。
(3) 压缩文件:在发布文件前,使用gzip工具压缩VRML文件和相关的HTML文件,大约可是文件减小10~100倍。
2.3.2 提高渲染速度的技巧
(1) 简化场景:简化场景有以下方法:
·减少多边形的数目,这可极大地提高执行的性能;
·使用纹理代替多边形造型,既可美化场景又可提高性能;
·使用灰度图的纹理;
·尽量少用光源,这将有效地提高渲染的速度;
·使用布告板节点,此节点允许在场景中使用二维图象来模拟三维造型并旋转,从而始终面对观察者。此法既减小了文件又不影响真实效果,可用来制作树木、电线杆、路牌、消防栓等辅助性对象;
(2)场景分割:将大的场景分为多个相对独立的小场景,通过Anchor节点为场景中逻辑上分离的部分建立连接关系;
(3)自适应LOD节点:若在LOD的range域中未明确指定具体值,浏览器会在给定时刻决定哪一层物体需要显示。该节点允许根据硬件平台的能力调整场景的细节程度。在建立一条街道时,由于街道两边有许多精细的建筑物,要对它们进行实时渲染是不可能的,但又不能不可见,仅需让用户能以一定的速度前进即可。在此,可为每个建筑物建立两个LOD节点,一个是没有明确范围的外部LOD,另一个是具有near和far范围的内部LOD节点。内部节点能按建筑物与摄像机的距离调整层次,外部"自适应LOD"节点允许浏览器调整必要的多个建筑物以赶上场景的动态变化。
(4) 碰撞检测要花费大量的处理时间,为提高对复杂物体的碰撞检测速度,可在Collision节点的proxy(替身)域指定某一更为简单的几何体作为该形体的替身,它与被替代的原形体占用大致相同的空间。这样,可大大减少检测时间。
3. 结束语
以上介绍了虚拟城市的基本原理和制作技巧,对于进行其他领域的虚拟现实应用制作同样有效,仅为场景中实体的不同。用VRML制作虚拟现实入门容易,但要达到很高的视觉效果和运行速度并非易事,须对VRML和图形学进行深入了解才可胜任。我们用它制作了虚拟校园,其运行效果较为满意。可以相信,随着VRML的不断发展,我们将可用它制作出功能更加强大的虚拟现实应用。
参考文献:
[1] 黄铁军,柳健. VRML国际标准与应用指南. 电子工业出版社
[2] 施演,周葆芳,赵志勇. VRML2.0使用速成. 清华大学出版社
《虚拟城市的开发技术探讨(第2页)》