碰撞检测在三维场景漫游中的研究与实现
2012-09-29王良燕
王良燕,高 敏
(安徽三联学院,安徽 合肥230601)
虚拟现实是当今计算机领域的一项热门技术,其中一个重要功能是虚拟三维漫游,实现这一功能需要借助计算机图形引擎。OGRE[1]是一款专门处理三维场景的图形引擎,具有开源免费、跨平台等多种优点,目前在虚拟现实领域已有非常广泛的应用[2-3]。
实现三维漫游需要考虑的一个重要问题是碰撞检测,OGRE引擎本身不具备这项功能,需要借助第三方引擎实现,常用的第三方引擎库有 Newton[4]、ODE[5]等。Newton在碰撞检测方面性能更出色,它是一款开源免费的碰撞检测引擎库,OgreNewt是对Newton库的一层面向对象封装。可以结合OgreNewt和OGRE,在三维场景中实现碰撞检测功能。本文主要探讨如何在OGRE基础上,结合OgreNewt及Newton库,实现具有碰撞检测功能的三维漫游系统。
1 OGRE、Newton和 OgreNewt
OGRE是用C++开发的跨平台的3D引擎,底层基于OpenGL和DirectX实现,具有高效的三维场景管理性能,能很好地兼容第三方库以实现一些特定功能。一个基本的 OGRE系统主要包括 Root、SceneManager、Entity、SceneNode、Material和Camera等几部分。Root是整个系统的入口点,通过它可以获取系统中的其他对象。Entity是三维物体模型,Material是模型的材质,每个Entity都挂载到一个SceneNode上,所有SceneNode共同组成一个树状结构,由SceneManager统一管理。通过Camera来实现观看场景。
OGRE引擎通过OgreNewt与Newton库衔接。OgreNewt通过Newton库中的一些基本的元素来描述物理世界,主要包括World、Collision和 Body等。World是最基本的类,通过它可以建立一个空间,所有其他物体都在这个空间里创建。空间中的物体参加碰撞检测时需要有一个包围盒,通过包围盒计算来判断是否发生了碰撞,Collision用于定义包围盒的形状,基本形状有Boxes、Ellipsoids、Cylinders、Capsules等。……
