基于OSG的虚拟校园漫游系统的设计与实现

时间:2022-10-22 01:23:41

基于OSG的虚拟校园漫游系统的设计与实现

摘要:介绍了虚拟现实技术和OpenSceneGraph(OSG)三维渲染引擎。结合虚拟现实技术的综合应用,使用三维建模软件-3DS MAX 8、开源的OSG三维渲染引擎,设计实现了学校校园虚拟漫游系统。该系统可以为用户提供直观、逼真的虚拟环境,使观者有身临其境之感。

关键词:虚拟现实;OSG;校园漫游;碰撞检测

0 引言

虚拟现实系统(Virtual Reality,简称VR),是一种高级的人机交互系统,它可利用计算机产生一个以自然的视、听、触等功能感受的三维环境,人们可以方便地对生成的“虚拟世界”进行交互式的观察、分析、操作和控制。它以仿真方式给用户创造了一个实时反映实体变化与相互作用的界面,使用户可直接参与并探索仿真对象在所处环境中的作用与变化。它具有多媒体信息的感知性、沉浸性、交互性和自主性等特点。

Open Scene Graph(OSG)是一种开源、高效、强大、新颖和可操作性强的三维渲染引擎,主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能。它使用可移植的ANSIc++编写,并使用已成为工业标准的OpenGL底层渲染API。本文所介绍的虚拟校园以河南理工大学校园作为应用实例,通过OSG及其三维仿真平台来实现校园的实时漫游。

1 系统的总体设计

首先对河南理工大学进行信息采集,得到建筑物等数字信息,再通过三维建模的形式创建场景,最后实现虚拟场景的漫游。系统实现如下的功能:

(1)访问者可以自由进出校园,根据个人的需要选择任意的观看路线,并通过鼠标和键盘选择观看角度。

(2)在漫游过程中,随时可以调出校园地图,查看自己所处的校园位置。

(3)系统具有碰撞检测功能,以防发生“穿墙而过”的情况。

(4)为了更好的表现出漂亮的校园模型背景,添加了天空盒使得校园背景更加漂亮、逼真。

2 校园场景的建模

三维模型的创建是开发虚拟校园漫游系统的最重要也是最关键的任务,因为它是场景漫游的基础,漫游运行的效果和场景的逼真度,直接受所建模型好坏的影响。过于精细的模型不仅会严重降低运行的速度,还会消耗很多时间,所以在建模过程中,要在模型的细节度和复杂性之间寻求一个平衡点,一般情况下,用纹理贴图来代替模型细节。

2.1 数据搜集与整理

结合校园建筑平面图,我们可以获得完整的校园信息:建筑物、树木绿地、道路等的地理位置和平面轮廓,以便构建出整个校园场景。首先,我们用数码相机收集建筑物、道路、绿地树木等的大小、形状、颜色等相关信息;然后根据照片分析出物体的立体轮廓形状,为三维建模打下基础。

2.2 建筑物模型的创建

(1)对于外形简单,形状规则的建筑物可以采用立方体和贴图的建模方式。如教学楼、实验楼、学生宿舍等,建立简单的立方体,把拍摄到的照片在Photoshop cs3中进行图片处理,如用变换工具把照斜的图片拉正等,把修正好的图片作为位图贴图赋给立方体。对于复杂的建筑物,3DS MAX8提供了布尔运算、放样、图形合并、可编辑多边形等方法。

(2)对于路灯、树木等物体,采用十字交叉法建模,这样会节减模型面数。如果采用实体建模,不仅会大大增加场景的而数,更重要的是增加了文件体积,使浏览速度减慢。

需要注意的是用3DS MAX8制作出的场景非常精细,存在着大量冗余信息,所以在建模时应注意对模型的优化。对于看不到的面可以删除,如一些模型的底面和相贴的面。系统中用到的立体文字,一般在Photoshop中建好并存储为.jPg格式的图片,用贴图的方法贴到模型上。

2.3 材质与贴图

虚拟场景中需要用到大量的贴图,这些贴图主要是用数码相机拍摄的图片,由于拍摄的位置不同,照片效果不一,需要经过处理才可以贴到模型上。我们使用PhotoShop对贴图进行处理。在制作虚拟场景时,使用PhotoShop完成以下工作:

