2010-07-30 62 views
5

所以在OpenGL渲染應用程序中,在應用程序的整個生命週期中創建和維護一個頂點緩衝區通常會更好,只需用glBufferData替換每一幀數據;或者更好地刪除VBO並重新創建它的每一幀?直覺告訴我換掉數據更好,但是我見過的一些示例程序對後者有用,所以我有點困惑。更好地創建新的VBO或只交換數據? (OpenGL)

我讀過VBOs上的Nvidia白皮書,但是因爲我是opengl的新手,所以沒有多少意義。

預先感謝和建議

回答

5

既然你產生了一整套新一幀數據的文件似乎表明GL_STREAM_DRAW是正確的方式去了解的東西。

0

關於VBOs的重要之處在於它們呈現的數據緩衝區存儲在圖形內存中,而不是存儲在計算機的主內存中。這使得它們的使用非常高效,因爲它們中的數據不會更頻繁地更新,因爲每當你這樣做時,計算機將不得不將數據從主存儲器傳輸到圖形存儲器 - 這是很慢的。

所以理想的情況是將所有需要的渲染數據放入VBO中,然後只通過OpenGL函數(如矩陣轉換或着色器)操作它們。

所以你會例如將每個網格的世界空間座標和紋理座標放入VBO中,並且不要再直接觸摸它們;你會使用模型視圖矩陣,光照函數和着色器來渲染它們。

你可以做更多來優化VBO的使用,但這是我理解他們的基礎知識。

在這裏找到一些很好的提示和更多細節:How do I use OpenGL 3.x VBOs to render a dynamic world?