论文导读::虚拟现实(VirtualReality。通过OSG及其三维仿真平台来实现校园的实时漫游。介绍了基于OSG的虚拟校园漫游系统的设计与实现。系统具有真实的力学性质和碰撞检测功能。
论文关键词:虚拟现实,OSG,校园漫游,碰撞检测
1 引言
虚拟现实(Virtual Reality,简称VR)技术是一门新兴技术,是一种高级的人机交互系统。它可利用计算机产生一个以自然的视、听、触等功能感受的三维环境,人们可以方便地对生成的“虚拟世界”进行交互式的观察、分析、操作和控制。它以仿真方式给用户创造了一个实时反映实体变化与相互作用的界面,使用户可直接参与并探索仿真对象在所处环境中的作用与变化,它具有多媒体信息的感知性、沉浸性、交互性和自主性等特点。
近年来,随着高等教育事业的快速发展,越来越多的学生和家长,希望首先在网络上对学校有一个较直观的了解,作为虚拟现实的一个应用――虚拟校园,它的出现满足了这一要求。Open Scene Graph(OSG)是一种开源、高效、强大、新颖和可操作性强的三维渲染引擎,主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能。它使用可移植的ANSI C++编写,并使用已成为工业标准的OpenGL底层渲染API。本系统以河南理工大学校园作为实例,通过OSG及其三维仿真平台来实现校园的实时漫游。
2 系统的总体设计
本系统对河南理工大学首先进行数字采集,得到建筑物等的数字信息,在通过三维建模的形式创建场景,最后实现虚拟场景的漫游。系统实现如下的功能[1]:
1)访问者可以自由进出校园,根据个人的需要来选择任意的观看路线碰撞检测,并通过鼠标和键盘转换视点。
2)在漫游过程中,随时可以调出校园地图,查看自己所处的校园位置。
3)系统具有真实的力学性质和碰撞检测功能。以防有“穿墙而过”的情况。
4)为了更好的表现出漂亮的校园模型背景,天空盒的添加使得校园的背景更加漂亮、逼真。
3 校园场景的建模
三维模型的创建是虚拟校园漫游系统的最重要也是最关键的任务,因为它是场景漫游的基础,漫游运行的效果和场景的逼真度,直接受所建模型好坏的影响。过精细的模型不仅会严重降低模拟的效率,还会消耗很多时间,所以在建模过程中,要在模型的细节度和复杂性间寻求一个平衡点,必要时用纹理贴图代替模型细节[2]杂志网。
3.1数据搜集与整理
结合校园建筑平面图,我们可以获得完整的校园信息:建筑物、树木绿地、道路等的地理位置和平面轮廓,以便构建出整个校园场景。首先,我们用数码相机收集建筑物、道路、绿地树木等的大小、形状、颜色等相关信息。然后根据照片分析出物体的立体轮廓形状,为三维建模打下基础[3]。
3.2建筑物模型的创建
1)对于外形简单,形状规则的建筑物可以采用立方体和贴图建模。如教学楼、实验楼、学生宿舍等,建立简单的立方体,把拍摄的照片在Photoshop cs3中进行图片处理,如用变换工具把照斜的图片拉正等,把修正好的图片用于位图贴图。对于复杂的建筑物,3DS MAX8提供了布尔运算、放样、图形合并、可编辑多边形等方法[4]。
2)路灯、树木等物体,采用公告板节点法建模,如果采用实体建模,不仅会大大增加场景的面数,更重要的是增加了文件体积,使浏览速度减慢。此节点可以在场景中使用二维图像来模拟三维造型并跟随摄像机旋转,会一直面对观察者。
需要注意的是用3DS MAX8制作出的场景非常精细,存在着大量冗余信息,所以在建模时应注意对模型的优化。对于看不到的面可以删除,如一些模型的底面和相贴的面。系统中用到的立体文字,一般在Photoshop中建好存储为.jpg格式的图片,用贴图的方法贴到模型上。
3.3材质与贴图
虚拟场景中需要用到大量的贴图,这些贴图的来源主要是用数码相机拍摄的图片,由于拍摄的位置不同,使得照片有一定的出入,需要经过处理才可以使用贴到模型上碰撞检测,使用PhotoShop 来对贴图进行处理。在制作虚拟场景时,使用PhotoShop 完成以下工作[5]:
(1)制作简单贴图。如文字、标牌示语等。
(2)对拍摄的照片进行简单的编辑处理,比如:放大缩小、亮度对比度的调整等。
(3)对照片进行变形操作处理。如旋转扭曲。
(4)制作带 Alpha 通道的图像文件,通过 PhotoShop 可以将画面中不需要显示的部分设置成透明的,并在保存时将透明信息保存,一般使用 TGA 和 PNG 文件来保存带A1pha 信息的图像。
3.4场景的合成
前期的模型制作,都是单个独立创建的,创建完所需模型后,需要摆放这些模型,也就是对整个场景进行合成。在合成场景时,要进行综合整体的考虑,例如整体布局、模型比例的调整等诸多方面,不然就会出现整体布局不协调的现象。场景合成的过程中,也要注意实际物体的摆放位置。
虚拟校园效果图局部截图如图1所示。

