基于OSG的虚拟建筑漫游系统的设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于OSG的虚拟建筑漫游系统的设计与实现

摘要:为了实现建筑参观的真实感和沉浸感,该文结合虚拟现实技术的综合应用,使用sketchup建立建筑三维模型和室内景观三维模型,以目前性能较高的开源图形引擎osg(openscenegraph)作为支撑,在windows平台下利用visualstudio2008设计开发了虚拟建筑场景漫游系统。系统采用高效的算法和优化的渲染技术实现了手动漫游和自动漫游的综合功能,利用多线程技术在多视口中观察图片并配以语音解说,同时增加了导航功能,使参观者在立体环境下体验逼真、直观的建筑漫游感受。虚拟建筑漫游在建筑设计、城乡规划、室内装潢等建筑行业将带来全新的展示和营销方式。

关键词:虚拟现实;osg图形系统;自动漫游;多视口;立体显示

中图分类号:tp391.9 文献标识码:b 文章编号:1009-3044(2013)14-3402-04

1 概述

随着虚拟现实技术的迅速发展和各行业的需求,虚拟漫游技术已被广泛应用于游戏娱乐、建筑设计、制造模拟、旅游体验和航空航天等领域。虚拟漫游因其沉浸感、交互性和构想性的特点,在建筑场景的设计和体验中已成为必备的工具与技术[1]。国内一些机构利用先进的建筑建模和显示技术,开发出了基于各类平台的漫游系统,如故宫参观项目、西湖风景游览系统和世博会展馆漫游系统等,逼真性强,用户体验度高。

为了实现建筑和展览的虚拟参观,同时增强参观者的真实感和交互性,该文设计了基于osg的虚拟建筑场景漫游系统,并通过实例介绍系统的设计与开发过程。该文采用sketchup软件和osg (openscenegraph)综合建模的方式来建立复杂庞大的建筑场景。在建筑内部还有各类装饰模型,所以根据模型不同的复杂度和作用选择不同的建模方式。对于场景数据的管理和用户交互的设置则充分利用osg图形引擎提供的接口和本文优化的各类算法,实现高效管理和快速响应。osg是目前封装较好、性能较高的开源图形开发软件包,它使用可移植的ansi c++编写,并使用工业标准的opengl 底层渲染api。以osg作为漫游引擎可以充分提高系统稳定性和人机交互的实时性。

2 建筑模型的建立

整个系统以建筑场景的建立为基础,所有的漫游和交互操作都在建筑场景中进行。目前,模型的建立主要有三种方式:基于多边形的直接绘制法、场景模型导入法和基于图像的绘制方法[2]。由于本系统需要对建筑内部结构、内部装饰物进行细致的观察和浏览,所以要求模型的精度高,材质丰富。所以,该文采用google推出的三维建模软件sketchup进行建筑结构、外饰和内饰的建模。利用标准的建筑图纸,对模型进行精确造型和逼真的贴图渲染。同时,对于场景内的简单图形,该文直接调用osg接口绘制简单几何体并赋予材质,实现壁画或展板等实体效果。模型导入的方法需要大计算量,而直接绘制法牺牲了图形的真实感。该文将两种方法有机融

合,根据不同需求调用不同方法,实现外观与效率的完美结合。

3 漫游系统的构建

本系统共分为三个结构层次,分别为交互层、驱动层和应用层,如图1所示。首先,用户通过鼠标、键盘等产生人机交互,交互事件形成消息被传递至驱动层;驱动层为利用osg引擎自定义的各类接口。驱动层是整个系统的核心。事件消息被接收后,驱动层进行计算并最终产生消息响应结果,传输至应用层;应用层各模块接收相应的响应结果后,产生更新操作,形成最终的交互结果。

