天天看點

第一章 安裝Ogre 3D引擎1、下載下傳并安裝 Ogre 3D 引擎2、不同版本的Ogre 3D SDK3、Ogre3D 示例程式4、第一個 Ogre 3D 程式5、ExampleApplication (OgreSDK 中的一個類)6、加載第一個 3D 模型7、總結

第一章 安裝Ogre 3D引擎

想要學習并且使用 Ogre,就要先下載下傳并安裝它。

在這章,我們将會學習到:

1. 下載下傳并安裝 Ogre 3D 引擎

2. 配置好 Ogre 3D 引擎的開發環境

3. 用 Ogre 3D 引擎建構第一個場景

那我們就開始了。

1、下載下傳并安裝 Ogre 3D 引擎

我們要幹的第一步就是安裝并配置Ogre 3D引擎

1.1 實踐時刻——下載下傳并安裝Ogre 3D引擎

為了後面的使用,現在我們就要下載下傳安裝Ogre 3D SDK了

1.打開http://www.ogre3d.org/download/sdk的連結

2.下載下傳合适的安裝包。如果你對要下載下傳哪個正确的安裝包而需要幫助時,那就看看後面的“剛剛發生了什麼”這一部分

3.把 SDK 的安裝程式複制到你希望把OgreSDK放置的檔案夾裡

4.輕按兩下安裝程式,這會啟動一個自解壓縮程式

5.現在你應該得到一個名字類似于OgreSDK_vc10_v1-8-1的檔案夾

6.打開該檔案夾。檔案夾的内容應該像下面的截圖

第一章 安裝Ogre 3D引擎1、下載下傳并安裝 Ogre 3D 引擎2、不同版本的Ogre 3D SDK3、Ogre3D 示例程式4、第一個 Ogre 3D 程式5、ExampleApplication (OgreSDK 中的一個類)6、加載第一個 3D 模型7、總結

1.2 剛剛發生了什麼?

我們剛剛隻是下載下傳了一個适合我們作業系統的 Ogre 3D SDK。Ogre 3D 引擎是一個跨平台的渲染引擎,是以對于不同的作業系統就有不同的開發包。下載下傳完 Ogre3D SDK 我們解壓了它。

2、不同版本的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開發環境的配置的教程。這本書的剩餘部分和使用的平台是完全獨立的,是以如果你想使用其他的開發平台,随你便啦。它不會影響到本書的内容和對編譯系統的配置與約定。

2.1 探索 SDK

在我們編譯 SDK 裡面的示例之前,讓我們先來看看 SDK。我們來看看 Windows作業系統上的 SDK 結構。在 Linux 和 MacOS 上可能會有所不同。首先,我們打開 bin 這個檔案夾。這裡面會有兩個檔案夾,即 debug 和 release檔案夾。對于 lib 檔案夾裡面也是如此。這裡面的原因是在于 Ogre3D SDK 對其庫檔案和動态連結庫檔案有debug和 release兩種編譯方式。這就使得我們可以在開發過程中使用 debug 模式來調試我們的項目。完成項目後,可以使用release模式來編譯得到完整的 Ogre3D 程式。

不論打開 debug 或者 release檔案夾,我們都可以看到有很多的 dll 檔案,一些 cfg 檔案還有兩個可執行檔案(exe)。可執行檔案是為了把 Ogre 更新到一個新的版本,是以在此對我們來說沒有啥用處。

第一章 安裝Ogre 3D引擎1、下載下傳并安裝 Ogre 3D 引擎2、不同版本的Ogre 3D SDK3、Ogre3D 示例程式4、第一個 Ogre 3D 程式5、ExampleApplication (OgreSDK 中的一個類)6、加載第一個 3D 模型7、總結