(1)制作简单贴图。如文字、标牌示语等。

(2)对拍摄的照片进行简单的编辑处理,比如:放大缩小、亮度、对比度的调整等。

(3)对照片进行变形操作处理。如旋转扭曲。

(4)制作带Alpha通道的图像文件,通过PhotoShop可以将画面中不需要显示的部分设置成透明的,并将透明信息保存。一般使用TGA和PNG文件来保存带Alpha信息的图像。

2.4 场景的合成

前期的模型制作,都是单个独立创建的,创建完所需模型后,需要摆放这些模型,也就是对整个场景进行合成。在合成场景时,要综合考虑,例如整体布局、模型比例的调整等诸多方面,不然就会出现整体布局不协调的现象。在场景合成的过程中,也要注意实际物体的摆放位置。虚拟校园效果图局部截图如图1所示。

3 漫游功能的实现

3.1 场景漫游

在OSG中,通过对摄像机运动的控制,可以实现漫游,摄像机通过变换它的矩阵来实现运动:

(1)根据需要要对摄像机的位置和方向进行计算和设置,它们由矩阵构成,通过矩阵变换,来改变摄像机的位置和方向。

(2)计算摄像机的初始位置,使场景出现在视口内。

(3)漫游时,鼠标的使用是最常见的,因此,添加鼠标事件,以方便地使用鼠标。

(4)确定摄像机的高度。

3.2 路径漫游

首先设置好一个路径,再进行漫游,这是常用的方法。在osgViewer中,按下小写字母“z”时,动画路径就开始录制;当要结束动画制作时,按下大写字母“z”,即可保存动画路径文件;用osgViewer读取该动画文件时,会重现所录的路径动画内容。

3.3 碰撞检测

漫游虚拟场境时,需要及时进行一些碰撞检测,否则可能出现“穿墙而过”等现象,会降低虚拟场境的真实性。本系统使用基于视点向前的线段探测的碰撞检测算法。

OSG中提供了osg::LineSegment,它表示由一个起点和一个终点构成的线段类。osgUtil::IntersectVisiotr是接受线段的类,可判别与节点的交集,通过函数iv,addLineSegment(1ineget())在列表中添加一条线段。Node->accept(iv)把线体段队列,加入到场景中,使用,v hits()来判断是否有碰撞。有碰撞则返回TRUE,无碰撞则返回FALSE。osgUtil::IntersectVisitor::HitList hlist可以得到相交点的具置,从而计算出距离。

3.4 天空盒的实现

为了使校园虚拟场景具有高逼真性,对天空的模拟是必不可少的。天空背景的真实感能给人的视觉带来很大冲击。球体天空盒的创建可参考一下步骤m;

①创建立方体纹理对象并读取纹理贴图;②设置自动生成纹理坐标;③设置纹理矩阵;④设置立方图纹理;⑤设置矩阵变换节点;⑥关闭关照并关闭背面剔除,设置渲染顺序,加入到叶节点中绘制。

3.5 导航器的实现

导航器的作用就像一个地图,在用户漫游时,经常需要查看自己所处的位置。这就要用到HUD技术,不需要时把它隐藏起来。实现步骤如下:

(1)创建一个osg::Camera对象,设置视图、投影矩阵及渲染顺序,以保证场景图形全部渲染完成后才进行渲染;

(2)创建一个osg::Geode对象和osg::DrawPixels对象,并设置导航图片;

(3)把叶节点Geode关联到步骤(1)所创建的相机上。

4 结束语

本文介绍了基于OSG的虚拟校园漫游系统的设计与实现技术。重点介绍了场景的三维建模和漫游系统的实现。在教育应用方面,虚拟现实技术有着巨大的优势和潜能。随着虚拟现实技术的进步和完善,虚拟校园的建设必将再上一个新的台阶。目前我们开发的系统的功能相对简单,只提供了用户在三维空间中的漫游功能,还不能满足虚拟场景中人与人之间的关系互动需求。如何在三维虚拟校园漫游基础上,开拓新功能,开发更有深度的应用,是我们下一步需要做的工作。

上一篇:对PDF文档的认识与应用探讨 下一篇:基于XenDesktoP桌面虚拟化网络平台的研究