基于VRML的虚拟楼房漫游系统的设计与实现
2019-02-12崔林林崔卫丽
崔林林, 崔卫丽
(1.中原工学院 机电学院, 河南 郑州 450007; 2.中原工学院 计算机学院, 河南 郑州 450007)
虚拟现实(Virtual Reality,VR)技术,是一门融合了多媒体、图形图像、计算机仿真、网络技术和人工智能等多个技术分支的多学科综合技术。该技术目前在许多领域都得到了广泛应用,尤其是在建筑仿真和实时漫游等领域的应用,开创了人机交互的新局面。本文利用VRML设计开发一个虚拟楼房漫游系统,并采用改进的LOD算法提高图像渲染速度。用户不仅可以像在真实世界中一样对场景进行参观浏览,而且还能通过鼠标、键盘等输入工具对系统中的虚拟实体进行交互操作。
1 虚拟楼房漫游系统的整体架构和开发流程
为了保证虚拟楼房漫游系统在普通PC机上的稳定运行,并达到漫游者与场景对象实时交互的要求,本文对系统进行了功能模块的划分。系统包括三维场景模型构建、场景漫游控制及用户与虚拟场景的实时交互等模块。各模块在功能上相互独立,它们之间利用数据接口进行联系。虚拟漫游系统的设计架构如图1所示。
图1 虚拟漫游系统的设计架构图
虚拟楼房漫游系统的实现,重点是构建三维场景模型、实现场景漫游和人机交互功能等。系统具体的开发流程如下:
(1) 利用3ds MAX和VrmlPad等模型构造软件,依据设定比例和样式分别构建场景模型,包括建筑模型、花草树木模型等。
(2) 利用相应的接口技术,将利用3ds MAX构造的对象模型以.wrl格式文件导出,然后导入到VRML场景中,在VRML中进行纹理、灯光处理,使模型得到优化,实现场景模型的调度及虚拟漫游。
(3) 完成系统人机交互功能的程序设计,使系统对用户的操作进行实时反馈,并实现系统的碰撞检测功能。
图2 系统的具体开发流程
2 虚拟楼房漫游系统的实现
2.1 三维虚拟场景的创建
结合3ds MAX与VRML构建虚拟场景模型,采用3ds MAX实现建筑物主场景的构建,再把建好的模型导入到VRML环境中。虚拟楼房漫游系统的模型构建流程如图3所示:
图3 虚拟楼房漫游系统的模型构建流程
2.1.1 实体造型建模的原则
针对漫游系统中场景细节和浏览速度之间的矛盾,系统在设计过程中遵循“速度优先,兼顾细节”的设计原则。在保证场景浏览速度的前提下,尽可能满足实体细节显示的需求。通过USE机制对Shape节点进行重复调用简化描述文件;利用模型差值信息渐增的思想改进传统LOD算法,从而减少模型数据量;对大规模的虚拟场景进行分割调度,达到实时漫游的目的;采用删除缺省节点域值和降低浮点数值精度等方法进一步优化文件,提高场景显示速度。
2.1.2 建筑模型的建立
由于建筑模型的复杂性,不可能利用VRML编码实现,需结合3ds MAX和VRML实现场景建模。对比3ds MAX环境下的几种基本几何体的构建方法,并考虑3ds MAX导出生成的虚拟文件时可能因VRML程序坐标记录太多而导致虚拟文件过大,进而影响到虚拟漫游速度的问题,本系统的场景建模主要采用line命令结合extrude命令实现。比如楼梯模型的构建,通过line命令构建出轮廓,再进行拉伸调整,可以减少不必要的面数和点数,进而减小虚拟文件。除了建模方法,纹理贴图也会影响漫游速度,因为从3ds MAX导出的虚拟文件和贴图一起,才构成整个VR场景系统。系统利用Photoshop软件对场景的应用图片进行压缩,可减少文件数据量,提高虚拟漫游执行的速度。
下面以虚拟楼房漫游系统中的楼体造型为例介绍详细的建模过程:
(1) 将楼房的外部轮廓平面图导入3ds MAX,再通过旋转、平移和反转等工具调整到合适位置,作为建立三维场景模型的参考图。
(2) 参照导入的平面图建立模型。为了保证系统的漫游速度和场景的绘制速度,在不损失楼体真实性的基础上,应尽量减少描述楼房对象表面的多边形数量。对于在视觉感受上基本处于相同平面上的墙体和窗户等实体,应先把它们构造在同一平面上,再采用贴图的方式实现绘制,最后贴到对应的面上。创建好的场景模型如图4所示。
图4 楼房场景模型图
(3) 在所建模型的基础上,通过UV编辑器展开楼房的UV,对其进行贴图。先用Photoshop软件处理拍摄的纹理图和整体图,再利用纹理映射技术对场景进行贴图处理。渲染后的楼房场景效果如图5所示。
2.1.3 花草树木、光源等辅助物设计
系统采用纹理贴图的方式构建花草树木等辅助对象的场景模型。以花草模型为例,其构建的主要过程如下:
(1) 首先采集创建对象的实物照片,然后利用Photoshop软件对其进行处理,并采集出实物照片中的花草,保存。
(2) 采用DEF机制重定义Shape节点,并对其中的appearance域进行图像纹理映射定义。
(3) 定义过Shape节点以后,利用Transformer节点对其进行相应的缩放、旋转等设置。
以上只是实现一簇花草模型的构建步骤,若需要构建多个模型,则可以通过USE机制来完成。
图5 楼房场景效果图
2.1.4 虚拟环境的背景设计
VRML的空间背景可以看成是一个包围空间周围的球状体,以地平线分割为天空和地面两部分。创建空间背景的关键节点是Background节点。在VRML空间的坐标系中,以z-x平面为底平面,y轴正向指向天空,y轴负向指向大地。在实际创建中,可以建一个大的半圆球体再贴上天空图像来表示天空,创建一个大的立方体表示大地。虚拟空间中天地背景的节点结构如图6所示。
图6 空间背景结构图
在VrmlPad中,可以通过改变其中的skyColor和groundColor值来改变天空和地面的颜色,改变skyAngle和groundAngle值来改变天空角和地面角。
2.2 场景模型的组合
在完成三维虚拟场景的建模以后,需把可浏览的包含细化场景的楼房内部场景和外观场景组合起来,才能构成一个完整的虚拟楼房漫游场景。场景模型的连接可以通过Inline内联节点来完成。
模型组合以后可进行漫游的室内外效果如图7、图8 所示。
2.3 虚拟场景的优化
提高场景漫游速度是系统优化的主要内容,在该虚拟楼房漫游系统中,主要是采用了改进的LOD算法、限定视角和可视距离以及场景分割技术等场景优化方式。
2.3.1 改进的LOD算法的应用
传统LOD算法是根据物体大小和距离视点的远近,采用不同的细节描述方法。比如较小的物体或距离视点较远的物体,可以用粗糙一些的LOD模型绘制,而较大的物体或距离视点较近的物体,使用相对精细的LOD模型绘制[4]。对于数据量较少的植物模型来说,使用传统的LOD算法比较适合。但对于数据量较多的楼房,如果使用传统的LOD模型方法,为楼房建立多级模型,就会造成建模工作量大、文件数据过多和图形跳变等问题。
针对传统LOD算法的不足,本文采用模型差值信息渐增的思想对LOD算法进行改进。对每个场景只建立一个清晰的模型,根据视距从近到远的变化,把传统LOD逐级模型中信息数据的差值设置成从高到低的显示渲染级别,而且把最低级别模型的信息数据设置成在物体视点可视范围内永远可见,这样既避免了同一场景重复建模的麻烦,也不必考虑各层次模型之间的平滑过渡和重复渲染问题[4]。
图7 室外效果图
图8 室内效果图
2.3.2 限定视角和可视距离
为了消除渲染速度造成的用户视觉的跳跃感和停顿感,通过在一定范围内限定视角和可视距离,限定场景的大小,避免出现过大的场景,以减少场景中显示的模型数量,进而提高场景渲染速度。这主要是利用Viewpoint节点来实现。
2.3.3 场景的分割调度
由于楼房场景文件的数据量较大,场景比较复杂,所以采用分割调度的方法,将大场景分成多个小场景分段进行调度,进一步提高系统运行效率。但是,为了保证漫游效果的真实性,需要无缝连接多个空间场景。本文利用VRML提供的内联节点(Inline)进行子场景的自动连接。
2.4 虚拟场景的交互控制
VRML实现交互功能的基本机制如图9所示。
在VRML中实现交互功能的方式有两种:非编程交互和编程交互。非编程交互方式是在VRML自带节点的基础上实现的,它利用传感器节点(如接近传感器、可视性传感器等)来感知虚拟场景中用户的位置和操作,通过事件传递机制,实现用户与虚拟场景中实体对象的交互。但非编程交互方式只能实现简单的交互行为,对于复杂的动态交互则很难实现,因而需要对VRML的交互能力进行扩展。可以将Java、JavaScript与VRML相结合,采用编程方式加强VRML的动态交互能力。具体的实现方式有以下两种:
图9 VRML基本交互机制示意图
(1) 脚本编程接口(SAI,Script Authoring Interface)
Script节点的工作原理如图10所示。
图10 Script节点工作原理图
在Script节点中,eventIn域用来接受输入事件的响应值;eventOut域用来发送事件的响应值;Field域主要用来表示在Java或JavaScript编写的程序脚本中用到的变量;url域的域值指向由Java或JavaScript编写的程序脚本。
(2) 外部编程接口(EAI,External Authoring Interface)
EAI的工作原理如图11所示。
图11 EAI的工作原理图
EAI是SGI公司设计的Java类包,通过定义的Java Applet通信接口可以对VRML场景进行控制,还能通过网络操作和其他媒体进行交互,进而创建更复杂的虚拟环境系统。
本系统中,许多交互操作都是基于SAI实现的。比如当鼠标移到到某个可操控对象时,通过鼠标的单击或双击操作,就可以实现对该对象的交互操作,如抽屉的开关、门的开关等。
3 结语
本文对虚拟漫游系统涉及的关键技术(如虚拟场景建模技术和场景的实时交互技术等)进行了研究,实现了基于VRML的虚拟楼房漫游系统。针对场景漫游过程中存在的实时性问题,通过对传统LOD模型算法的改进,提高了虚拟场景的漫游速度。但由于时间和自身能力的限制,还需要在以下方面继续研究:
(1) 进一步完善系统,如系统只有部分楼体内可以进行交互操作,与现实世界相比还存在一定差距。
(2) 进一步研究VRML技术,扩大改进的LOD算法的应用范围,并研究从其他方面对系统进行优化的办法。