我是否需要爲每個網格使用一個頂點緩衝區,還是可以將多個網格物體存儲在一個頂點緩衝區中?如果是這樣,我應該這樣做,我該怎麼做?一個頂點緩衝區中有多個網格物體?
7
A
回答
5
您可以將多個網格物體存儲在一個頂點緩衝區中。通過在一個緩衝區中放入幾個小網格物體,可以獲得一些性能。對於真正大的網格,你應該使用單獨的緩衝區。 SetStreamSource
可讓您指定當前網格的頂點緩衝區偏移量。
pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride());
-2
使用OpenGL,您可以使用glVertexPointer()
開始從VBO內部的某個偏移量開始繪製。不確定D3D。
2
TBH通常把它們放在一個大緩衝區的原因是爲了節省繪製調用。切換頂點緩衝區的開銷非常小。如果您可以將它們全部合併到一個頂點緩衝區中,並在1中繪製10個對象,則您將獲得一場大勝。
通常要將它們合併,您只需創建一個大頂點緩衝區,並將所有頂點數據一個接一個地轉換成已經世界變換的頂點數據。然後設置一個索引緩衝區,使它們一個接一個地呈現。然後你可以用最小的平局調用畫出一切。當然,如果你移動一個需要更新頂點緩衝區的一部分,這就是爲什麼它是靜態幾何的理想情況。
如果所有的對象都是相同的,那麼您將只使用1個頂點緩衝區(其中有1個對象定義)和1個索引緩衝區?矩陣移動或動畫的對象...
如果所有的對象是不同的和移動/動畫,然後我只是堅持個人VBs。我懷疑你會注意到它們之間的區別。
0
嗯,我的經驗是,只要你的緩衝區不是真的很小或真的很大,它並沒有太大的區別。我懷疑,開關緩衝器中的任何低效率都可以通過提高驅動器的效率來提高驅動器的操作性,以便通過更小的緩衝器來管理內存。
相關問題
- 1. DX10 +多個頂點緩衝區,單個索引緩衝區
- 2. 創建一個具有變體大小的頂點緩衝區
- 3. 有多少頂點緩衝區太多?
- 4. OpenGL:單頂點緩衝區中的兩個球體
- 5. 在DX10/DX11中使用多個頂點緩衝區
- 6. OpenGL頂點和緩衝區
- 7. lwjgl沒有繪製頂點緩衝區
- 8. Directx11如何管理多個頂點/索引緩衝區?
- 9. 更新Direct3D網格的頂點緩衝區的最快方法?
- 10. 如何獲得網格的頂點緩衝區?
- 11. DirectX:如何初始化錐體的頂點緩衝區和索引緩衝區?
- 12. 帶有多個繪製緩衝區的幀緩衝區
- 13. 卸載OpenGL中的頂點緩衝區
- 14. opengl中的頂點緩衝區
- 15. 有多少個nginx緩衝區太多?
- 16. 一個簡單的頂點緩衝區對象(C++),不渲染
- 17. 一個真實幀緩衝區中的多個邏輯緩衝區
- 18. 的memcpy從一個char *緩衝區一個wchar_t的*緩衝區
- 19. 多個緩衝區vs單個緩衝區?
- 20. 如何在Direct3d11中從頂點緩衝區中讀取頂點
- 21. 創建一個MeshCollider,用於具有多個頂點的網格
- 22. OpenGL - 從頂點着色器訪問緩衝區中的下3個頂點
- 23. WSARecv()和多個緩衝區
- 24. diffput到多個緩衝區?
- 25. 將一個緩衝區中的點移動到與另一個緩衝區中的點相同的行號
- 26. LWJGL頂點索引緩衝區導致「網格」的一半加載
- 27. Emacs - 多列一個緩衝區
- 28. C++頂點緩衝區問題
- 29. LWJGL/OpenGL頂點緩衝區對象
- 30. 動態或靜態頂點緩衝區?