这是一本优秀的书,这个中文版也是极好地,译者是我QQ群里的网友,陆陆续续用一年翻完,却没有多少人看到,因为最近发现ogre3d.cn关门大吉了,谷歌了一下更没有第二家转载,我心想,哎呀,这么好的东西以后再找不到怎么办啊,斗胆就此转了。 

       译者名单:

前言部分              琳琳

第一章                  程光曦微

第二章—第九章    呢喃的歌声

第十章                  Fss

 

译者的话:

经过了整整一年这本书终于翻译完成了。在这里祝福大家新年快乐。
首先要感谢和我一起翻译的朋友 琳琳 程光曦微 Fss,和你们合作我感到十分的荣幸。
还要感谢 锐哥(免费打工仔),林公子, °小夏。°,  Quan┃ ,衿青, POPY在翻译过程中给的无私而且给力的帮助,正因为有了他们才能保证这本书能更高质量的翻译。
再次要感谢我的朋友 pizza Freshair 木叶恋,正因为你们让我认识到我的不足,和你们暑假在一起做饭写程序的日子,我至今还记忆犹新。
最后,要感谢支持我的朋友们。一年时间的却不算短,整因为你们的耐心和鼓励才终使我翻译完这本书,在这里表示衷心的感谢。
 

翻译声明:

本人仅仅英语六级水平,因为喜欢翻译和喜欢Ogre,翻译以下文字,如果哪里有错误或不足还望大虾们见谅,如果您发现有什么错误,请把问题发送到   whistleofmysong@gmail.com 或者在我的博客 www.singmelody.com 留言,我将尽快的改正。这对他人是个帮助,对自己也是个鼓励~^_^

 

相关法律

 

《中华人民共和国著作权法》

第二节       著作权归属
 
第十二条  改编、翻译、注释、整理已有作品而产生的作品,其著作权由改编
、翻译、注释、整理人享有,但行使著作权时,不得侵犯原作品的著作权。
  
第四节  权利的限制
第二十二条  在下列情况下使用作品,可以不经著作权人许可,不向其支付报酬,但应当指明作者姓名、作品名称,并且不得侵犯著作权人依照本法享有的其他权利:
               

(六)为学校课堂教学或者科学研究,翻译或者少量复制已经发表的作品,供

教学或者科研人员使用,但不得出版发行;

 

相关资源:

 

Ogre 3D wiki:http://www.ogre3d.org/tikiwiki/

Ogre 3D中文wiki: http://ogre3d.cn

本书源代码地址: http://download.csdn.net/detail/chinarpgmaker/4031545

 

相关建议:

建议大家结合着Ogre官方的wiki一起看,虽然是英文,但是可以原滋原味的理解清除Ogre到底是怎么回事。还有一本非常好的Ogre的书 《OGRE 3D 程序设计》 , 这本书详细的讲解了Ogre的原理部分。此书重点在于入门,应用和基础概念的讲解。重点的章节为第六章,第七章和第九章

 

前言  。。。。 我就省了吧。

 第一章 安装Ogre 3D引擎

 

   想要学习并且使用Ogre,就要先下载并安装它. 

 

  在这章,我们将会学习到: 

 

       * 下载并安装Ogre 3D引擎

       * 配置好Ogre 3D引擎的开发环境

       * 用Ogre 3D引擎构建第一个场景

   那我们就开搞了。

 

【 下载并安装Ogre 3D引擎 】

 

   我们要干的第一步就是安装并配置Ogre 3D引擎 

 

  实践时刻——下载并安装Ogre 3D引擎 

 

  为了后面的使用,现在我们就要下载安装Ogre 3D SDK了 

 

1.打开http://www.ogre3d.org/download/sdk. 的链接 

 

 2.下载合适的安装包。如果你对要下载哪个正确的安装包而需要帮助时,那就看看后面的“刚刚发生了什么”这一部分 

 

 3.把SDK的安装程序复制到你希望把OgreSDK放置的文件夹里 

 

4.双击安装程序,这会启动一个自解压缩程序 

 

5.现在你应该得到一个名字类似于OgreSDK_vc9_v1-7-1的文件夹 

 

6.打开该文件夹。文件夹的内容应该像下面的截图 

 

【 刚刚发生了什么?】

  我们刚刚只是下载了一个适合我们操作系统的Ogre 3D SDK。Ogre 3D引擎是一个跨平台的渲染引擎,所以对于不同的操作系统就有不同的开发包。下载完Ogre 3D SDK我们解压了它。 

 