应用层包含各个功能模块,主要包括漫游模块、导航模块、语音模块、菜单模块及辅助模块。其中,漫游模块为核心应用,其子模块又包括手动漫游、路径编辑、自动漫游、漫游路径文件保存与链接。导航模块则是对当前漫游者的位置的实时显示。语音模块只有在用户需要对目标物件进行放大观察时才启动,自动播放数据库中的语音信息,该模块采用了多线程技术实现。辅助模块包括照相机功能、立体显示功能等。

3.2 关键技术设计与优化

osg的渲染包括更新、拣选和绘制三个过程。为了实现复杂建筑场景的精确渲染和及时响应用户交互,采用高效的算法和优化的渲染技术是很有必要的[3]。以下是本文在系统中设计和优化的关键技术。

1)“视点步进探测”碰撞检测法

所谓碰撞,就是两个不可穿透的物体在空间中产生交集。在虚拟

现实的环境中,由于用户的交互控制,两个物体可能产生相互运动从而产生碰撞现象。如果不阻止碰撞行为,就会产生穿墙而过的情况,极大影响了虚拟世界的真实感。所以,对于场景中运动的物体,必须增加碰撞检测操作,对两个物体的几何元素进行相交测试。

现有的碰撞检测算法主要分为层次包围盒法和空间分解法[4]。但是,在本文中漫游者必须进入建筑模型,如采用以上两种算法,在建筑体外围漫游者就与建筑体产生碰撞,从而无法进入建筑体内部。

所以,该文设计了一种“视点步进探测法”的碰撞检测方法。以当前视点为起点,设为点v0,以当前前进方向为方向矢量,以当前步进值为距离l,形成一条探测线段line=(v0,,l),然后用探测线段与建筑体做相交计算。如果无交点,漫游者沿前进l的距离,相反,若检测到交点,漫游者不移动。该方法中,探测线段并不是与建筑体包围盒做相交测试,而是去建筑体各个平面做相交运算,这里可以直接调用osg的hit()函数检测是否存在交点。

2)漫游路径平滑化

本系统在设计漫游功能时分为手动模式和自动模式。自动漫游就是要求漫游者沿着固定路线前进观察,这就要求用户可以自定义漫游路线。用户自定义时,只能选择场景中的希望经过的关键点。如果直接将关键点相连形成一条折线路径,那么漫游相机通过时观察角度变化迅速,而没有一个过渡过程,大大弱化了真实性和沉浸感。3)rtt(render to texture)技术应用

本系统实现了实时导航的功能,显示整个场景的俯瞰图以及漫游者所处的位置。在开启导航图应用的情况下,场景上方的rtt相机被开启,该相机内渲染的内容不须显示,而是被输出到一张纹理。当场景的灯光、位置等发生变化或者漫游者运动时,相机内的渲染内容也随之改变,纹理被实时更新,显示当前最新的场景数据。

由于rtt是一个更新回调的过程,鉴于场景数据量大,为了减少计算量,该文对整个场景做了拣选操作,即物体背对相机的点将不被计算和绘制。如果在拣选时开启rtt相机,相机输出的纹理图片将不带任何rgb信息,即空图片。所以,该文做了以下优化:1)导航功能开启时,rtt相机开启,接受实时的更新,同时拣选关闭。导航功能关闭时,rtt相机关闭,拣选开启;2)当建筑场景属性不被修改时,建筑的rtt纹理不被更新重绘;3)当漫游者不移动时,rtt相机不接受更新回调,从而不须反复读取漫游者位置数据。4)多线程技术的应用

5)红蓝立体显示技术的应用

立体显示,即3d显示是当前最受欢迎的显示技术。各类电影、图像纷纷采用3d显示的方式,带给用户“身临其境”的感受。

本文采用osg支持的红蓝立体显示技术,通过双通道分别渲染场景的蓝色层和红色层,并且设置两图层适当的偏移距离以达到深度的效果。用户戴上红蓝眼镜后,双眼分别看到不同的图层,其整体效果就是在视觉上形成三维立体的效果。红蓝立体显示技术使得整个场景需要被渲染多次,加大了计算量,减慢了帧率及实时响应。

相关文档
最新文档