real-time 3d terrain engines using C++ and DX9 翻譯 7

來源:互聯網
上載者:User

模型資源
       cModelResource類可能是我們將會使用的最重要的類了,它當然是我們最經常使用的資源。這個資源類是一個完整的基於D3DXFRAME層級樹的容器。因為複合節點可以背這些對象包含,cModelResource在遊戲中可以代表不只一個的物理物體。例如,一個格鬥者人物角色可能包含一個完整的製作了動畫的骨骼,蒙好了皮的皮膚和衣服網格,和每個武器或者盾牌的靜態模型。每個網格一次維護到cRenderMethods和cSurfaceMaterial對象的串連,使cModelResource對象在我們的引擎中表現得是一個完全的實體(entity),而不僅僅是一個幾何體。
       正如先前提到的,我們漂亮的使用D3DXFRAME層級來完成這種儲存。這些對象在第二章“Fundamental 3D Objects”中有描述,可以作為理想的骨骼動畫和蒙皮網格的儲存方法。一個D3DX對這些結構的實現的很大特點就是他們是使用者可擴充的。通過從D3DXFRAME和D3DXMESHCONTAINER中派生得到我們自己的結構,我們可以在這些積累提供資料的頂部添加我們自己的針對平台的資料。
       這很重要,因為他允許我們我們掛接我們自訂資源,cEffectFile和cSurfaceMaterial。這將D3DX提供的簡單的單紋理封裝的的網格轉化為HLSL著色的,符合紋理資料庫。使用這些擴充的類需要建立一個D3DX介面來管理幀層級中的結點。然而,第一步是申明我們的新資料類型。清單4.6展示了我們對D3DXFRAME和D3DXMESHCONTAINER的擴充。

 

我們對D3DXFRAME基類的增加是最小化的。用來構建層級數D3DXFRAME_DERIVED對象被分配到一個固定數組中。因此,即使我們使用一個樹結構去使用這個資料,我們怡然可以使用它線上性數組中唯一的索引標識每個節點。我們可以這麼做因為可以假定我們的D3DXFRAME_DERIVED樹不可以動態改變大小和順序。一旦一個層級被載入,它在它餘下的生命中都保持同樣的結構。
為了比D3DXFRAME提供的更多的維護家族(family)資訊,我們可以在儲存他們的數組中使用索引值去標識任何可能的父物件和根對象。frameIndex是整棵樹的根節點。prentIndex指向該節點的上一個父節點。使用-1(word值為0xffff)標識未使用的索引值。
為什麼不使用指標?這些資料打算作為引用對象。這個課模型的符合執行個體可以被放在我們的世界中,每個都有它自己的D3DXFRAME_DERIVED結構集合。這些唯一的結構將包含幀節點每個執行個體的變換矩陣。通過儲存我們的家族(family)資訊而不是指標作為索引值,就更容易為該模型建立一個新的執行個體,僅僅通過為架構對象分配新的數組然後拷貝資料就可以了。不能協商,因為索引值和儲存資料的數組的根相關。
D3DXMESHCONTAINER_DERIVED結構更複雜一些。在D3DXMESHCONTAINER基類頂部,我們增加了所有我們引擎特有的資料。這包括一個網格使用的cRenderMethods和cSurfaceMaterials的鏈表,網格的蒙皮資訊和網格本身。我們將我們自己的D3DMEHSDATE結構同基類包含的那個分開儲存,這樣可以在系統記憶體中的模型和我們的渲染方法將要使用的經過最佳化並且載入顯存中的模型的維護他們分離。
除了允許我們擴充積累,為架構樹提供檔案I/O的D3DX函數也可以被擴充以提供我們自訂資料。這將建立一個擴充自Direct3D X檔案格式的符合我們需求的介面。這要求我們建立3個關鍵介面類:一個負責分配和銷毀我們的資料結構,一個負責在X檔案中儲存這些結構,一個負責從X檔案中載入這些資料。
這3個介面都在D3DX類ID3DXAllocateHierarchy,ID3DXLoadUserDate和D3DXSaveUserDate中提供。為了增加我們自己的資料,我們簡單的從這些介面中派生我們的類,並且為每個基類中定義的純虛函數提供實現。位於隨書光碟片的d3dx_frame_manager源檔案展示了這些函數。這些檔案比我們希望的用文字更好的從細節上展示了分配,清除和檔案I/O。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.