2014-03-13 58 views
0

我正在繪製一個使用glBindBuffer的600萬個元素(四邊形和三邊形)的巨大模型。如果我爲所有組件(組件,是一組元素)提供單一顏色,與具有不同顏色的組件相比,模型旋轉速度更快。我可否知道這個原因。我能從我身邊改善任何表現嗎?opengl單色和多色性能問題

+4

添加代碼示例。 'glBindBuffer'不是一個繪圖命令,你不能用它來繪圖。 – keltar

回答

0

在計算機圖形學中有一個術語'批'。簡而言之,批處理是狀態+繪製;如果發生多次抽籤但狀態沒有變化,則該抽籤將包含在同一批次中。但是,改變狀態會中斷批處理並準備新的狀態。這是CPU密集型任務;您應儘可能少使用批次,否則您將達到CPU限制。

每幀6百萬批次不是很低的數字。如果你的對象很小(幾個元素 - 有時甚至是幾百個元素),你可以將它們全部合併到一個頂點數組中,並添加包含顏色的額外頂點屬性(如果使用固定管線 - 使用glColorPointer)。如果對象很大並且顏色開銷太重要 - 你可以使用實例化,但是它需要足夠現代化的圖形卡(但是無論如何渲染6百萬個對象都會很慢而不會下降GPU)。

0

謝謝你的回覆。

我可以寫僞代碼

for(i=0; i < iSize ; ++i) 
{ 
glColorfv(componet[i].rgba); 
glDrawElements(GL_QUADS,......);// THis is working fine. 
} 

但是我發現了什麼(感覺)是,如果及部件[I] .rgba對於所有i值,則該模型旋轉相同的(處理/縮放等)的速度更快與所有組件具有不同顏色的情況相比。

也許我可能會這樣發佈。對不起。

+0

您可以(也應該)編輯您的問題以添加信息,而不是放置實際上不回答問題的答案。 – keltar

+0

它是一個錯誤 – Vishwamithra