【 不同版本的Ogre 3D SDK 】

   Ogre支持多种平台,正因为如此,有很多种不同的开发包供我们下载。Ogre 3D在Windows有好几个版本,有一个支持MacOSX的版本还有一个支持Ubuntu的版本。而且还提供了支持MinGW和iPhone的开发包。如果你愿意的话,你还可以下载Ogre的源码然后自己手动编译Ogre。这一章我们主要关注于预先编译好的Windows的SDK和如何配置你的开发环境。如果需要关于其他的操作系统的,你可以参考Ogre 3D Wiki,网址为:http://www.ogre3d.org/wiki。Wiki包含了对很多不同的平台下的Ogre开发环境的配置的教程。这本书的剩余部分和使用的平台是完全独立的,所以如果你想使用其他的开发平台,随你便啦。它不会影响到本书的内容和对编译系统的配置与约定。 

 

【 探索SDK 】

  在我们编译SDK里面的示例之前,让我们先来看看SDK。我们来看看Windows操作系统上的SDK结构。在Linux和MacOS上可能会有所不同。首先,我们打开bin这个文件夹。这里面会有两个文件夹,即debug和release文件夹。对于lib文件夹里面也是如此。这里面的原因是在于Ogre 3D SDK对其库文件和动态链接库文件有debug和release两种编译方式。这就使得我们可以在开发过程中使用debug模式来调试我们的项目。完成项目后,可以使用release模式来编译得到完整的Ogre 3D程序。 

  不论打开debug或者release文件夹,我们都可以看到有很多的dll文件,一些cfg文件还有两个可执行文件(exe)。可执行文件是为了把Ogre升级到一个新的版本,所以在此对我们来说没有啥用处。 

  OgreMain.dll是最重要的DLL文件。后面编译的Ogre 3D程序都会用到它。所有名字以Plugin_开头的DLL文件是Ogre 3D程序可以使用的插件。Ogre 3D插件是使用Ogre 3D提供的接口来给Ogre 3D添加新功能的动态链接库文件。插件可以提供任何东东,但是它常常是用来添加一些特性例如更好的粒子系统或者新的场景管理器。这些东西后面会谈到的。Ogre 3D社区提供了很多的插件,大部分可以在wiki中找到。SDK中只是包含了最近常用的插件。在本书后面,我们会学习如何去使用它们。名字以RenderSystem_开头的DLL文件,不要惊讶啊,是为了封装起来针对于Ogre 3D所支持不同的渲染系统。在这里所指的是Direct3D9和OpenGL。除了这两个系统,Ogre 3D还支持Direct3D10、Direct3D11和OpenGL ES(支持嵌入式系统的OpenGL)渲染系统。  

  除了可执行文件和DLL文件,还有一些cfg文件。所谓的cfg文件就是Ogre 3D程序可以加载的配置文件。Plugins.cfg列出了Ogre 3D程序启动时所要加载的全部的插件。这些通常是Direct3D和OpenGL渲染系统还有一些附加的场景管理系统插件。当加载Quake3格式的地图时需要quakemap.cfg这个配置文件。我们用不上这个文件,但是有个例子用得上。 

   resources.cfg包含了所有的资源的列表,例如一个3D网格、纹理或者动画,这些都是Ogre 3D启动时需要加载的。Ogre 3D程序可以从文件系统或者一个ZIP压缩文件中加载资源。我们如果看看这个resources.cfg文件内容就可以得到以下几行: 

 

Zip=http://www.cnblogs.com/media/packs/SdkTrays.zip

FileSystem=http://www.cnblogs.com/media/thumbnails

 

  ZIP=意味着那些资源文件是存在ZIP压缩包里的,FileSystem=意味着要加载一个文件夹里的内容。resources.cfg使得加载新的资源和改变资源的路径非常容易,所以它常常被用来加载资源,特别是被Ogre的例子程序所使用。来说一下示例程序,文件夹中的最后一个cfg文件是sample.cfg。我们自己用不上这个文件。其实它包含着一个SampleBrowser(示例浏览器)程序所需加载的所有Ogre示例列表。但是我们还没搞到SampleBrowser,所以就要搞一个出来。 

 

【 Ogre 3D示例程序 】

  Ogre 3D SDK附带了很多的示例,这些示例展示了Ogre 3D所拥有的不同种类的渲染效果和手法。在我们开始编写我们自己的程序之前,为了加深Ogre程序的功能我们先来看看这些示例。 

 

【 实践时刻——构建Ogre 3D示例程序 】

  为了先看看Ogre 3D到底能干嘛,我们会构建示例程序并且看看它们。

  1. 找到Ogre3D的文件夹
  2. 打开Ogre3d.sln解决问题方案文件
  3. 在解决问题方案上右键选择“构建解决问题方案”
  4. Visual Studio会构建示例程序,这会消耗掉一些时间,所以在编译没有完成之前最好是泡上杯茶喝喝
  5. 若一切顺利,找到Ogre3D/bin文件夹
  6. 运行SampleBrowser.exe.
  7. 然后你应该看到如下给力的结果: 

 

8.试试运行不同的示例程序来看看Ogre 3D带来的精彩的特效。 

 

 

 