OgreMain.dll 是最重要的 DLL 檔案。後面編譯的 Ogre3D 程式都會用到它。所有名字以Plugin_開頭的 DLL 檔案是 Ogre3D 程式可以使用的插件。Ogre 3D 插件是使用 Ogre 3D 提供的接口來給 Ogre 3D 添加新功能的動态連結庫檔案。插件可以提供任何東東,但是它常常是用來添加一些特性例如更好的粒子系統或者新的場景管理器。這些東西後面會談到的。Ogre 3D 社群提供了很多的插件,大部分可以在 wiki 中找到。SDK 中隻是包含了最近常用的插件。在本書後面,我們會學習如何去使用它們。名字以 RenderSystem_開頭的 DLL 檔案,不要驚訝啊,是為了封裝起來針對于 Ogre 3D 所支援不同的渲染系統。在這裡所指的是Direct3D9 和 OpenGL。除了這兩個系統,Ogre 3D 還支援 Direct3D10、Direct3D11 和 OpenGLES(支援嵌入式系統的 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=../../media/packs/SdkTrays.zip
FileSystem=../../media/thumbnails
           

ZIP=意味着那些資源檔案是存在 ZIP 壓縮包裡的,FileSystem=意味着要加載一個檔案夾裡的内容。resources.cfg 使得加載新的資源和改變資源的路徑非常容易,是以它常常被用來加載資源,特别是被 Ogre 的例子程式所使用。來說一下示例程式,檔案夾中的最後一個 cfg檔案是 sample.cfg。我們自己用不上這個檔案。其實它包含着一個 SampleBrowser(示例浏覽器)程式所需加載的所有 Ogre 示例清單。但是我們還沒搞到 SampleBrowser,是以就要搞一個出來。

3、Ogre3D 示例程式

Ogre 3D SDK 附帶了很多的示例,這些示例展示了 Ogre3D 所擁有的不同種類的渲染效果和手法。在我們開始編寫我們自己的程式之前,為了加深 Ogre 程式的功能我們先來看看這些示例。

3.1 實踐時刻——建構 Ogre 3D 示例程式

為了先看看 Ogre 3D 到底能幹嘛,我們會建構示例程式并且看看它們。

1.找到 Ogre3D 的檔案夾

2.打開 Ogre3d.sln 解決問題方案檔案

3.在解決問題方案上右鍵選擇“建構解決問題方案”

4.Visual Studio 會建構示例程式,這會消耗掉一些時間,是以在編沒有完成之前最好是泡上杯茶喝喝

5.若一切順利,找到 Ogre3D/bin 檔案夾

6.運作 SampleBrowser.exe.

7.然後你應該看到如下給力的結果:

第一章 安裝Ogre 3D引擎1、下載下傳并安裝 Ogre 3D 引擎2、不同版本的Ogre 3D SDK3、Ogre3D 示例程式4、第一個 Ogre 3D 程式5、ExampleApplication (OgreSDK 中的一個類)6、加載第一個 3D 模型7、總結

8.試試運作不同的示例程式來看看 Ogre3D帶來的精彩的特效。

3.2 剛剛發生了什麼?

我們使用自己的 Ogre3D SDK 建構出 Ogre3D 示例。在此之後,我們會有一個 Ogre3D開發的副本

3.3 突擊測驗——示例程式裡展示了哪些後期效果

1.列舉至少 5 種在示例程式中展示了的不同後期效果

a.模糊,玻璃特效,舊電視感覺,黑白效果和倒置

b.模糊,玻璃特效,舊顯示器感覺,黑白效果和倒置

c.模糊,玻璃特效,舊電視感覺,顔色和倒置

答案:a

4、第一個 Ogre 3D 程式

在這一部分,我們會建立一個隻有一個 3D 模型的 Ogre3D 程式。

4.1 實踐時刻——建立項目并配置 IDE(內建開發環境)

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

1.建立一個空工程

2.在工程裡建立一個檔案,命名為main.cpp

3.添加一個 main 方法:

int main (void)
{
        return 0;
}
           

4.在該檔案開頭部分包含上 ExampleApplication.h檔案:

#include"Ogre\ExampleApplication.h"
           

5.添加“你的 Ogre SDK 路徑\include\”,“你的 Ogre SDK 路徑\include\OGRE”,“你的 Ogre SDK 路徑\include\OIS”,到你的項目include path(頭檔案路徑)

6.添加“你的 Ogre SDK 路徑\boost\”到你的項目include path(頭檔案路徑)

7.添加“你的 Ogre SDK 路徑\boost\lib\”到你的項目 libpath(庫檔案路徑)

8.向 main.cpp 裡添加一個類:

class Example1 : public ExampleApplication
{
public:
	void createScene()
	{
	}
};
           

9.把下面的代碼添加到你的 main 函數裡:

Example1 app;
app.go();
           

10. 添加“你的 Ogre SDK 路徑\lib\debug\”到你的項目 lib path(庫檔案路徑)

11. 添加 OgreMain_d.lib 到需要的連結庫(工程屬性的Linker->Input)裡

12. 添加 OIS_d.lib 到需要的連結庫(工程屬性的Linker->Input)裡

13. 編譯此項目

14. 設定項目程式的工作空間(workingdirectory)為“你的 Ogre SDK 路徑\bin\debug”

15. 運作該程式,你應該能夠看到 Ogre 3Dsetup 對話框

第一章 安裝Ogre 3D引擎1、下載下傳并安裝 Ogre 3D 引擎2、不同版本的Ogre 3D SDK3、Ogre3D 示例程式4、第一個 Ogre 3D 程式5、ExampleApplication (OgreSDK 中的一個類)6、加載第一個 3D 模型7、總結

16. 按下 OK 按鈕啟動應用程式。你會看到一個黑色的視窗。按下 Esc鍵退出程式。

4.2 剛剛發生了什麼?

我們建立了第一個 Ogre3D 程式。為了編譯它,我們需要設定好不同的頭檔案路徑和庫檔案路徑以便于編譯器能夠找到它們。

在第 5 和第 6 步,我們在建構環境中添加了兩個頭檔案的路徑。第一個路徑是 Ogre 3D SDK 的頭檔案檔案夾,它包含着所有 Ogre 3D 和 OIS(OIS 是 Object Oriented Input System的簡稱,意為“面向對象的輸入系統”,ExampleApplication使用 OIS 監視使用者的輸入)的頭檔案。OIS 不是 Ogre3D 中的一部分;它是一個獨立的項目并且有一個不同的開發團隊在開發。它出現在 Ogre 3D 是因為 ExampleApplication 使用了它,是以使用者不需要去下載下傳它的依賴檔案。 ExampleApplication.h 也在那個檔案夾中。由于 Ogre3D 提供線程支援,是以我們需要把 boost 檔案夾添加入頭檔案路徑。否則的話,我們用 Ogre3D 引擎什麼程式也編譯不了。如果需要的話,Ogre 3D 可以直接從源碼編譯,那樣的話可以取消線程支援也就取消掉了 boost 檔案夾的需求。當使用 boost 的時候,編譯器需要連結到 boost 的庫檔案。是以我們添加了 boost 的庫檔案檔案夾到 lib path(見第 7 步)。

在第 10 步中,我們把“你的 Ogre SDK 路徑\ lib\debug\”添加到了庫檔案路徑之中,像前面所說的那樣,Ogre3D 有 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 檔案包含着 Ogre3D 程式的接口資訊和怎麼樣加載OgreMain.dll 或 OgreMain_d.dll。注意 OIS.lib 或OIS_d.lib 對于輸入系統也是如此——他們加載 OIS_d.dll 或 OIS.dll。是以我們動态的連結 Ogre3D 和 OIS,這樣使得我們可以切換 DLL而不需要重新編譯程式,隻要接口和庫沒有變化而且 DLL 使用相同的運作庫版本。這也就要求程式時刻需要加載 DLL,是以要確定程式能夠找到那些 DLL。這也就是我們為啥要在第 14 步設定工作空間。還有一個原因會在後面的部分澄清。

5、ExampleApplication (OgreSDK 中的一個類)

我們建立了一個新的類,Example1,它繼承于 ExampleApplication。ExampleApplication是 Ogre3D SDK 提供的一個類,它是為了使學習Ogre 3D 簡單一些而在 Ogre 3D 上附加了一個抽象層。ExampleApplication 為我們開始學習 Ogre 提供了幫助,它可以加載不同的模型,而且聲明了一個可以在場景中四處遊覽的簡單 camera(錄影機)。使用 ExampleApplication需要繼承于它并且重載虛函數 createScene()。我們會使用 ExampleApplication 類,這樣的話可以省下不少的時間。等到對 Ogre3D 有了很好的了解之後,我們會用自己的代碼一點點的替換掉 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,你會發現這個檔案中的路徑都是相對路徑。這也是我們需要設定工作空間的另一個原因。

5.1 突擊測驗——要連結哪個庫

1.當使用 Ogre3D 的 release 模式的時候,你認為要連結哪些庫?

a.OgreD3DRenderSystem.lib

b.OgreMain.lib

c.OIS.lib

答案:b & c

2.當想使用 Ogre3D 的 debug 模式的時候,你認為該做哪些改變?

a.在庫檔案名後面加上“_debug”

b.在檔案擴充名後面加上“_d”

c.在庫檔案名後面加上“_d” 

答案:c

6、加載第一個 3D 模型

加載一個模型很容易。隻需要加上下面兩行代碼

1.把下面兩行代碼加入到空的createScene()方法中:

Ogre::Entity* ent = mSceneMgr->createEntity( "MyEntity", "Sinbad.mesh" );
mSceneMgr->getRootSceneNode()->attachObject( ent );
           

2.再次編譯你的程式

3.啟動程式。你會看到一個小的綠色的東東。

4.使用滑鼠四處浏覽場景,使用“WASD”移動視角直到看着感覺綠色的東東在視角中比較合适

5.關閉程式

第一章 安裝Ogre 3D引擎1、下載下傳并安裝 Ogre 3D 引擎2、不同版本的Ogre 3D SDK3、Ogre3D 示例程式4、第一個 Ogre 3D 程式5、ExampleApplication (OgreSDK 中的一個類)6、加載第一個 3D 模型7、總結

6.1 剛剛發生了什麼?

使用mSceneMgr->createEntity("MyEntity","Sinbad.mesh");,我們告訴了 Ogre 我們想建立一個Sinbad.mesh 模型的執行個體。mSceneMgr 是 Ogre3D 中指向SceneManager(場景管理器)的指針,這個指針由 ExampleApplication 為我們建立。為了建立一個新的 entity(實體),Ogre需要知道使用哪個模型檔案,而且我們可以給新的執行個體起一個名字。這個名字是獨一無二的非常重要,它不可以被用兩次。如果發現了使用兩次,Ogre 3D 會抛出一個異常。如果沒有起一個名字,Ogre3D 會自動生成一個。後面我們會詳細的講到。

現在我們有了一個模型的執行個體,為了使它顯示出來,我們需要把它附加在場景之中。添加場景很容易——隻要加上下面一句話:

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

這樣的話,附加實體到場景中以便我們能夠看到它。我們所看到的是個水手,是 Ogre3D 模型的吉祥物。貫穿這本書我們将看到很多次這個模型。

6.2 突擊測驗——ExampleApplication和怎樣顯示出一個模型

用自己的話說說怎樣加載一個模型并且使其可見。

7、總結

我們學習了 Ogre3D SDK 是如何組織的,哪些庫是需要連結的,還有哪些檔案夾是需要加入頭檔案路徑。而且,我們瞄了一眼 ExampleApplication 這個類并且學習了如何去使用它。我們加載了一個模型并且顯示了出來。明确一下,這一章包含了:

1.哪些檔案對于 Ogre 3D 開發是重要的,它們怎麼互相影響,還有它們的作用是啥

2.ExampleApplication 是幹嘛的:它是怎樣節省工作量的,Ogre 3D 程式啟動時幹了什麼

3.模型加載:我們學會了使用 createEntity 來建立一個新的模型執行個體,學會了一種把新執行個體附加到場景中的辦法在這些關于 Ogre3D 的介紹之後,我們将在下一章學習 Ogre3D 怎樣管理場景并熟練地操縱場景。