文档库 最新最全的文档下载
当前位置:文档库 › OGRE一起学

OGRE一起学

OGRE一起学
OGRE一起学

第一章获取OGRE

OGRE 官方网站:

https://www.wendangku.net/doc/ae18172301.html,/

国内可能存在不能访问的情况,可以到这里寻找代理服务器,使用代理服务器来登录:

https://www.wendangku.net/doc/ae18172301.html,/plr.html

这是代理速度排行榜,其中除了灰色之外的代理都是匿名的。

首先,要使用 WinCVS 来下载和更新 OGRE 的 CVS 源代码。

WinCVS 是现今最流行的代码版本控制系统,可以使参与到同一个软件工程中的所有用户的代码保持同步更新。使用 CVS ,可以随时获取该工程的最新代码。如果你还没有安装 WinCVS ,先到这里下载:

https://www.wendangku.net/doc/ae18172301.html,/

WinCvs 1.3.20.2安装程序本地下载安装以后,先设置 WinCVS 的文件下载的根目录:

(1) 打开 WinCVS ;

(2) 从主菜单选择 [Admin]-[Preferences...] ,弹

出 "WinCVS Preferences" 面板,切换到 "CVS" 选项卡,在 "HOME" 里设

置 WinCVS 的下载文件夹,例如 "F:\cvshome" ,然后确定。如下图:

下面就可以开始下载 OGRE 的 CVS 源代码了:

(1) 在 WinCVS 主界面左栏选中 "cvshome" ;

(2) 从主菜单选择 [Admin]-[Command Line...] ,弹

出 "Command line settings" 面板,在 "Settings" 选项卡的上部输入框里,输入如下指令:

cvs -d:pserver:anonymous@https://www.wendangku.net/doc/ae18172301.html,:/cvsroot/ogre login

这是登陆 OGRE CVS 服务器的指令,输入以后按 [确定] 来运行就会开始登陆,成功连接到服务器以后还会弹出一个如下的对话框,问询你密码:

直接按回车就行了。OGRE 这种开源引擎的 CVS 都可以匿名访问,不需要密码,就是简单按一下回车。

(3) 成功登陆以后, WinCVS 主界面的下部信息栏会显示这样一条信息:

***** CVS exited normally with code 0 *****

code 0 就表示登陆成功,如果不成功,显示为 code 1 。

(4) 登陆成功以后,再次打开 "Command line settings" 面板,输入并运行如下指令:

cvs -z3 -d:pserver:anonymous@https://www.wendangku.net/doc/ae18172301.html,:/cvsroot/ogre co ogr enew

CVS 源代码就开始下载了。耐心等它下载完毕。

(5) 这时候在 WinCVS 主界面左栏的“cvshome”下边,多了一

个 "ogrenew" 的文件夹。你可以到硬盘的 F:\cvshome\ogrenew\看一下,所有的源代码都在那里了。

OK.

最后讲讲 CVS 的更新。很方便。经常通过 CVS 更新文件可以使你的代码保持最新版本。 OGRE 是一个很活跃的开源项目, CVS 的更新很频繁。

(1) 最快捷的办法是,在 WinCVS 主界面左栏的“cvshome”下边

的 "ogrenew" 文件夹上右击,在弹出的右键关联菜单上选

择 [Query Update] ,就会自动登陆并检查文件,如果服务器上的文件比本地文件新,就会从服务器下载最新文件覆盖本地旧的同名文件。

(2) 有时候 WinCVS 可能会失去你的登陆信息,这时候 [Query Update] 指令变灰无法使用,就需要重新登陆,然后再使用 (1) 的办法来更新文件。

第二章编译OGRE

下载以后就要开始编译。

编译之前,先确认你做好了以下准备工作:

(1) 确认你安装了 Microsoft Visual Studio .NET 或 Microsoft Visual Studio .NET 2003;

Microsoft Visual Studio 6.0 也可以,但是我用的是 .NET 2003 ,VC6 有一些差异。

(2) 确认你安装了 DirectX 9.0 SDK Update (Summer 2004) ;

你可以去 MSDN 下载:

https://www.wendangku.net/doc/ae18172301.html,/directx

下载后安装。假设你安装到 D:\DXSDK9\。

使用这个 SDK 版本,编译的 Demo 需要 DirectX 9.0c Runtime 来运行。