【 刚刚发生了什么?】

 

   我们使用自己的Ogre 3D SDK构建出Ogre 3D示例。在此之后,我们会有一个Ogre 3D开发的副本 

 

 

 

【 突击测验——示例程序里展示了哪些后期效果 】

 

 

 

  1.列举至少5种在示例程序中展示了的不同后期效果

 

  1. 模糊,玻璃特效,旧电视感觉,黑白效果和倒置
  2. 模糊,玻璃特效,旧显示器感觉,黑白效果和倒置
  3. 模糊,玻璃特效,旧电视感觉,颜色和倒置 

 

【 第一个Ogre 3D程序 】

 

   在这一部分,我们会创建一个只有一个3D模型的Ogre 3D程序。 

 

 

【 实践时刻——创建项目并配置IDE(集成开发环境)】

 

 

 

   由于用到了其他的一些库,在使用Ogre 3D SDK之前我们需要配置IDE

 

  1. 新建一个空工程
  2. 在工程里新建一个文件,命名为main.cpp
  3. 添加一个main方法:

 

int main (void)
{
return 0;
}

 

 

  1. 在该文件开头部分包含上ExampleApplication.h文件:

 

#include "Ogre\ExampleApplication.h"

 

  1. 添加“你的Ogre SDK路径\include\”到你的项目include path(头文件路径)
  2. 添加“你的Ogre SDK路径\boost_1_42\”到你的项目include path(头文件路径)
  3. 添加“你的Ogre SDK路径\boost_1_42\lib\”到你的项目lib path(库文件路径)
  4. 向main.cpp里添加一个类:

 

class Example1 : public ExampleApplication
{
  public:

  void createScene()
  {

  }
};

 

 

  1. 把下面的代码添加到你的main函数里:

 

Example1 app;


app.go();
  1. 添加“你的Ogre SDK路径\ lib\debug\”到你的项目lib path(库文件路径)
  2. 添加OgreMain_d.lib到需要的链接库(工程属性的Linker->Input)里
  3. 添加OIS_d.lib到需要的链接库(工程属性的Linker->Input)里
  4. 编译此项目
  5. 设置项目程序的工作空间(working directory)为“你的Ogre SDK路径\bin\debug”
  6. 运行该程序,你应该能够看到Ogre 3D setup对话框 】

 

  按下OK按钮启动应用程序。你会看到一个黑色的窗口。按下Esc键退出程序。 

 

【 刚刚发生了什么?】

   我们创建了第一个Ogre 3D程序。为了编译它,我们需要设置好不同的头文件路径和库文件路径以便于编译器能够找到它们。 

  在第5和第6步,我们在构建环境中添加了两个头文件的路径。第一个路径是Ogre 3D SDK的头文件文件夹,它包含着所有Ogre 3D和OIS(OIS是Object Oriented Input System的简称,意为“面向对象的输入系统”,ExampleApplication使用OIS监视用户的输入)的头文件。OIS不是Ogre 3D中的一部分;它是一个独立的项目并且有一个不同的开发团队在开发。它出现在Ogre 3D是因为ExampleApplication使用了它,所以用户不需要去下载它的依赖文件。 ExampleApplication.h也在那个文件夹中。由于Ogre 3D提供线程支持,所以我们需要把boost文件夹添加入头文件路径。否则的话,我们用Ogre 3D引擎什么程序也编译不了。如果需要的话,Ogre 3D可以直接从源码编译,那样的话可以取消线程支持也就取消掉了boost文件夹的需求。当使用boost的时候,编译器需要链接到boost的库文件。所以我们添加了boost的库文件文件夹到lib path(见第7步)。 

   在第10步中,我们把“你的Ogre SDK路径\ lib\debug\”添加到了库文件路径之中,像前面所说的那样,Ogre 3D有debug库和release库。在这里我们使用debug库,因为如果出现错误,debug库提供调试支持。当想使用release库的时候,要把“lib\debug”改为“\lib\release”。对于第11步和第12步也是如此。在那两步中我们添加了OgreMain_d.lib和OIS_d.lib作为需要链接的库文件。当想使用release版本的时候,要改成OgreMain.lib和OIS.lib。OgreMain.lib和OgreMain_d.lib文件包含着Ogre 3D程序的接口信息和怎么样加载OgreMain.dll或OgreMain_d.dll。注意OIS.lib或OIS_d.lib对于输入系统也是如此——他们加载OIS_d.dll或OIS.dll。所以我们动态的链接Ogre 3D和OIS,这样使得我们可以切换DLL而不需要重新编译程序,只要接口和库没有变化而且DLL使用相同的运行库版本。这也就要求程序时刻需要加载DLL,所以要确保程序能够找到那些DLL。这也就是我们为啥要在第14步设置工作空间。还有一个原因会在后面的部分澄清。 

 

 

