2015-09-08 53 views
0

假設我的場景上有數百個矩形。他們每個人都正在改變每一幀:更新VBO或使用制服?

  • 他們搬過來現場時,旋轉,縮放向上/向下
  • 頂點的顏色變化,並應與紋理的顏色
  • 紋理座標的變化,因爲這些都是2D動畫相結合

我應該怎麼做才能獲得最佳性能?有我的想法。請幫我選這是他們最好的或建議別的東西:

  • 更新VBO每一幀
  • 讓更多的頂點超過需求(例如:存儲所有動畫的幀VBO),並選擇其中呈現(電話glDrawElements很多次),通過制服
  • 發送變化的數據和頂點着色器,而不是CPU重新計算

主要的問題居然是:該功能可我撥打多次,我想和我應避免調用每個主循環多少次?

+0

VBO?你的意思是VAO?在你的情況下,看看[instanced渲染](http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html)。 – Gnimuc

回答

2

通常,模型在其本地空間中保持不變,因此您只需將其上載一次到VBO即可。諸如平移,旋轉,縮放等變化是通過將相應的變換矩陣加載到制服中並在着色器中使用它們來執行的。

+0

謝謝,那幫了我。怎麼樣調用glDrawElements很多次?假設我有一個VBO中的2D動畫和所有〜100幀。每個主循環我想渲染來自該VBO的2個三角形。這是個好主意嗎?另一種方法是在VBO中保留2個三角形並更新他們的紋理座標或通過統一的方式傳遞它們。我知道一切都會正常工作,但每種方式的表現如何? – ElChupacabra

+1

很難預測,因爲不同的GPU /驅動程序會有不同的表現。如果你只是渲染幾個不同的三角形,每個幀和VBO保持不變,你應該沒問題。但是再小一點的VBO和統一的更新也是司機處理得很好的事情,所以我不知道哪個更好。我對你的建議首先要找出你的perf瓶頸在哪裏,然後才能解決它。 –