(3) 还需要下载编译 OGRE 必须的一些依赖项,包括头文件和库;

来这里下载:

https://www.wendangku.net/doc/ae18172301.html,/projects/ogre

下载 "OgreWin32Dependencies-0.13.0.zip"

下载以后解压缩,可以看到里面有个 ogrenew 目录,把这个目录覆盖到 F:\cvshome\ogrenew\。

OK.

下一步,打开 https://www.wendangku.net/doc/ae18172301.html, 或 https://www.wendangku.net/doc/ae18172301.html, 2003 ,设置工作环境。

(1) 在主菜单中选择 [工具]-[选项...] ,打开 "选项" 面板,在左边目录选择[项目]-[VC++ 目录] ;

(2) 在右栏设置 Include 和 Lib 目录:

包含文件:

D:\DXSDK9\Include

F:\cvshome\ogrenew\Dependencies\include

库文件:

D:\DXSDK9\Lib

F:\cvshome\ogrenew\Dependencies\lib\Release

注意把这几条目录放在目录列表的最上面:

(3) OK. 现在打开 F:\cvshome\ogrenew\Ogre.sln ,从主菜单中选择 [生成]-[批生成...] ,打开 "批生成" 面板,点击右边的 [全选] 按钮,然后点击[重新生成] 按钮开始生成:

等半个小时左右,等待编译完成。

编译后的 dll 和 exe 示例文件在 F:\cvshome\ogrenew\Samples\Common

\bin 的 Release 和 Debug 文件夹,可以运行一下示例看看。

===========补充说明================

OgreWin32Dependencies-0.13.0.zip 解压缩后,它的顶层目录结构如下:

ogrenew

|--Dependencies // lib 和 h

|--Samples // dll

一定要把这个 Dependencies 和 Samples 放到 CVS 的 ogrenew 目录下,不要放别处,因为除了那些 dll 需要调用,部分项目的 lib 设置使用的是相对路径,所以不要放别处。

使用 VC6 编译 OGRE 所需要的附加依赖项:

包含 STLPort 的 *.h 、已编译的 *.lib 、 *.dll for VC 6 ,以及 cg.dll 点击下载此文件

使用方法:解压缩后将其中的 ogrenew 目录覆盖到 CVS 的 ogrenew 目录。

第三章异地编译示例Demo

OGRE 编译成功以后,它本身附带的所有示例也同时编译完毕, exe 文件都在 F:\cvshome\ogrenew\Samples\Common\bin 的 Release 和 Debug 文件夹里。看过这些示例以后,我们可以试着修改这些示例的源代码,这是学习 OGRE 的第一步。

这些示例的源代码都在 F:\cvshome\ogrenew\Samples\文件夹下,每个示例的目录下大都有 include 和 scr 两个子文件夹,分别盛装这个示例的 h 和cpp 源文件。

但是我们最好不要动这里的源文件,我们把整个 F:\cvshome\ogrenew\Samples\文件夹复制出来,复制到别的地方,重新创建解决方案、创建和设置项目,重新编译,这样可以使我们熟悉 OGRE 项目的创建和设置办法。

我们把整个 F:\cvshome\ogrenew\Samples\文件夹复制到一个新地方,我的是 E:\Desktop\Learning\OGRE\Samples\;

然后,在这个目录下,只保留 Common 和 Media 两个目录,其它目录尽数删除;Common 目录是生成的 exe 文件的执行目录,里面的 dll 、 cfg 文件都是运行exe 文件所必需的,后面我们要设置一下项目的生成目录,让 exe 文件都生成在 E:\Desktop\Learning\OGRE\Samples\Common\bin 目录下;

Media 目录是所有图片、模型、材质、声音、脚本等等资源的储存文件夹;

OK. 现在打开 https://www.wendangku.net/doc/ae18172301.html, ,首先设置全局选项:

(1) 在主菜单中选择 [工具]-[选项...] ,打开 "选项" 面板,在左边目录选择

[项目]-[VC++ 目录] ;

(2) 在右栏设置 Include 和 Lib 目录:

包含文件:

D:\DXSDK9\Include

F:\cvshome\ogrenew\OgreMain\include

F:\cvshome\ogrenew\Dependencies\include

库文件:

D:\DXSDK9\Lib

