我有一個模擬程序,我想在一個動畫(比方說500個步驟)或交互式地(改變一個對象意味着重新計算)渲染約500-1000個對象(相當小,最多50個三角形)所有其他對象在最壞的情況下)。opengl - 渲染設計(初學者)
這樣的重新編譯任務最好的方法是什麼?
我在想VBO和使用glBufferSubData
更新每個時間步的對象。或者還有其他一些方法嗎?
此外,由於有大約20種類型的對象,我應該使用20個不同的VBO,因此我可以設置相應的屬性?
我有一個模擬程序,我想在一個動畫(比方說500個步驟)或交互式地(改變一個對象意味着重新計算)渲染約500-1000個對象(相當小,最多50個三角形)所有其他對象在最壞的情況下)。opengl - 渲染設計(初學者)
這樣的重新編譯任務最好的方法是什麼?
我在想VBO和使用glBufferSubData
更新每個時間步的對象。或者還有其他一些方法嗎?
此外,由於有大約20種類型的對象,我應該使用20個不同的VBO,因此我可以設置相應的屬性?
如果你正在做關鍵幀動畫(每幀有一組頂點),那麼將它們全部作爲單獨的VBO上傳,並更改綁定哪一個,或者將它們全部上傳到一個VBO中並更改屬性。我懷疑這兩個解決方案之間會有很大的性能差異。
我會避免glBufferSubData
,因爲OpenGL應該能夠爲您管理所有的內存。如果這是一個更大的數據集,我會建議這種方法,因爲您可以將您需要的頂點從磁盤流式傳輸,以避免一次全部存儲在內存中,但只有少量數據,這不是問題。
如果你正在做基於骨骼的動畫,那麼如果你在CPU上進行蒙皮操作,glBufferSubData
方法基本上是唯一的方法。在GPU上執行蒙皮的頂點着色器將比CPU蒙皮更好,只需將您的幀存儲在mat3x4
制服中即可。
對於這樣一個小數量的對象,你應該選擇這樣做,只有優化,如果你真的有非常簡單的方法...
而且通過簡單的,我的意思是概念上最簡單的爲您服務。
如果您願意,您可以使用一個只有不同偏移量的單個VBO對象,而不需要使用多個偏移量。
是的,我正在做基於骨骼的動畫。好吧,我認爲這是要走的路:傳遞每個對象的參考框架,然後讓它充實。謝謝! – user1928812