2010-05-14 14 views
3

隨着我的項目接近優化階段,我注意到減少頂點元數據可以大大提高3D渲染的性能。我有一個問題,使用GLshort來表示頂點,和正常

最終,我搜索了很多,並從stackoverflow中找到以下建議。

Using GL_SHORT instead of GL_FLOAT in an OpenGL ES vertex array

How do you represent a normal or texture coordinate using GLshorts?

Advice on speeding up OpenGL ES 1.1 on the iPhone

簡單的實驗表明,「浮動」切換到「SHORT」頂點和正常不算強悍,但是當你在做什麼麻煩我是將頂點縮放到其原始大小(使用glScalef),法線乘以比例的倒數。對此的自然補救措施是在提交給GPU之前將法線與標尺相乘。然後,我的短法線幾乎變爲0,因爲比例因子通常小於0.杜!

你怎麼在同一時間使用「短」的頂點和正常?我一直在嘗試這一點和那一整天,但目前爲止,我只能使用「float vertex w/byte normal」或「short vertex w/float normal」。

您的幫助將得到真正的讚賞。

+0

比例因子小於0? – UncleZeiv 2010-05-14 08:54:57

回答

1

難道你只是通過調用這個標準化你的法線?

glEnable(GL_NORMALIZE); 

它並不理想,因爲正火很可能會擊中GPU一點,但它實際上取決於如果你的瓶頸是由數據傳遞到GPU或由GPU做過多而引起的。與任何優化一樣,你需要弄清楚哪個更好的加速。我會嫌疑人你可能會放慢傳遞頂點數據,所以你會加快速度。

+0

我想過正常化它,但從來沒有真正嘗試過,因爲「正常化」通常是從我讀過的每篇文章中討論的。 但你說得對。另外,無論如何,總是會有折衷。 我會盡快給它一個鏡頭。非常感謝。 – Xylopia 2010-05-14 07:51:09

0

可能的事嘗試:

  • 嘗試通過與GL_NORMAL矩陣
  • 使用頂點着色器,你想
  • 執行計算擺弄反擊比例不擴展您的頂點數據向下放大相機矩陣
+0

1.GL_NORMAL矩陣聽起來不錯。我會嘗試在GL_NORMALIZE和GL_NORMALIZE之間進行比較。 2)我的proj是固定渲染管道,所以沒有頂點着色器。 3)擴大我的相機矩陣...是不可能的,因爲我直接向模型視圖空間提供一切。 :( 謝謝你的GL_NORMAL矩陣:) – Xylopia 2010-05-14 09:32:59

+0

至於3),你可以處理更大的「模型視圖空間」,除非我失去了一些東西。我的意思是,你應該在某個時刻控制如何將世界映射到屏幕座標,而且你應該能夠利用那個...再次,除非我失去了一些東西。 – UncleZeiv 2010-05-14 11:27:58

相關問題