F:\cvshome\ogrenew\OgreMain\lib\Release

F:\cvshome\ogrenew\OgreMain\lib\Debug

F:\cvshome\ogrenew\Dependencies\lib\Release

注意把这几条目录放在目录列表的最上面。

OK.现在我们在 E:\Desktop\Learning\OGRE\Samples\建立一个新的空白解决方案:

(1) 在主菜单中选择 [文件]-[新建]-[空白解决方案...] ,打开 "新建项目" 面板;

(2) 在左边 "项目类型" 栏选择 "Visual Studio 解决方案" ,在右边“模板" 栏选择 "空白解决方案" ;

(3) 在下面的 "位置" 一栏,输入或浏览到 "E:\Desktop\Learning\OGRE" ,在 "名称" 一栏输入解决方案名称 "Samples" ,然后确定:

(4) 保存一下,这时候我们打开 E:\Desktop\Learning\OGRE\Samples\,就能看到我们新建的同名解决方案文件 Samples.sln 。

OK.现在我们建立我们的第一个 OGRE 项目。在 F:\cvshome\ogrenew\Samples\的一系列示例里面,最简单、最入门的是 SkyPlane ,我们就使用它的现成代码来新建一个项目:

(1) 在 https://www.wendangku.net/doc/ae18172301.html, 边栏点击,弹出 "解决方案资源管理器" ,可以看到我们新建的"Samples" 空白解决方案;

(2) 在解决方案 "Samples" 上右击,在弹出的关联菜单中选择 [添加]-[新建项目...] ,打开 "新建项目" 面板;

(3) 在左边 "项目类型" 栏选择 "Visual C++ 项目" - "Win32 " ,在右边“模板" 栏选择 "Win32 项目" ;

(4) 在下边 "名称" 栏输入我们的第一个项目的名称:"SkyPlane_01" ,然后确定;

(5) 这时候又弹出 "Win32 应用程序向导" 面板,点击左栏的 [应用程序设置] 按钮切换选项卡,勾选 "空项目" 复选框,然后完成:

OK.下面向新项目 SkyPlane_01 添加代码:

(1) 把下列文件复制到 E:\Desktop\Learning\OGRE\Samples\

SkyPlane_01 目录下:

E:\Desktop\Learning\OGRE\Samples\Common\include\ExampleApplication.h

E:\Desktop\Learning\OGRE\Samples\Common\include\ExampleFrameListener.h

F:\cvshome\ogrenew\Samples\SkyPlane\include\ SkyPlane.h

F:\cvshome\ogrenew\Samples\SkyPlane\src\ SkyPlane.cpp

(2) 在 https://www.wendangku.net/doc/ae18172301.html, 边栏点击,弹出 "解决方案资源管理器" ,在我们新建的"SkyPlane_01" 项目上右击,在弹出的关联菜单中选择 [添加]-[添加现有项...] ,选中上边已复制到E:\Desktop\Learning\OGRE\Samples\SkyPlane_01 目录下的四个文件,打开,OK。

在上面的四个文件中, ExampleApplication.h 和 ExampleFrameListener.h 这两个文件是公用的示例框架文件,这两个文件看起来不短,它们的作用是为我们预先搭好了一个简单的应用程序框架,里面包括了选项设置、画面渲染、消息显示、输入控制等简单模块,在一开始我们可以不用深究这两个文件到底写了些什么,只需要调用它们、只需要修改 SkyPlane.cpp 的核心代码。

现在代码还不能顺利编译,我们还需要设置项目属性:

(1) 在 https://www.wendangku.net/doc/ae18172301.html, 边栏点击,弹出 "解决方案资源管理器" ,在我们新建的"SkyPlane_01" 项目上右击,在弹出的关联菜单中选择 [属性] ,弹出项目属性页,设置下列选项:

Debug

常规:输出目录:..\Common\bin\Debug

调试:工作目录:..\Common\bin\Debug

C/C++

代码生成:运行时库:多线程调试 DLL (/MDd)

链接器

输入:附加依赖项:OgreMain_D.lib

Release

常规:输出目录:..\Common\bin\Release

调试:工作目录:..\Common\bin\Release

C/C++

代码生成:运行时库:多线程 DLL (/MD)

链接器

输入:附加依赖项:OgreMain.lib

