【Ogre编程入门与进阶】第一章 Ogre3D概述

来源:互联网 发布:dnf最新版数据芯片搬砖 编辑:程序博客网 时间:2024/05/01 13:46

        如果第一次接触Ogre,相信不少读者会像笔者曾经一样,不认识这个英文单词。翻开字典,我们可以查阅到,Ogre这个英文单词的读音是:['əugə],翻译成中文是食人魔、怪兽的意思,而且它还是Object-oriented Rendering Engine(面向对象的图形引擎)的首字母组合。因此,Ogre官方将它的Logo图标设定为了一个可爱的绿色食人魔,如下图所示:

        那么,Ogre到底是一个什么东西?它到底可以用来做什么呢?下面,我们就来揭开它神秘的面纱。

        Ogre(Object-orientedRendering Engine ),是一个面向对象的图形引擎。它最大的优点在笔者看来,是开源性。Ogre是开源的,这样我们就可以通过查看源码的方式,更好的了解其内部构造和工作原理。另外,Ogre经过多年的发展已日趋成熟,这样一来,使用Ogre开发3D程序就变得非常安全可靠。

        Ogre是一个用C++开发的图形库,它隐藏了底层系统库(如:Direct3D和OpenGL)的所有细节,让开发一个3D程序不再那么复杂,程序编写人员可以调用已经封装好了的Ogre类来轻松实现需要的功能,可以说,Ogre让开发一个复杂的3D程序变得非常简单和容易。

 

笔者注:

        Ogre功能非常强大。另外,它有一套插件系统,可以随时将我们需要的功能以插件的形式添加进系统中去,这样就实现了功能的横向扩展;而且,当我们不再需要这个功能的时候,只需要简单的将这个插件删除就可以了,这种便利的操作也大大提高了Ogre的灵活性。

        另外,Ogre有一个专门的核心小组在其身后对其进行开发和维护。其他团体和开发小组也可以根据自己的需要,在Ogre基础上,对其进行功能的改造和扩充,以满足自己的需求。

1.2 Ogre的起源

        在20世纪八九十年代,ID公司的约翰·卡马克开发了一个3D游戏引擎。为了让更多的人看到并学习这个3D游戏引擎的内部构造以及它是如何实现的等技术细节,他将源代码公开,放到了自己的网站上。后来英国的Steve“Sinbad”Streeting看了约翰的代码,感触很深。Steve当了10年的软件工程技术人员,他觉得卡马克开发的3D游戏引擎完全可以变得更加完美,例如,卡马克的引擎太过注重最终的渲染效果,而忽略了游戏引擎的可扩展性、灵活性和通用性。经过认真的思考,Steve决定自己开发一个更加完美游戏引擎。

        为了避免重复造轮子,Steve充分借鉴前人的经验,为自己的引擎制定了详细的规划和开发原则。其中最让人激动地莫过于他的开源性,而且不同于卡马克的“先商业后开源”,他从一开始就将其完全开源。另外,Steve充分考虑到了计算机技术发展的迅速性,他猜想到10年、20年甚至更长时间以后,自己开发的游戏引擎可能会落后于那时的计算机技术,导致引擎被淘汰,所以,他将自己的游戏引擎设计成了“核心加插件”形式,即引擎有一个核心的功能,然后可以根据计算机技术的不断发展以及不同程序编写团队的需要灵活的增加功能,功能是以插件的形式添加或移除,操作非常方便。这样一来,Steve的游戏引擎就可以永葆青春了。

        另外,Steve曾经编写过一个名为“DIMClass”的Direct3D库,这个库也是面向对象的。然而,由于“DIMClass”这个名字本身毫无特点,无法一下子给人留下深刻的印象,所以,“DIMClass”这个库并没有得到很好的发展。Steve这一次吸取了“DIMClass”失败的教训,打算为新的游戏引擎起一个响亮的名字,让人过目难忘。当时,为新的引擎起名字流行使用首字母的缩写,Steve也决定这样做,它将“面向对象的图形渲染引擎(Object-oriented Rendering Engine)”的首字母进行了提取,即为OGRE,同时他还发现OGRE在英文中有食人魔、怪物的意思,当即就确定使用OGRE作为新的引擎的名字。

 

课外链接:

        Steve在某次接受采访时,谈到了Ogre名字的来历,他开玩笑的说:“我觉得食人魔(Ogre)这个名字并没有什么不好,至少食人魔是绿色的,显得更环保一些”。

 

        2001年,Steve正式创建了Ogre。

 

课外链接:

        Steve在谈起为什么设计另外一个3D渲染引擎的时候,曾说到:

“很多的引擎,在技术上吸引人的同时,却缺乏紧凑的设计和完善的开发文档。它们虽然拥有众多的特性,但是缺乏一致和直观的技术演示。正如同其他很多软件系统一样,随着时间而逐渐变的庞大和衰落。另外还有很多引擎只是针对某一特定类型的游戏或者演示而开发(如,第一人称射击游戏,地理场景漫游)。

而OGRE是如此与众不同,在它的理念中设计总是先于功能的实现。每一个加入OGRE的特性,都经过了慎重的考虑,尽可能的完善设计并伴随完整的文档,这意味着新功能会完美的融入整个体系之中。它严格遵循着质量重于数量的原则,因为拥有良好的质量就具备了持续发展的可能,简单数量累积并不能解决这个问题。OGRE遵循面向对象的设计理念,并借鉴在商业领域广泛使用的设计模式等技术。我们的核心团队刻意的保持精简,他们所有人都是在真实世界中拥有多年软件工程经验的的工程师。同时也欢迎从社区中脱颖而出的人才加入到核心团队中来,但一定要经过严格的考核,确认他符合“食人魔(Ogre)”的精神——强壮且团结,这样才可以被接纳。”

 

1.3 Ogre3D SDK

        在介绍SDK之前,我们先介绍两个与SDK相关的概念:DLL、API与SDK。

        DLL(Dynamic Link Library)是动态链接库的缩写,在Windows操作系统中有很多.dll动态链接库文件。Dll文件也是一种可执行文件格式,与.exe可执行文件不同的是,它们不能直接执行。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。这样,当我们要执行某一个程序时,系统就会自动调用相应的DLL文件。综上所述,一个应用程序可由多个DLL动态链接库文件组成,一个DLL文件也可能被几个应用程序所共用。另外,DLL文件一般被存放在C:\Windows\System目录下。

        API(Application Programming Interface),应用程序编程接口,是一些在系统底层预先定义的函数,是底层系统提供给上层应用程序的具体操作方法。在Windows系统中它包含在Windows系统目录下的动态链接库(DLL库)文件中,用来实现系统一些最基本的功能。换句话说,操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令。而且,凡是在Windows工作环境下执行的应用程序都可以调用Windows底层的API函数。

        SDK(Software Developers Kit)是软件开发包,我们可以把它理解为开发一套完整程序所用到的资源的集合。对程序编写人员来说,SDK是一套对系统底层的服务的封装,程序编写人员往往可以抛开复杂的系统底层API,而仅需简单的调用SDK提供的封装即可方便快捷的完成所需要的功能。

 

笔者注:

        除了上文中提到的,SDK还经常包括一些支持文档和帮助文档,包括示例代码、相应的封装的注解、说明以及其他的一些相关的帮助性文档。

 

        Ogre3D SDK为我们提供了一套完整的图形渲染库所需的全部资源。利用Ogre3D SDK,并配合第三方的GUI工具,我们可以开发出极具视觉效果且功能强大的3D游戏。另外,Ogre3D SDK内置两个版本:调试程序时使用的调试版(Debug)和正式发行程序时的发行版(Release)。

 

笔者注:

        在这里,希望读者朋友可以关注一下调试版(Debug)和发行版(Release)的区别:

        调试版(Debug),在编译时没有进行任何优化,而且附带地进行了内存检查以及变量的初始化等细节性的操作,有很小的错误,也无法编译通过。

        发行版(Release),在编译时最大化的优化了程序运行速度,放弃了内存检查以及变量的初始化等细节性的操作,容错性很强,即使有错误,只要不影响程序的运行,系统就不会报错。

 

1.4 Ogre能够做什么

        前三节里,我们已经介绍了Ogre的基础知识,Ogre的起源以及OgreSDK的相关概念。如果想对Ogre有一个更加深入的了解,只知道这些还远远不够。那么,Ogre到底能够用来做些什么呢?

        Ogre是一个出色的面向对象的图像渲染引擎,它经常被用来开发大型的3D游戏。然而,Ogre虽然常被用于开发游戏,但它不是一个游戏引擎,它只是一个图形渲染引擎,不关心其他相关的输入、网络、音频和视频等功能是如何实现的。例如:若利用Ogre开发一个3D游戏,基本的用户输入输出功能,需要使用第三方的OIS或是其他的GUI工具来实现。然而,这丝毫不能影响Ogre作为一个图形渲染引擎的出色程度。Ogre有很多独特的设计,例如它实现了场景节点与场景内容的完全分离、它利用插件系统可以使自身的功能进行不断的扩展,以实现更多更炫的功能效果等等。总之,作为一款图形渲染引擎,它可以满足你想要的一切。

 

笔者注:

        Ogre是一个图形渲染引擎,而不是一个游戏引擎。它不能处理用户输入输出,不能在开发游戏的时候实时的处理游戏的状态,无法支持网络、音频、视频等第三方功能。不过,Ogre可以很好的兼容很多的第三方库,利用Ogre再配合这些第三方库就可以轻松的开发出功能完善、效果完美的3D游戏。

 

1.5 结语

        Ogre是一个用C++开发的面向对象的图像渲染引擎。它经过多年的发展已经非常稳定,使用起来安全可靠。它对底层系统库(如:Direct3D和OpenGL)等进行了很好的封装,程序开发人员可以跳脱出调用系统底层API的繁琐操作,让开发3D图形系统变得更加容易、且更加得心应手。

        Ogre虽然可以开发游戏,但却不是游戏引擎,它只是一个图形库,负责处理图形相关的功能,不处理诸如用户输入、网络、音频和视频等相关的功能,不过,Ogre的扩展性四非常强的,它可以很好的兼容很多的第三方库,这些第三方库可以处理用户输入、网络、音频和视频等相关的功能。换句话说,Ogre可以通过自身的接口与这些第三方库完美相连,既扩充了自身的功能,也可以方便程序开发人员利用这些接口开发出功能完善的应用程序。

        Ogre几乎拥有了商业3D渲染引擎的全部特性,这些特性在用户的亲自体验中可以深刻体会到。




PS:很久以前就打算把学习Ogre中遇到的知识分享给大家(虽然只是一些皮毛),但是说来惭愧,一直很懒,直到最近才抽出点时间写一些自己的理解(Ogre入门级的东西),所以难免会有很多不足之处,分享是一种快乐,同时也希望和大家多多交流!

(由于在Word中写好的东西发布到CSDN页面需要重新排版(特别是有很多图片时),所以以后更新进度可能会比较慢,同时每章节发布的时间可能不一样,但是我会尽量做到不影响大家阅读,还望大家谅解。)


 上述内容很多引用了网上现有的翻译或者内容,在此一并谢过(个人感觉自己有些地方写得或者翻译的不好),还望见谅,转载请注明此项!




2 0
原创粉丝点击