教程的目的
本教程的目的是从使用者的角度将OGRE引擎最基本的概念和使用方法做一个较全面的介绍。本教程隐藏了OGRE引擎内部的底层内容,力求做到简单、易懂,是OGRE引擎的入门教程。
Mage小组的另一篇教程<<OGRE设计笔记>>正在整理中,它的目的是剖析3D图形引擎的源码,分析其架构,并在此过程中深入讲解设计模式与OOA/D在游戏开发中的应用。
读者要求
对游戏编程感兴趣。
虽然在使用OGRE过程中我们看不到被封装起来的图形API(OGRE支持所有的渲染API)。但至少你使用用过一种图形API(如DirectX),并对图形编程有一定的认识。
虽然在使用OGRE过程中我们看不到被封装起来的操作系统API(OGRE支持所有的操作系统)。但是至少你要使用过系统API(比如Windows
API)。
教程的由来
Mage小组是由中国农业大学的几个在校学生组成的,我们由于共同的爱好起到了一起。
大二那年暑假(2002年)我们三个人花了40天的时间写了三万行代码,做了一个游戏Demo,通过这次实践,我们意识到了自己的差距:从来没有对游戏引擎做过设计,全部是硬编码(有3万行),这导致了游戏难于扩充与效率低下。
总结暑假的教训,我们意识到了游戏引擎的重要性。于是花了4个月的时间深入剖析了OGRE(Object-Oriented
Graphics Rendering
Engine)的源码,做了大量实践。通过OGRE教程深入理解了设计模式,UML,面向对象分析与设计在游戏引擎设计中的作用。我们已经开始在OGRE引擎的基础上搭建自己的游戏引擎,充分体会到了面向对象图形引擎的灵活性与效率。
观察国内的游戏论坛,我们不难发现,有一些人认为学会图形API就可以编写出大型游戏,有些人在学过DX或OGL后不知该如何继续深入而放弃了游戏开发,论坛里对图形引擎的讨论少之又少。其实,图形引擎(OGRE只是图形引擎)只占游戏引擎的20%~30%,其它的还包括网络模块、物理(动力学)系统、人工智能(Game
AI)、音乐等等。
现在我们把学习OGRE过程中的心得体会拿出来与大家分享,希望能引起大家对图形引擎,游戏引擎的注意。共同营造国内游戏程序员们的良好交流气氛。
OGRE简介
OGRE(面向对象的图形渲染引擎)是用C++开发的面向对象且使用灵活的3D引擎。它的目的是让开发者能更方便和直接地开发基于3D硬件设备的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其它类。
OGRE特点
效率特性
简单、易用的面向对象接口设计使你能更容易地渲染3D场景,并使你的实现产品独立于渲染API(如Direct3D/OpenGL/Glide等等)。
可扩展的程序框架(framework)使你能更快的编写出更好的程序。
为了节省你的宝贵时间,OGRE会自动处理常见的需求,如渲染状态管理,hierarchical
culling,半透物体排序等等。
清晰、整洁的设计加上全面的文档支持。
平台和3D API支持
支持Direct3D和OpenGL
支持Windows平台,用Visual C++ 6(或Visual
C++.Net)和STLport来编译。
支持Linux平台,用gcc 3+(或gcc 2.9x)和STLport来编译。
材质/Shader支持
支持从PNG、JPEG或TGA这几种文件中加载纹理;自动产生MipMap;自动调整纹理大小以满足硬件需求。
支持可程序控制的纹理坐标生成(如环境帖图)和转换(平移、扭曲、旋转)。
材质可以拥有足够多的纹理层,每层纹理支持各种渲染特效,支持动画纹理。
自动应用多通道渲染和多纹理,从而大幅度提高渲染质量。
支持透明物体和其它场景级别的渲染特效。
通过脚本语言可以不用重新编译就设置和更改高级的材质属性。
网格Meshes
高效的网格数据格式
提供插件支持从Milkshape3D导出OGRE本身的.mesh和.skeleton文件格式。
支持骨骼动画(可渲染多个动画的组合)
支持用贝赛尔样条实现的曲面
场景特性
拥有高效率和高度可配置性的资源管理器,并且支持多种场景类型。使用系统默认的场景组织方法,或通过亲自编写插件使用自己的场景组织方法。
通过绑定体(如绑定盒)实现的场景体系视锥拣选。
提供的BspSceneManager插件是快速的室内渲染器,它支持加载Quake3关卡和shader脚本分析。
优秀的场景组织体系;场景结点支持物体的附属(attach),并带动附属物体一起运动,实现了类似于关节的运动继承体系。
特效
粒子系统包括可以通过编写插件来扩展的粒子发射器(emitter)和粒子特效影响器(affector)。通过脚本语言可以不用重新编译就设置和更改粒子属性。支持并自动管理粒子池,从而提升粒子系统的性能。
支持天空盒、天空面和天空圆顶,使用非常简单。
支持公告板,以实现特效。
自动管理透明物体(系统自动帮你设置渲染顺序和深度缓冲)
其它特性
资源管理和文档加载(ZIP、PK3)。
支持高效的插件体系结构,它允许你不重新编译就扩展引擎的功能。
运用'Controllers'你可以方便地改变一个数值。例如动态改变一个带防护罩的飞船的颜色值。
调试用的内存管理器负责检查内存溢出。
阅读全文
( Word Document,4.2MB )
3D引擎DEMO介绍
我们暑假3个人,做了40多天,利用了原来的技术积累和代码。
该引擎定位为室外引擎,目前技术特性有:
基于高度图的多边形地形
LOD地形算法
细节纹理
粒子系统
3D模型支持(MD2、MD3、3DS)
天气效果
公告板植物(3D模型植物也可以,但没找到模型,哪位大侠可以提供一点三角型数量较少的3D植物模型)
包围盒碰撞检测(目前没有实现细节碰撞检测)
支持BMP、JPG、TGA纹理格式
精灵管理、动画管理
|