OK. 现在可以编译 SkyPlane_01 了,马上就可以亲身体会 OGRE 强大无穷的魅力了!

生成的 exe 文件在 E:\Desktop\Learning\OGRE\Samples\Common\bin 的 Release 和 Debug 文件夹里,为什么非要生成在这个文件夹,因为里面的cfg 和 dll 是运行程序所必需的,所以路径不能错。

另外, OGRE 有个 APPWizard 可以很方便地用 https://www.wendangku.net/doc/ae18172301.html, 直接创建 OGRE 项目,可惜在我的 https://www.wendangku.net/doc/ae18172301.html,2003 上不能用。

第四章 OGRE API 参考 (chm 格式)

这个会随时更新,但是每个人学会用 DoxyGen 来生成 API 文档比较好。

OGRE API Reference (12.8 MB)

第五章 OGRE引擎分析

作者:盛崇山

https://www.wendangku.net/doc/ae18172301.html,

AntsamCGD@https://www.wendangku.net/doc/ae18172301.html,

3D 大牛盛崇山大师从高屋建瓴的角度编撰的六章 OGRE 引擎分析,有助于我们从整体上了解 OGRE 的工作机制。

OGRE 引擎分析

PDF 格式,需要安装 Adobe Reader 来阅读。

第六章最简单的游戏窗口代码

示例代码:

点击下载本节示例代码

文件目录:

OGRE\Samples\OGRE_YC_001_Simplest

main.cpp

Simplest.h

OGRE_YC_001_Simplest.vcproj

使用方法:

(1) 打开 https://www.wendangku.net/doc/ae18172301.html, ,在主菜单中选择 [工具]-[选项...] ,打开 "选项" 面板,在 [项目]-[VC++ 目录] 的“包含文件” 目录下添加下面这个路径:

E:\Desktop\Learning\OGRE\Samples\Common\include

如图:

这样设置的意图是使本节和以后的所有示例都能方便地直接包含进 OGRE\Samples\Common\include 目录下的 ExampleApplication.h 和ExampleFrameListener.h 两个头文件,这两个头文件定义了一个简单通用的应用程序框架,在这个通用框架里集成了应用程序的设置、运行环境的创建、画面更新、消息界面、输入检测、镜头控制等等的一系列现成方法,这两个头文件放在 OGRE\Samples\Common\include 目录下,被所有的示例文件所引用,因为这两个文件已经帮我们做好了一些最基本的工作,所以可以有助于我们在一开始就直接切入到 OGRE 的实用层面,省略一些初期的繁琐步骤。

这两个头文件,如果不感兴趣,在开始的时候都不用看。如果比较感兴趣,可以试着改一些参数,比方说,我的就修改了窗口的背景颜色和镜头的移动速度:

(2) 使用 https://www.wendangku.net/doc/ae18172301.html, 打开 OGRE\Samples\Samples.sln ;

(3) 调出解决方案资源管理器,在解决方案"Samples"上右击,在弹出的右键关联菜单中选择 [添加]-[现有项目...] ,选择 OGRE_YC_001_Simplest.vcproj 并确定;

(4) 因为 OGRE_YC_001_Simplest.vcproj 里面没有包含工作目录的信息,所以还需要再设置一下工作目录,这样我们可以直接在 https://www.wendangku.net/doc/ae18172301.html, 中运行和调试生成的OGRE 程序。

在解决方案资源管理器的 OGRE_YC_001_Simplest 项目上右击,在弹出的关联菜单中选择 [属性] ,弹出项目属性页,添加下列选项:

Debug

调试:工作目录:..\Common\bin\Debug

Release

调试:工作目录:..\Common\bin\Release

(5) 从主菜单中选择 [生成]-[批生成...] ,弹出 "批生成" 面板,仅仅勾选OGRE_YC_001_Simplest 项目的 Debug 和 Release 配置,然后点击右边的 [生成] 或 [重新生成] 按钮,如下图,然后静待项目生成 Debug 和 Release 两个版本;

(6) 生成的 exe 文件在 OGRE\Samples\Common\bin 的 Release 和 Debug 文件夹里,可以运行看看,效果如图:

本章以后的示例代码编译办法与此相同,以后不再敷叙。

解说正文:

这个是最简单的 OGRE 应用程序代码。

