Ogre載入mesh檔案原理與路徑分析

2021-06-22 07:35:42 字數 2447 閱讀 6818

建立模型實體

entity* entobject = mscenemgr->createentity(「object」, 「ogrehead.mesh」);

createentity() (建立實體) 在當前場景中建立乙個實體例項並返回它的物件指標,作為 scenemanager 類的乙個成員函式,它有兩個過載:

entity * ogre::scenemanager::createentity (

const string & entityname, // 實體名稱(同一場景中不能有相同的實體名稱)

prefabtype ptype // 預製型別(不需要讀取模型,直接在程式中建立簡單幾何體,

// 目前只有平面 pt_plane 一種預製型別)

) [virtual]

entity * ogre::scenemanager::createentity (

const string & entityname, // 實體名稱(同一場景中不能有相同的實體名稱)

const string & meshname // 模型名稱(需要從硬碟上讀取的模型的檔名)

) [virtual]

這裡用的是第二個過載,也就是從硬碟上讀取模型,模型檔名 「ogrehead.mesh」 ,這個檔案在 ogre\samples\media\models 目錄下。檢視一下這個目錄,裡面有一些 *.mesh 檔案,還有一些 *.skeleton 檔案 。

到了這裡,還有乙個問題,就是 ogre 是怎麼找到的這個 *.mesh 檔案?它怎麼知道這個 *.mesh 檔案是放在 ogre\samples\media\models 目錄下的?還有我們在示例中看到的模型是帶紋理貼圖的,那麼紋理貼圖都在**呢? ogre 又是怎麼找到這個模型需要的紋理貼圖的呢?

在 e:\desktop\learning\ogre\samples\common\bin 目錄、還有這個目錄的 debug 和 release 兩個子目錄下,存在著一系列的 *.cfg 檔案,它們都是些配置檔案, ogre 程式在開啟以後,第一件事情就是檢查並讀取這些配置檔案,從中了解一些關鍵資訊。其中的 resources.cfg 就是用來指定所有的遊戲資源所在的目錄路徑, ogre 要讀取一些資源,就會從這些路徑中搜尋。

resources.cfg 檔案的內容:

filesystem=../../../media

filesystem=../../../media/fonts // 字型

filesystem=../../../media/materials/programs // 材質程式 (cg、hlsh、glsl 等)

filesystem=../../../media/materials/scripts // 材質定義指令碼

filesystem=../../../media/materials/textures // 紋理貼圖

filesystem=../../../media/models // 模型

filesystem=../../../media/overlays // 蓋層(介面)定義指令碼

filesystem=../../../media/particle // 粒子定義指令碼

zip=../../../media/packs/cubemap.zip

zip=../../../media/packs/cubemapsjs.zip

zip=../../../media/packs/dragon.zip

zip=../../../media/packs/fresneldemo.zip

zip=../../../media/packs/ogrecore.zip

zip=../../../media/packs/ogretestmap.zip

zip=../../../media/packs/skybox.zip

你可能會留意到每一條語句前面有 filesystem 和 zip 的區別,檢視一下 ogre\samples\media\packs 裡面的那些 *.zip 檔案,用 winrar 把它們開啟來看,比方說開啟 dragon.zip ,可以看到裡面有這樣幾個檔案:

乙個模型,帶三張貼圖,就是這麼簡單。 這個意味著,ogre 在搜尋所需資源的時候,不但能搜尋系統目錄 (filesystem) ,還能在壓縮檔案 (zip) 中搜尋。

最後是模型的紋理貼圖,這個在 *.mesh 檔案自身中定義,我們在使用 3dsmax 、 maya 等輸出 *.mesh 模型的同時,紋理貼圖的相對路徑也會被同時包含輸出。

// 建立模型實體

entity* entobject = mscenemgr->createentity(「object」, 「ogrehead.mesh」);

現在你可以試著讓它讀取不同的模型,就把這個示例當作乙個模型瀏覽器來用吧 ,幾個 *.zip 檔案裡的資源也試試,比方說,讀取 「dragon.mesh」 。

OGRE程式載入mesh檔案原理

宣告 本文 ogre資源開放地帶 網,僅留作學習交流之用 原文 建立模型實體 entity entobject mscenemgr createentity object ogrehead.mesh createentity 建立實體 在當前場景中建立乙個實體例項並返回它的物件指標,作為 scene...

Ogre程式載入mesh檔案原理

建立模型實體 entity entobject mscenemgr createentity object ogrehead.mesh createentity 建立實體 在當前場景中建立乙個實體例項並返回它的物件指標,作為 scenemanager 類的乙個成員函式,它有兩個過載 entity o...

Ogre學習筆記(2) Mesh的載入

scenemanager createentity scenemanager createmovableobject movableobjectfactory createinstance entityfactory createinstanceimpl 主要的操作就在這個函式中完成,其中第一步為載...