2011-07-10 65 views
2

我有一個使用OpenGL ES 1.1呈現的示例3D場景。 這裏是我所得到的,當我是有身份的投影矩陣(我還使用正常和鏡面地圖):OpenGL透視和照明問題

enter image description here

所以一切看起來OK。

但如果我使用glFrustum設置角度來看,我得到這樣的:

enter image description here

如此看來,法線被反轉,如果我嘗試用-1乘他們,我得到這個:

enter image description here

它有一個像來自對面的光的效果。

我還要提到的是使用身份投影矩陣,當我有設定

glCullFace(GL_FRONT);

(我想這是因爲標準化的設備COORDS是左撇子)。

我很樂意聽到有關如何解決此問題的任何建議。

編輯。 這裏是投影設置:

float right = 0.03; 
float top = 0.045; 
float near = 0.1; 
float far = 100.0; 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustumf(-right, right, -top, top, near, far); 
+0

將您的法線重新導出朝向正確的方向? –

+0

你不應該改變'glCullFace(GL_FRONT)'。也許你的投影矩陣是顛倒臉?向我們展示你的'glFrustum'調用。這是你改變的東西嗎? –

+0

@Banthar - 我使用glCullFace(GL_FRONT)進行標識投影,而不是透視。查看我的編輯。 – Max

回答

0

你的第二個屏幕看起來不錯,我沒有看到你的問題。請在第二張照片中突出顯示,您認爲看起來不正確。

請記住,在投影矩陣中,應該只有投影和相機放置的種類。 「相機放置」屬於模型視圖。

+0

不幸的是,第二個屏幕看起來不像它應該。該模型具有鱗片,並在法線貼圖的幫助下呈現。第一個屏幕 - 它應該是這樣的。而且,如果您沒有注意到(在動畫模型中可以更好地看到),則該模型在第二個屏幕上不會平滑着色(與第一個屏幕不同)。 – Max

+0

我不認爲你的問題是這個問題。我認爲這個問題在你的片段着色器的某個地方,如果我必須猜測你可能會搞亂切空間→眼圖空間轉換。 – datenwolf

+0

我使用的是OpenGL 1.1,所以我沒有任何着色器。 – Max