我正在製作一個賽車遊戲作爲使用DirectX 11的任務的一部分,並且我已將一輛汽車的模型加載到ID3D11緩衝區中。由此,我想知道如何將汽車的車輪分別旋轉到模型的其餘部分。我有汽車每個部分的開始和結束索引,所以我知道它將被旋轉的部分,而不是如何單獨翻譯它。 (我不確定我是否包括代碼會有所幫助,但如果是這樣,請讓我知道)變換ID3D11緩衝區的一部分
0
A
回答
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中,我建議你創建兩個緩衝區,一個保持汽車的靜態部分,另一個保持車輪,這樣,你可以轉換和渲染車輪,同時保持靜態部分不變。
相關問題
- 1. 部分緩衝區寫入
- 2. 轉換字節緩衝區的一部分返回字符串
- 3. 在另一個緩衝區中使用緩衝區局部變量的值
- 4. 使用Node.js中其他緩衝區的一部分創建新緩衝區
- 5. 爲recv部分分配緩衝區
- 6. 可變緩衝區?
- 7. 區分Vim中的隱藏緩衝區和活動緩衝區
- 8. 分配一個大的DMA緩衝區
- 9. 的memcpy從一個char *緩衝區一個wchar_t的*緩衝區
- 10. 替換緩衝區名的提示在ERC緩衝區
- 11. 我如何轉換的char *緩衝區爲unsigned char緩衝區
- 12. Vim:如何:源碼緩衝區的一部分
- 13. 使用fread將文件的一部分讀取到緩衝區
- 14. 緩衝區溢出跳轉到代碼的一部分
- 15. 將文件的一部分複製到緩衝區中
- 16. 快速切換緩衝區?
- 17. C++ HLSL緩衝區變量
- 18. 緩衝區大小改變
- 19. SSIS緩衝區不改變
- 20. numpy數組的緩衝區分區
- 21. 如何將BGRA緩衝區轉換爲RGBA緩衝區格式?
- 22. Emacs意外地將緩衝區切換到臨時緩衝區
- 23. 緩衝區內存分配
- 24. 緩衝區分析問題
- 25. 圖形緩衝區分配
- 26. AudioUnit(Mac)AudioUnitRender內部緩衝區衝突
- 27. InputStream讀取緩衝區被分成兩個緩衝區
- 28. 緩衝區溢出 - 變量的變化
- 29. 如何重繪只有一部分呈現幀緩衝區?
- 30. nodejs從C接收到的緩衝區分爲兩部分
哪一部分你在掙扎?讀取頂點,進行數學計算或用新內容更新緩衝區?無論如何,更新緩衝區內容並不是正確的方法。相反,您應該使用單獨的繪圖調用渲染輪胎,並使用動態更新的常量緩衝區在頂點着色器中進行變換。 – MooseBoys