【 ExampleApplication (Ogre SDK中的一个类)】

  我们创建了一个新的类,Example1,它继承于ExampleApplication。ExampleApplication是Ogre 3D SDK提供的一个类,它是为了使学习Ogre 3D简单一些而在Ogre 3D上附加了一个抽象层。ExampleApplication为我们开始学习Ogre提供了帮助,它可以加载不同的模型,而且声明了一个可以在场景中四处游览的简单camera(摄像机)。使用ExampleApplication需要继承于它并且重载虚函数createScene()。我们会使用ExampleApplication类,这样的话可以省下不少的时间。等到对Ogre 3D有了很好的了解之后,我们会用自己的代码一点点的替换掉ExampleApplication。 

  在main函数里,我们实例化了一个新的类并且调用了go()函数来启动应用程序并加载Ogre 3D。在启动时,Ogre 3D加载3个配置文件——Ogre.cfg、plugins.cfg和resources.cfg。如果使用的是debug模式,所以要每个文件名字后面要加上“_d”。这个非常有用因为对debug和release有不同的配置文件。Ogre.cfg包含着在setup对话框中选择的设置,所以每次程序启动它加载相同的配置。plugins.cfg包含Ogre需要加载的插件列表。最重要的插件是渲染系统插件。它是Ogre和OpenGL或DirectX渲染场景的接口。resources.cfg包含着Ogre启动时需要加载的资源列表。Ogre 3D SDK附带了很多的模型和材质,本书会用到这些,resources.cfg指出了他们的路径。如果你深入了解resources.cfg,你会发现这个文件中的路径都是相对路径。这也是我们需要设定工作空间的另一个原因。 

 

【 突击测验——要链接哪个库 】

 

 

1.当使用Ogre 3D的release模式的时候,你认为要链接哪些库?

  1. OgreD3DRenderSystem.lib
  2. OgreMain.lib
  3. OIS.lib

2.当想使用Ogre 3D的debug模式的时候,你认为该做哪些改变?

a.在库文件名后面加上“_debug”

b.在文件扩展名后面加上“_d”

c.在库文件名后面加上“_d” 

 

【 加载第一个3D模型 】

 

加载一个模型很容易。只需要加上下面两行代码

  1. 把下面两行代码加入到空的createScene()方法中:
Ogre::Entity* ent = mSceneMgr->createEntity("MyEntity","Sinbad.mesh");

mSceneMgr->getRootSceneNode()->attachObject(ent);
  1. 再次编译你的程序
  2. 启动程序。你会看到一个小的绿色的东东。
  3. 使用鼠标四处浏览场景,使用“WASD”移动视角直到看着感觉绿色的东东在视角中比较合适
  4. 关闭程序 

 

 

 

 

【 刚刚发生了什么?】

 

  使用mSceneMgr->createEntity("MyEntity","Sinbad.mesh");,我们告诉了Ogre我们想创建一个Sinbad.mesh模型的实例。mSceneMgr是Ogre 3D中指向SceneManager(场景管理器)的指针,这个指针由ExampleApplication为我们创建。为了创建一个新的entity(实体),Ogre需要知道使用哪个模型文件,而且我们可以给新的实例起一个名字。这个名字是独一无二的非常重要,它不可以被用两次。如果发现了使用两次,Ogre 3D会抛出一个异常。如果没有起一个名字,Ogre 3D会自动生成一个。后面我们会详细的讲到。 

 

  现在我们有了一个模型的实例,为了使它显示出来,我们需要把它附加在场景之中。添加场景很容易——只要加上下面一句话:

 

mSceneMgr->getRootSceneNode()->attachObject(ent);

这样的话,附加实体到场景中以便我们能够看到它。我们所看到的是个水手,是Ogre 3D模型的吉祥物。贯穿这本书我们将看到很多次这个模型。 

 

 

 

【 突击测验——ExampleApplication和怎样显示出一个模型 】

 

  用自己的话说说怎样加载一个模型并且使其可见。 

 

 

 

【 总结 】

 

  我们学习了Ogre 3D SDK是如何组织的,哪些库是需要链接的,还有哪些文件夹是需要加入头文件路径。而且,我们瞄了一眼ExampleApplication这个类并且学习了如何去使用它。我们加载了一个模型并且显示了出来。明确一下,这一章包含了:

 

  1. 哪些文件对于Ogre 3D开发是重要的,它们怎么相互影响,还有它们的作用是啥
  2. ExampleApplication是干嘛的:它是怎样节省工作量的,Ogre 3D程序启动时干了什么
  3. 模型加载:我们学会了使用createEntity来创建一个新的模型实例,学会了一种把新实例附加到场景中的办法

 

在这些关于Ogre 3D的介绍之后,我们将在下一章学习Ogre 3D怎样管理场景并熟练地操纵场景。 

第一章 end