图1 虚拟校园效果图
4 漫游功能的实现
4.1场景漫游
在OSG中,通过对摄像机运动的控制,可以实现漫游,摄像机通过变换它的矩阵来实现运动[6]:
1)根据需要要对摄像机的位置和方向进行计算和设置,它们有矩阵构成,通过矩阵变换,来改变摄像机的位置和方向。
2)计算摄像机的初始位置,使场景出现在视口内。
3)漫游时,鼠标的使用是最常见的,因此,添加鼠标事件,以方便的使用鼠标。
4)确定摄像机的高度。
4.2路径漫游
首先设置好一个路径,在进行漫游,是个常用的方法。在osgViewer中,按下小写字母“z”时,动画路径就开始录制;当要结束动画制作时,按下大写字母“Z”,即可保存动画路径文件;用osgViewer读取该动画文件时,会出现所录的路径动画内容的。
4.3碰撞检测
漫游虚拟场境时,需要及时进行一些碰撞检测,否则会出现“穿墙而过”等现象,会降低虚拟场境的真实性。本系统使用基于视点向前的线段探测的碰撞检测算法。
OSG中提供了osg::LineSegment表示一个线段的类,包含一个起点一个终点构成一条线段杂志网。osgUtil::IntersectVisiotr是接受线段的类碰撞检测,用于判别与节点的交集,通过iv.addLineSegrnent(1ine.get());来添加一条线段到列表当中。Node->accept(iv);把线体段队列加入到场景中,使用iv.hits()来判断是否有碰撞。有碰撞则返回TRUE,无碰撞则返回FALSE。osgUtil::IntersectVisitor::HitListhlist;可以得到相交的点的具体位置,从而计算出距离。
4.4天空盒的实现
为了使虚拟场景具有更逼真性,对天空的模拟是必不可少的。天空背景的真实感给人的视觉带来冲击。天空盒的创建步骤如下[7]:
1)创建并读取立方体图像纹理对象和纹理贴图;2)设置自动生成纹理矩阵;3)设置纹理矩阵;4)设置立方图纹理;5)设置矩阵变换节点;6)关闭关照并关闭背面剔除,设置渲染顺序,加入到节点中绘制。
4.5导航器的实现
导航器的作用就像一个地图,在用户漫游时,经常需要查看自己所处的位置。这就要用到HUD技术,不需要时把它隐藏起来。实现步骤如下:
1)创建一个osg::Camera对象,设置视图、投影矩阵及渲染顺序、以确保场景图形全部渲染完成后才进行渲染;
2)创建一个osg::Geode对象和osg::DrawPixels对象,并设置导航图片;
3)把叶节点Geode关联到步骤(1)所创建的相机上。
5 结束语
文中以一个真实的校园为例,介绍了基于OSG的虚拟校园漫游系统的设计与实现。重点介绍了场景的三维建模和漫游系统的实现。在教育应用方面,虚拟现实技术有着巨大的优势和潜能。随着虚拟现实技术的进步和完善,虚拟校园的建设必将在上一个新的台阶。目前的系统功能上相对简单,只是提供了用户在三维空间中的漫游,还不能满足虚拟场景中人与人之间的关系互动。如何在三维虚拟校园漫游基础上,开拓新功能,开发更有深度的应用,是我们下一步工作需要做的。
参考文献
[1]曹为刚,王涛.基于VRML的虚拟校园漫游系统设计与实现[J].第三届全国交通工程测量学术研讨会,2007:231.
[2]董辉,王维忠.基于OpenGL的虚拟校园漫游系统设计与实现[J].潍坊学院学报,2009,9(2):30―31.
[3]朱静雯,伍艳莲.基于OpenGL的虚拟校园漫游系统的实现[J].考试周刊,2009,(35):156―157.
[4]曲巨宝,梁洪涛.基于VRML的三维虚拟校园漫游系统研究[J].现代计算机,2007,7:99.
[5]吴迪,张邵江.虚拟校园漫游系统中的建模与优化技术[J].天津市经理学院学报,2009,4(24):40―41.
[6]温转萍,申闫春.基于OSG的虚拟校园漫游系统的设计与实现[J].计算机技术与发展,2009,19(1):218―219.
[7]王锐,钱学雷.OpenSceneGraph三维渲染引擎设计与实践[M].北京:清华大学出版社,2009.11.
|