2014-03-25 91 views
0

我正在製作一個賽車遊戲作爲使用DirectX 11的任務的一部分,並且我已將一輛汽車的模型加載到ID3D11緩衝區中。由此,我想知道如何將汽車的車輪分別旋轉到模型的其餘部分。我有汽車每個部分的開始和結束索引,所以我知道它將被旋轉的部分,而不是如何單獨翻譯它。 (我不確定我是否包括代碼會有所幫助,但如果是這樣,請讓我知道)變換ID3D11緩衝區的一部分

+0

哪一部分你在掙扎?讀取頂點,進行數學計算或用新內容更新緩衝區?無論如何,更新緩衝區內容並不是正確的方法。相反,您應該使用單獨的繪圖調用渲染輪胎,並使用動態更新的常量緩衝區在頂點着色器中進行變換。 – MooseBoys

回答

0

立即詢問後,我明白了,現在我已經實現了它,使其工作正常。

鑑於.obj文件支持頂點組,因此當您在文件中加載時,存儲每組頂點的開始和結束位置,每個零件的名稱都以'g'開頭。在一行的開始處,並計算每個組的中心點。

然後,確保您有一個XMFLOAT4X4分別爲每個要單獨轉換的部分,還有一個用於整個對象。在這種情況下,我有objectMatrix和wheel1-4Matrix。我將所需的任何轉換應用到objectMatrix中,這是一般的世界轉換,用於移動汽車。對於每個車輪,請執行以下翻譯:

 XMMATRIX translate; 
     translate = XMMatrixTranslation(-centre.x, -centre.y, -centre.z); 

     translate *= XMMatrixRotationX(angleToBeMoved); 

     translate *= XMMatrixTranslation(centre.x, centre.y, centre.z); 

     translate = XMMatrixMultiply(translate, XMLoadFloat4x4(&objectMatrix)); 

     XMStoreFloat4x4(&wheel1, translate); 

更新期間將其應用於每個車輪。在Draw方法中,確保使用DrawIndexed方法,爲每個組傳遞開始和結束索引,並使用相關的輪子矩陣(如果它是輪子)或者objectMatrix更新常量緩衝區的世界視圖矩陣在所有其他情況下。

0

爲什麼不加載模型混亂?車輪是汽車的一部分,因此是汽車的混亂。 與子亂七八糟,你可以分別變換和渲染,而不會改變其他部分。

如果你真的想把它加載到ID3DBuffer中,我建議你創建兩個緩衝區,一個保持汽車的靜態部分,另一個保持車輪,這樣,你可以轉換和渲染車輪,同時保持靜態部分不變。