虚拟展示系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟展示系统的设计与实现
摘要:该系统利用虚拟现实技术,在计算机中模拟再现展览的真实场景,系统基于osg开发,并集三维场景漫游、语音讲解于一体的虚拟场景展示系统。文中分析了该系统的实现过程及整体结构。为了保证交互系统的实时性,利用osg中感知器进行区域划分,提高了系统运行的速度。
关键词:虚拟现实虚拟展示感知器区域划分
中图分类号:tp391.9 文献标识码:a 文章编号:1007-9416(2012)11-0161-02
三维虚拟展示利用虚拟现实技术(virtual reality)再现展览的场景,虚拟现实强调沉浸感(immersion)、交互性(interaction)、构想力(imagination)这个三个基本特征[1],vr是由计算机生成的、模拟人类感官的世界的实时表示,vr又称为“灵境技术”,它能够创建出逼真的三维虚拟环境,并使浏览者在视觉上产生身临其境的感觉。
目前,国内各种展销会和展览会举办的非常频繁,大到上海的世博会,小到一个公司的小型展销会,在这些展览会上各种新创意、新技术也都运用其中。但是也出现了一些很棘手的问题,譬如上海世博会期间,人山人海,一个场馆单单排队就要好几个小时,这对参观者来说是一件非常糟糕的事情。因为面对几十上百个场馆,人们并不知道该场馆中是否有自己感兴趣的内容。这时如果在场馆外
建造一些虚拟交互设备,人们可以在设备上简单的浏览三维场馆以及展出的内容。这就给参观者节省了时间,使人们能利用有限的时间来参观更多感兴趣的展览,通过三维虚拟展示也可以给用户留下深刻印象。
1、虚拟展示与漫游系统总体分析
1.1 需求分析
场馆展览商需要建立一个虚拟的场景展示系统,该系统能够仿真真实场馆的展览情况,再现展览的场景。操作者可以在展馆中自由的观看各个展位的产品,当走到某个展位时会弹出小窗口播放该展位的图文信息,能够自动为操作者导航。
1.2 功能分析
通过展商的需求分析,本系统包含具体模块计划分如图一。
图一虚拟展示中的设计原理和主要实现环节
2、虚拟展示相关技术
2.1 基于三维建模的虚拟现实展示设计(geometry-based vr)基于三维建模的虚拟现实展示设计是指以三维场景和三维物体
模型为基础,譬如展览会中场景和产品都是借助专业建模软件(如solidworks、3dmax等)来完成,建成的模型是三维的,这样在搭建的场景中就能够方便、真实地表达现实世界,譬如打开立体显示也很容易,只需要自己加个立体显示或者从osg(openscene graph)库中调用此功能即可。本系统就是利用3dmax建立三维模
型,并通过xml文件读取模型的位置信息。
2.2 采用分层次的场景图组织形式
在展位的放置上要求场景的组织要有一定的层次结构,如用树或者图来组织场景。本系统采用osg图结构来管理场景,优点是:对于三维场景的组织管理非常高效,并且osg库中提供了很多常见的三维交互功能。
2.2.1 osg技术介绍
osg是一个基于c++语言的跨平台应用程序接口,它能够让程序员快速、便捷地创建高性能、跨平台的交互式图形程序[2]。该技术主要有两部分组成,一是组织、管理场景以及遍历技术;另一部分是对场景渲染以及实现场景模型的连续层次细节。
对于场景的组织与管理,osg采用了场景图(scene graph)这种数据结构,通过场景图把各场景及其属性组织成图。osg利用层次结构来表示场景,场景中的结点是构成场景图的基本单元[3]。
2.2.2 osg的特点
从性能上来说,osg场景图所用的树状数据结构直观,底层具有非常优秀的框架;从效率上讲,对于程序员来说是一个解脱,如果与opengl相比,osg对场景的管理让人们使用起来更为便利;最后是osg的可移植性,也就是说不管是windows平台还是linux平台,同一基于osg的程序只需在新平台上重新编译即可使用。
3、系统实现及结果
3.1 模型文件设置
在系统中,通过xml文件,向系统中输入模型文件的位置信息[4],通过osg来解析3ds文件。对于osg中模型的管理设置如图二。
图二osg中模型设置
3.2 虚拟漫游及区域划分
本系统可以以第一视角自由在不同的场馆中漫游,可以看到展示的产品。可以用osg提供的操纵器控制人物漫游,也就是照像机的移动。对场景中的每一帧,计算照相机的水平位置,映射到平面图坐标上,然后检查是否处于该区域内,如果处于该区域位置内,则触发图文解说,如果不处于则系统无响应,该功能用感知器实现。
3.2.1 漫游与操纵器
漫游功能指人物的漫游规则,包括是否开启碰撞检测。是否开启攀爬功能(本软件主要是指楼梯的攀爬),本系统在实现漫游上采用操纵器来负责。
操纵器实现具体过程:
//系统自动调用操纵器,操纵器调用摄像机运动函数。calcmovement();
calcmovement()函数负责摄像机的位置变换,其实现如下:
//计算摄像机将要移动到的新位置。_velocity人目前的行走速度,dt为行走时间。
distancetomove=_velocity*dt;
//如果行走后,摄像机的高度低于海平面高度,则将摄像机放回海平面,防止摄像机钻入地下
if (_eye.z()//检查人物前往的位置是否会发生碰撞。
bool b=intersect(_eye,distancetomove);
if(没有碰撞)
computeposition;//计算新位置。
_eye+=新高度;//将摄像机增加新的高度,如果前进的地方是楼梯等,则此高度就是台阶的高度。
3.2.2 区域划分与感知器
感知器实现原理如下(x0y平面,z为离海面高度):区域检查指判断人物是否处于某个展览区域内,本系统主要采用感知器来管理,感知器每一帧都会去感知人物是否进入某个展览区域。如果人进入这一区域就会激活相应的操作,播放图文解说,使展示的三维场景与某些展商需要强调的细节结合在一起。
感知器实现具体过程:
3.3 系统仿真结果
该系统以vc++,开发了基于osg的虚拟展示漫游系统,其中界面是用mfc来完成。实验硬件环境:cpu是intel酷睿i5,内存为4g ddr3,gpu:英伟达gt540m。系统界面如图三。其中(a)图是展馆的整体场景,(b)图是攀爬楼梯和小窗口解说的场景。
4、结语