在 Simplest.h 中,它定义了公用的示例应用程序基类 ExampleApplication 的派生类 SimplestApplication ,并重新定义了 createScene 方法(这一步不能省略,因为 createScene 是个纯虚函数)。

然后在 main.cpp 中,简单创建一个 SimplestApplication 实例并启动它:

就这么简单。而且在以后章节的示例中, main.cpp 基本上还是这么几行短短的代码。

第七章场景节点和实体

示例代码:

点击下载本节示例代码

运行截图:

这个示例很简单,读取并显示一个模型。

预备知识:

OGRE 的场景组织方式,就像一棵树,树有根、有枝干、有叶子和果实。最基本的两个概念,是场景节点 (SceneNode) 和实体 (Entity) 。场景节点就像树枝,实体就像枝头的果实。我们可以画个概念图:

场景节点就像根、树干和树枝,它可以再分枝,或者挂上果实(实体);

实体就像果实,它总是被绑定 (Attach) 在一个场景节点上并且总是处于分枝的末端;

场景节点控制实体的位置、方向、缩放等空间属性;

实体具有自己所使用的模型、材质、阴影、骨骼、动画、渲染状态等各种个体属性;

整个场景节点拥有唯一的一个根场景节点(RootSceneNode),如果一个实体不是根场景节点的“后代”,也就是所谓的“游离”实体或被绑定在一个"游离"节点上的实体,它不会被显示。

场景节点类 Ogre:: SceneNode 在头文件 OgreSceneNode.h 中定义,下面是它的关联图表:

点击看大图

实体类 Ogre:: Entity 在头文件 OgreEntity.h 中定义,下面是它的关联图表:

点击看大图

示例解说:

这个示例的核心代码,在源文件 SceneNodeAndEntity.cpp 的

void SceneNodeAndEntityApplication::createScene( void ) 方法定义中。

(1)

// 设置环境光

mSceneMgr->setAmbientLight(ColourValue(1.0f, 1.0f, 1.0f)); mSceneMgr 是在公用示例基类 OGRE::ExampleApplication 中已经定义好的一

个保护成员,作为场景管理器 (SceneManager) 的一个实例来使用。

场景管理器类 Ogre:: SceneManager 在头文件 OgreSceneManager.h 中定义,场景管理器,顾名思义,它是整个 OGRE 场景的总管,管理整个场景中的所有场景节点 (SceneNode) 、实体 (Entity) 、光源 (Light) 、镜头 (Camera) 、材质 (Material) 、阴影 (Shadow) 、公告板 (Billboard) 、动画 (Animation) 、天空 (Sky) 、雾 (Fog) 、盖层 (Overlay) 等等大量元素。下面是它的关联图表:

点击看大图

setAmbientLight() (设置环境光) 的作用是给整个场景设置一个统一的散射光,散射光没有光源,没有方向性,不会在物体表面留下阴影,仅仅是照亮场景。默认的环境光颜色是黑色,所以我们要设置一个较亮的颜色,要不模型看上去漆

黑一团。

setAmbientLight() 方法的原型在头文件 OgreSceneManager.h 中定义:

void Ogre::SceneManager:: setAmbientLight ( const ColourValue & colour )

其中的 ColourValue (颜色值)是 OGRE 颜色类,在头文件 OgreColourValue.h 中定义:

ColourValue (Real red=1.0f, Real green=1.0f, Real blue=1.0f, Real alpha=1.0f)

除了直接用 RGBA 值来表示颜色, ColourValue 还具有几个预先设定好的颜色值:

(2)

(3)

这里用的是第二个重载,也就是从硬盘上读取模型,模型文件名

"ogrehead.mesh" ,这个文件在 OGRE\Samples\Media\models 目录下。查看一下这个目录,里面有一些 *.mesh 文件,还有一些 *.skeleton 文件。

*.mesh 文件包含了静态模型和材质的信息,*.skeleton 文件对应一个同名的*.mesh 文件,保存这个模型的骨骼和动画信息(如果有)。使用 createEntity() 方法,不管是不是带骨骼带动画的 *.mesh ,都一样读取,但是要想播放模型的动画,还需要做一些别的工作,如果现在你直接读取 ninja.mesh 这个带骨骼动画的模型,它不会动。

到了这里,还有一个问题,就是 OGRE 是怎么找到的这个 *.mesh 文件?它怎

相关文档