OGRE在三维模拟漫游中的研究与应用
2012-10-13王良燕朱宁波丁雪晶
王良燕,朱宁波,丁雪晶
(安徽三联学院 计算机科学与技术系,安徽 合肥 230601)
OGRE在三维模拟漫游中的研究与应用
王良燕,朱宁波,丁雪晶
(安徽三联学院 计算机科学与技术系,安徽 合肥 230601)
OGRE是一款开源的三维图形引擎,在虚拟现实、游戏开发等方面有广泛的应用.本文主要研究如何通过ogre建立三维漫游场景,实现三维模拟漫游,并最终给出了模拟效果.
OGRE;虚拟现实;三维漫游
1 引言
在虚拟现实领域,通常需要创建一个人机交互的虚拟场景,使用户可以在场景中漫游并进行一些实时操作.为了实现逼真的场景渲染,需要选择一种高效的3D引擎.OGRE[1]是一款功能强大的开源3D引擎,使用它可以方便地构建三维场景.本文主要探讨如何通过OGRE引擎实现三维模拟漫游.
2 OGRE特性
OGRE是一款用面向对象语言开发的功能强大的3D引擎,完全开源免费.它不同于OpenGL、DirectX等较底层的引擎,专注于处理三维空间场景,只需编写很少量的代码即可实现一个完整场景的创建.此外它还具有良好的跨平台性能,同时有强大的技术社区支持,因此适合用来做虚拟现实方面的开发和研究.OGRE引擎具有主要特性如下:
2.1 效率特性
OGRE底层支持OpenGL和DirectX,并对其进行了封装,向上层提供面向对象的接口和类,使开发者可以直接对高层对象进行开发,比如摄像机、网格、材质等,而不用管底层的实现细节;此外对象框架还可进行扩展,具有较高的开发效率.
2.2 场景特性
OGRE拥有可配置的资源管理器,支持多种场景类型,并提供插件的形式链接到不同场景结构,使开发者可以灵活地使用适合自己程序的场景体系.
2.3 支持特性
OGRE支持Windows和Linux平台[2];支持从JPEG、PNG等多种图像文件中为材质加载纹理,并能自动调整纹理大小;支持脚本语言,可以不用重新编译就能更改各种材质属性;支持网格数据格式,可以利用工具从建模软件中导出OGRE支持的.mesh和.skeleton格式文件;还支持高效的插件体系结构,从而方便扩展引擎的功能.
由于具备上述诸多优良特性,OGRE已经得到非常广泛的应用,诸如进行游戏开发、仿真[3-4]等.
3 三维漫游系统原理及实现
3.1 场景模型的创建
使用OGRE创建三维场景,首先需要建立三维模型.三维模型一般是通过专门的建模软件创建,常用的建模软件有3DS MAX[5]、Maya等,建立好的模型再通过第三方插件导出供OGRE程序使用.这里的三维场景模型使用3DS MAX软件创建,然后通过oFusion插件导出.导出的场景由一个Scene.osm文件、一个Scene.material文件、多个.mesh格式和一些贴图文件构成,其中Scene.osm对场景中的对象进行管理,Scene.material主要管理材质,.mesh文件则是各种模型的网格文件.Scene.osm文件通过XML的形式对所有场景模型进行管理,以下是部分内容示例:
OGRE程序加载场景时就是通过解析这些文件来显示各种场景模型的.
3.2 创建虚拟场景
OGRE对三维场景采用树状层次化结构进行管理,即将场景划分成不同的空间,大空间中还可以划分不同的小空间,每个空间由一个SceneNode(场景节点)对象管理,负责处理移动、旋转、缩放等动作.每个SceneNode上可以挂接各种场景元素,比如实体、相机等.由于采用的是树状结构,整个场景中有且仅有一个root节点,所有其它的SceneNode都是它的子节点.OGRE还提供一个SceneManager类来负责整个SceneNode树的维护.据此,OGRE创建一个三维场景首先需要做如下几步:
(1)取得 root节点
(2)创建SceneManager
(3)载入资源.资源(如三维模型)的载入可以完全通过代码实现,但缺点是加载大量的场景模型时代码量会很大,并且程序不灵活.为了方便地导入各种资源,本系统中所有的资源文件通过一个.cfg脚本来管理,需要添加或删除资源时,只需更改这个脚本文件即可.程序中通过一小段代码读取这个文件并解析,从而方便地获取各种场景模型.
为了让用户能看见三维场景并能在其中漫游,还需要做下列工作:
(1)创建相机.一个场景中可以设置多个相机,以便用户可以从不同角度去观察场景.不过在同一时间只能使用一台相机.
(2)创建视口.视口是呈现给用户看的最基本的窗口.如果场景中有多个摄像机,Ogre需要决定使用哪个摄像机去呈现场景,被选中的窗口就会被渲染进来.
(3)创建帧监听器.用户在漫游系统时需要实时交互,比如通过键盘鼠标控制移动、旋转等,OGRE必须能捕捉到这些操作,并实时更新屏幕显示.这需要用到帧监听功能.程序中需要创建帧监听器.
在帧监听器类中要定义两个函数来接收消息:
这两个函数分别在渲染一帧之前和之后去做,由于O-gre主循环需要不停地渲染屏幕,当帧监听器中的frameS-tarted或者frameEnded函数接受到某个消息,比如键盘输入,这一帧就需要被重新渲染.
(4)碰撞检测.用户在漫游过程中可能会发生碰撞,因此需要能检测到这些碰撞.OGRE本身没有碰撞检测功能,但其底层提供了方便的接口,可以借助第三方引擎实现.这里的碰撞检测通过Newton[6]物理引擎实现.Newton是一款实时仿真的物理引擎,提供场景管理、碰撞检测、动态行为等功能,可以跨多个平台,具有小巧、高效、稳定、使用方便等诸多优点.通过OgreNewt来衔接即可在OGRE程序中使用.采用的检测方法是基于包围盒的方法,所以在3DSMAX中建立模型时需要在模型外加上包围盒.
4 运行效果
在windows平台下采用visual studio 2005开发,基于OGRE1.7.2和Newton1.5.3模拟出的漫游场景效果如下图所示.其中的建筑模型采用3DS MAX创建,通过然后通过o-Fusion插件导出.漫游可以通过键盘和鼠标从任意角度进行,图1是高空俯瞰三维场景时的漫游图,图2是站在地面上行走时的漫游图.漫游遇到物体时会进行碰撞检测,如图2在行走时遇到柱子就会被挡住,需要向旁边平移一点才能通过.
图1 高空漫游场景图
图2 地面漫游场景图
5 结束语
本文介绍了如何利用OGRE引擎创建一个三维漫游场景系统的方法.由于所使用的引擎开源,开发成本低,并具有良好的视觉效果和用户体验,因此具有一定的实用价值.
〔1〕http://ogre.sourceforge.net/.
〔2〕Zhen Zheng,Zhang Fan,Wu Bingrong,Li Guo.A cross-platform extendable 3D Virtual Reality system based on OGRE and Python[C].Communications,Circuits and Systems,2009.ICCCAS 2009:502-506
〔3〕邸锐.OGRE 3D游戏开发框架指南[M].电子工业出版社,2010.
〔4〕Zhen Chen.Design and Implementation of OGREBased Game Scene Editor Software[C].Computational Intelligence and Software Engineering(CiSE),2010:1-4.
〔5〕舒畅,梁英伦,王大为.基于3Dmax和OGRE的某型装备视景仿真研究[J].指挥控制与仿真,2009,31(5):78-80.
〔6〕http://newtondynamics.com.
TP391.9
A
1673-260X(2012)07-0022-02
安徽三联学院院级项目“一种低成本的双目立体显示方案研究及应用”(2012013)资助