小区漫游系统的设计与实现
2013-03-16李笑满
任 帅,李笑满
(1.河南教育学院信息技术系,河南郑州450046;2.河南省劳动干部学校团委,河南郑州450044)
0 引言
虚拟现实(Virtual Reality)技术融合了多媒体技术、计算机图形学、人工智能、数字图像处理、人机接口技术、传感器技术、网络技术及高度并行的实时计算技术等信息技术.利用该技术可以体验和创建虚拟世界,相对于传统的模拟技术,在交互式三维虚拟环境中使用者能够真正进入并与之交流、互动[1].利用平时人们自身对现实事物的感知和认知能力,通过仿真系统和使用者之间的交互,使用者的思维得到很好的启发,可以更加全面地在虚拟环境中获取需要的空间和逻辑信息.虚拟现实的特征是通过各种设备,实现使用者和虚拟环境实体的交互,从而达到让用户身临其境的信息交流和视景的交互式仿真.而虚拟现实的最终目的是交互的实时性和真实感以及真实构想出虚拟的时空幻境.从诞生到现在,虚拟现实技术已经在包括城市规划、医药生物和地理信息等多个领域产生了重大的军事、社会和经济效益,是21世纪应用前景最好的技术之一.
虚拟现实在房地产领域的应用,目前还不是十分普及.最近有些地市已经开始使用这种技术,把建成后的整个小区展示成虚拟场景.客户可以通过键盘和鼠标等控制工具实现小区漫游,相对于传统的沙盘模型等方式更能把小区的真实面貌和完整规划展现在客户面前.OpenGL起源于SGI推出的GL三维图形标准,逐渐发展并越发成熟,本质上OpenGL是一个3D的模型库,具有极快的速度,可移植性也非常高,可以用来创建逼真的三维图形,从而实现虚拟现实和交互式场景[2].本系统基于OpenGL技术,建筑场景采用3DS MAX开发.
1 系统的总体设计
小区漫游系统的功能可以大致分为两个方面,第一是建立三维场景的模型,第二是控制用户的视点.为了成功对小区进行实时漫游,要保证场景的真实性和实时性.其中实时性体现在系统要以20帧以上的速率实时生成图像;真实性除了体现在要正确创建三维模型的几何体外,还要加强对对象纹理、材质和灯光方面的控制[3].视点控制则要求可以通过鼠标和键盘等输入设备控制视点的移动,并要求系统根据鼠标的输入变化实时监测并调整摄像机的状态,包括对摄像机进行旋转和平移等.
本系统选取郑州市内某小区地形信息,如图1,包括了小区内的绿化设施、建筑群落、道路、灯光、自然景观等.首先绘制小区的平面图,然后通过3DS MAX进行基础建模,接下来在VC++中把保存好的3DS文件导入.通过程序控制和处理小区的实时漫游.
根据系统的两个核心功能,把本系统的三维场景的建模划分成了建筑景观模块、数据获取模块和场景管理模块.系统的模块和功能如图2.
2 小区漫游系统的实现
本系统采用3DS MAX创建真实的场景模型.由于小区内的对象数量比较多,材质也不尽相同,根据操作者选择视点位置的不同,为了提高渲染场景的速度,系统在实时漫游的过程中采用了视点剔除的方法.视点控制模块通过输入设备控制漫游系统中视点的切换,实现了本系统的交互功能.下面介绍主要功能和模块的实现方法.
2.1 场景模型的创建
三维物体的建模有多种方式,比较常用的是采用三角网格制作.但是由于小区内建筑很多,数据需求较大,如果采用OpenGL来创建三维模型,效率低且工作十分烦琐.3DS MAX是Autodesk公司开发的三维动画软件,可用来对三维模型进行制作和渲染.3DS MAX有十分强大的可视化模型处理能力,可以对比较复杂的纹理、模型和材质信息进行保存.因此本系统采取3DS MAX完成系统的基础建模工作.完成后将模型保存为3DS格式,然后在程序中调用*.3ds文件.如图3给出了小区大门模型的三维模型.
三维模型创建完毕,可调配模型的材质和纹理外观,如图4给出了小区大门添加材质和纹理之后进行渲染的效果.最后把创建好的模型进行保存导出,格式为3DS格式.
2.2 模型的导入
块是构成3DS文件的基本单位,其中基本块是最大的块,包含了关键帧和编辑两个主块,块还可以互相嵌套.不同的块包含的信息各不相同.在读取信息时,并不是所有的信息都是我们所需要的.可以只读取需要的块,而对于不需要的块可以忽略掉.在3DS文件中,一般有三种块信息是最重要的,包括颜色块、对象块和材质块,每一种都必须在程序中读取,因为它们对三维模型起着十分重要的作用.由此,在程序中定义了一个用于3DS文件读入的CLD3DS类.在CLD3DS类中,定义了对象块处理函数ProcessMChunk()、颜色读入函数RCoChunk()、材质块处理函数ProcessNMChunk()等函数.
2.3 利用粒子系统创建喷泉景观
粒子系统是一种物理建模系统,可以模拟一些特定的模糊现象,通过该系统把模糊的不规则物体当做包含众多粒子的粒子群.粒子系统常用来模拟喷泉、火焰、雨雪等现象,针对运动物体是一种很好的建模方式.小区漫游系统利用粒子系统来模拟喷泉效果的方法如下.第一步定义粒子的数据结构,粒子结构包含多项特征,比如粒子的初始速度和生命值等;第二步对粒子的属性赋初值.对粒子进行删除、移动和添加等操作,并且在不同的周期中要及时更新粒子的属性,主要通过以下三个函数实现:AdParticles()添加粒子、Movparticles()移动粒子和Delparticles()删除粒子.如图5为小区喷泉的虚拟景观.
2.4 场景管理
小区场景中有大量的建筑、道路和景观造型,每一个物体模型都是一组多边形.如果我们对物体进行变换,然后进行一些其他处理,例如裁剪和投影,再将其插入到全局渲染列表里,那么将很难保证系统的实时性.Z缓冲是一种正确绘制三维空间中的物体并对大量多边形进行有效管理的方法,但是会大量占用内存.而使用二元空间划分和入口技术等空间划分算法来进行空间/物体的划分,计算量很大.本系统采用八叉树算法,用来分解建筑场景,这样场景的渲染速度可以得到充分的提高.同时也可以通过对八叉树节点是否包含在视域范围内来判断场景中物体的可见性,如果物体在该节点内不可见,则其必然不在域内,从而可以快速丢弃大量不可见物体.
2.5 场景视点漫游控制
图5 小区喷泉的虚拟景观Fig.5 Virtual landscape of community fountain
对场景的视点漫游控制有两种方法,一种是移动场景,另外一种是移动视点坐标,移动场景实现比较简单,但是只适合在简单的场景中.移动视点坐标就非常灵活,它对场景的状态未作任何操作.
本系统采用鼠标和键盘控制漫游,通过键盘的W、S、A、D键控制前后左右移动,利用键盘的UP和DOWN键控制摄像机视点的高低,鼠标控制摄像机镜头的左右旋转,还可以通过R键实现复位.以上操作主要通过声明和调用函数KeyPress()实现.
3 系统运行结果
本系统的运行环境为Visual C++,通过使用WIN32开发虚拟漫游的应用程序,系统运行时,通过键盘等相应按键可以看到虚拟场景实现了前后左右方向的移动和旋转,帧速度稳定在30 FPS以上,基本可以满足小区实时漫游的要求.
[1] 胡小强.虚拟现实技术基础与应用[M].北京:北京邮电大学出版社,2009:166-169.
[2] 和平鸽工作室.OpenGL高级编程与可视化系统开发[M].北京:中国水利水电出版社,2006:216-229.
[3] 王振玉,崔丽,沈楠,等.基于OpenGL的建筑小区虚拟漫游系统的实现[J].科技创新导报,2009(20):42-43.