基于OGRE游戏场景实现论文
- 格式:doc
- 大小:23.50 KB
- 文档页数:4
基于OGRE的游戏场景实现
中图分类号:tp 文献标识码:a 文章编号:1007-0745(2011)11-0085-01
摘要:通过ogre等开源引擎和编辑器实现游戏场景,可操控人
物与视角跟随摄像机。
关键词:ogre cegui 开源引擎游戏场景
本文旨在实现一个包括骨骼动画,角色控制,摄像机跟踪与截
断,物理碰撞,骨骼绑定,地形渲染,场景编辑,gui,以及粒子
特效的第三人称可漫游场景。
所需工具包括ogre图像引擎,physx物理引擎,cegui界面引
擎,以及ogre社区的qtogitor场景编辑器等。
同时对qtogitor
的中文化进行了支持。
在visual studio 2010下基于directx 9.0c
实现。
1.引擎与工具介绍
1.1 ogre3d图像引擎
ogre(object-oriented graphics rendering engine,即:面
向对象图形渲染引擎)是一个用c++开发的面向场景、非常灵活的
3d引擎。
架构做的非常通用,虽然对效率有较大影响,但不得不说它的
代码和设计还是非常优雅的。
1.2 physx物理引擎
nvidia(英伟达)physx是一款功能强大的物理效果引擎。
其作
用,简而言之,就是令虚拟世界中的物体运动符合真实世界的物理定律,以使游戏更加富有真实感。
这是比较难掌握的,因为涉及各种物理学知识,并且资料过少,国外社区也不是很活跃,但是有着非常规范的文档且功能强大,接口易于使用。
2.具体实现
2.1基础架构设计,尽量做到灵活轻便
首先是基础架构的设计,这块主要参考ogre提供的标准框架结合自己的一些改进而成,包括渲染逻辑,输入逻辑,ui逻辑,i/o 逻辑等。
依托ogre提供的帧渲染循环和监听机制,实现各种逻辑的循环处理。
2.2 内容实现
架构搭好后,该往其中填充内容了。
我主要实现了,角色控制,骨骼动画,跳跃逻辑,动作混合,骨骼绑定,摄像机跟随与截断等。
2.21 角色控制为响应键盘鼠标输入播放不同的骨骼动画,通过cegui的framelistener来响应按键:w,a,s,d分别为前后左右,按住鼠标右键移动鼠标可移动视角,按空格跳跃,按e角色转圈舞蹈,按q拿起武器,按z拿起盾牌,按左键为拳击或砍杀。
virtual event::connection subscribeevent(const string& name, event::subscriber subscriber);
2.22 骨骼动画通过ogre的相关接口配合逻辑实现:
class _ogreexport animationstate : public animationalloc
2.23 跳跃逻辑则结合physx内的物理仿真系统来实现,人物的物理由其胶囊体nxcontroller实现:
nxcontrollermanager* mmanager; nxcontroller* mcontroller;
2.24 骨骼绑定则通过ogre中entity的接口实现:
tagpoint* entity::attachobjecttobone(const string
&bonename, movableobject *pmovable, const quaternion
&offsetorientation, const vector3 &offsetposition)
2.25 摄像机跟随与截断依托于ogre的camera,scenenode,terrain以及physx的scene与射线查询,再配合处理逻辑,基本做成魔兽世界的风格,并消除抖动问题:
void mycameracontroller::setup()
void mycameracontroller::update(float deltatime)
void mycameracontroller::updategoal(float
pitchangle,float yawangle,float deltazoom)
2.3 需注意的问题
其中需要注意一些问题,譬如各种库之间的编译与搭配问题,比如cmake的构建,库与库的结合,以及版本之间的搭配,编译链接选项的搭配等等。
3.效果展示
通过之前一系列的准备创建工作,基本实现了所要达到的效果:
4.结论
本文基本实现了一个较灵活的场景架构和具备基本功能的演示demo。
同时,利用开源界的优秀软件和工具能帮助独立游戏开发者达成自己希望实现的目标,同时又极大的从技术上帮助了爱好者,为各大游戏公司输送人才提供了良好的储备。
参考文献:
[1]ogre官方主页[eb/ol.]
[2]physx开发者官方主页[eb/ol.]
/physx
[3]cegui 官方主页[eb/ol.]
/wiki/index.php/main_page。