我是否需要爲每個網格使用一個頂點緩衝區,還是可以將多個網格物體存儲在一個頂點緩衝區中?如果是這樣,我應該這樣做,我該怎麼做?一個頂點緩衝區中有多個網格物體?
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/DX11中使用多個頂點緩衝區
- 2. OpenGL頂點和緩衝區
- 3. 如何獲得網格的頂點緩衝區?
- 4. DirectX:如何初始化錐體的頂點緩衝區和索引緩衝區?
- 5. 卸載OpenGL中的頂點緩衝區
- 6. opengl中的頂點緩衝區
- 7. 一個真實幀緩衝區中的多個邏輯緩衝區
- 8. 多個緩衝區vs單個緩衝區?
- 9. 將一個緩衝區中的點移動到與另一個緩衝區中的點相同的行號
- 10. LWJGL頂點索引緩衝區導致「網格」的一半加載
- 11. Emacs - 多列一個緩衝區
- 12. 紋理頂點緩衝區對象
- 13. 紋理VBOs(頂點緩衝區對象)
- 14. 動態或靜態頂點緩衝區?
- 15. C++頂點緩衝區問題
- 16. 帶SDL的頂點緩衝區對象
- 17. iPhone和頂點緩衝區對象
- 18. OpenGL:頂點索引緩衝區問題
- 19. 訪問片段着色器中的頂點緩衝區(緩衝區陣列)
- 20. Managed Direct3D:鎖定整個頂點緩衝區
- 21. Boost.Asio - 自定義緩衝區的多個緩衝區
- 22. 如何以另一種顏色在頂點緩衝區中繪製頂點
- 23. 高速緩存,存儲緩衝區和BIU/WCB在CPU中各自擁有單獨的物理緩衝區還是單個物理緩衝區?
- 24. 頂點緩衝區數據到數組頂點數據流
- 25. 頂點緩衝區以開放式格式顯示1.X
- 26. 呈現多個頂點和索引緩衝區對象(IOS - OpenGLES 2.0)
- 27. 如何使用頂點緩衝區對象渲染多個不同的圓圈?
- 28. 模型中每個網格的緩衝區是否最優?
- 29. 從空間曲面網格緩衝區讀取頂點和索引
- 30. 將緩衝區內容複製到另一個緩衝區