2011-12-16 75 views
0

我正在OpenGL ES 1.1中編寫應用程序。我正在觀看者周圍渲染一個帶紋理的球體,即眼睛視點位於球體的中心。因爲我不需要任何照明效果,所以目前沒有必要爲每個頂點設置曲面法線。不過,我需要那些打開背面剔除。打開背面剔除有什麼好處嗎?由於我的眼睛位於球體的中心,因此無論如何,任何被剔除的面孔(即眼睛後面)都將由近z面截斷來處理。OpenGL ES 1.1:剔除與附近剪輯平面 - 性能

因此,在這種情況下,添加曲面法線並打開背面剔除會讓我獲得任何性能優勢嗎?

回答

3

首先,表面法線與背面剔除沒有任何關係。面部的正面或背面由投影到屏幕空間時其頂點的排序決定,缺省情況下(可使用glFrontFace更改)在逆時針排列頂點並面朝後方時面朝前順時針順序。

所以你不需要任何法線。這些僅用於照明計算,沒有別的。單個頂點的法線應該如何影響周圍的臉部朝向?取頂點法線的平均值?如果這些完全相反或更奇怪(因爲用戶可以指定他想要的任何法線)?

也就是說你也不需要對你的球體進行背面剔除,因爲從內部你總是可以看到正面。但是打開它也沒有什麼壞處,因爲你也沒有看到任何背面(並且你可以假設臉部剔除是免費的)。但是在這種情況下,請注意方向或面部,這可能是因爲大多數對象都被細分爲棋子,所以當您處於球體內部時,您可能需要啓用正面剔除(glCullFace(GL_FRONT))而不是背面剔除。他們的三角形面向外部。或者你可以切換到glFrontFace(GL_CW)

+0

非常感謝,並且關於法線與剔除非常好,德哦! – MeinHeinlein 2011-12-20 16:56:32

0

您肯定不需要法線來啓用背面剔除。唯一重要的是剔除多邊形是面向前還是背面。您可以使用glFrontFace功能指定正面朝向,並通過使用glCullFace功能準確指定需要剔除的內容。沒有必要的法線。

也就是說,在這種情況下確實無關緊要,因爲無論如何您的背面多邊形都會被剪切掉。至少在OpenGL的部分中,