我想讓我的VBO移動,我想知道是否應該使用更新值更新整個VBO使用glBufferSubData
或只是使用已棄用的glTranslatef
移動我的東西。使用glBufferSubData使用不推薦的glTranslatef或更新座標是否更好?
如果我只是更新VBO中的值,我應該爲頂點,法線和紋理座標使用單獨的VBO還是應該將它們全部放入一個?
謝謝。
我想讓我的VBO移動,我想知道是否應該使用更新值更新整個VBO使用glBufferSubData
或只是使用已棄用的glTranslatef
移動我的東西。使用glBufferSubData使用不推薦的glTranslatef或更新座標是否更好?
如果我只是更新VBO中的值,我應該爲頂點,法線和紋理座標使用單獨的VBO還是應該將它們全部放入一個?
謝謝。
:通常,您應該總是儘可能減少CPU與GPU之間傳輸的數據量,以最大限度地保持性能。
因此,應該避免使用glBufferSubData()更新整個頂點緩衝區,並儘可能使用glTranslate()和glLoadMatrix()(不推薦使用)或着色器等變換。
但是,既然您已經在使用VBOs,我會推薦使用着色器使用着色器統一變量和glUniformMatrix()進行轉換。
:分離頂點,法線和紋理座標或將它們組合在一個VBO中取決於您。在大多數情況下,我將它們合併在一起,因爲它只生成一個句柄,而我只需要一次glBufferData()調用。但是如果只有一個部分像紋理座標更新並且其他部分保持原樣,那麼分離會更好,因爲您也可以單獨更新它們。
更高級: 如果您使用的是緩衝隔行掃描,那麼顯然必須將它們組合起來。 有時使用緩衝隔行掃描可能會比沒有隔行掃描更快,因爲單個頂點所需的數據可以保持在一起,並且可以使用緩存。但是你必須嘗試一下對性能有什麼影響(如果有的話),因爲它很大程度上取決於你使用的硬件。
謝謝。我將學習如何使用着色器,而不是使用已棄用的函數和'glBufferSubData',因爲無論如何我都需要它。另外分隔VBO可能是最好的想法,因爲有時只有頂點或紋理座標需要更新。 – user2513924 2014-08-31 16:29:59
我會首先探討在着色器中是否可以這樣做,或者先在內存中準備好變體緩衝區:) – Grimmy 2014-09-01 13:35:52