我讀過將網格組合成單個網格並且渲染速度快得多,因爲您一次發送所有數據。我使用的是directx9.0c,固定功能,C++。我有很多LP3DXMESH,我想一次組合併發送畫出。如何將多個directx LP3DXMESH組合成1個網格進行快速渲染?
我谷歌的答案是我得到垃圾結果。我怎樣才能做到這一點?
我讀過將網格組合成單個網格並且渲染速度快得多,因爲您一次發送所有數據。我使用的是directx9.0c,固定功能,C++。我有很多LP3DXMESH,我想一次組合併發送畫出。如何將多個directx LP3DXMESH組合成1個網格進行快速渲染?
我谷歌的答案是我得到垃圾結果。我怎樣才能做到這一點?
要將幾個網格合併爲一個網格,這非常簡單,只要滿足一些標準即可。
您所有的網都必須具有相同的頂點尺寸/佈局(或declaration)
鑑於此,讓我們說你有3種型號: 模型1有10個頂點和21個指數 模型2有20個頂點, 30個指數 模型3具有25個頂點和45個指數
創建頂點緩衝器,將能夠容納所有的數據:從模型1(例如10 + 20 + 25個頂點)
複印每個頂點,然後從Model 2和Model 3到這個新版本texbuffer。
以同樣的方式作爲頂點緩衝區創建一個索引緩存(例如:21個+ 30個+ 45指數)
現在對模型中的一個,剛纔複製的指數。
對於模型2,您需要複製索引,但將10添加到每個索引(第一個頂點緩衝區的大小)。
對於模型3,您的操作與第二種操作相同,但需要添加10 + 20(每個以前大小的總和)。
創建您與新緩衝區網格。
在一些注意事項:
基本上你可以通過鎖定頂點和索引緩衝區來合併網格(例如'LockVertexBuffer'([doc](http://msdn.microsoft.com/de-de/library/windows/desktop/bb205731% 28v = vs.85%29.aspx))和複製數據,但這是很費力的,因爲索引數據必須被重寫。你的應用程序的目的是什麼?你有動態對象,它們在移動嗎?在這種情況下,它不是合併網格並不實際,因爲開銷會比渲染更大。 – Gnietschow