2014-01-12 61 views
0

我有一個「正常」的opengl場景,想用一個簡單的四邊形覆蓋這個場景。opengl失真push-popMatrix

gl.glMatrixMode(GL_PROJECTION); 
gl.glPushMatrix(); 
gl.glLoadIdentity(); 
gl.glMatrixMode(GL_MODELVIEW); 
gl.glPushMatrix(); 
gl.glLoadIdentity(); 
gl.glTranslatef(-0.8f, 0.0f, 0.0f); 
// draw background 
gl.glBegin(GL_QUADS); // of the color cube 
gl.glColor3f(1.0f, 0.5f, 0.5f); 
gl.glVertex3f(0, 0, 1.0f); 
gl.glVertex3f(0.5f, 0, 1.0f); 
gl.glVertex3f(0.5f, 0.5f, 1.0f); 
gl.glVertex3f(0, 0.5f, 1.0f); 
gl.glEnd(); 
gl.glMatrixMode(GL_PROJECTION); 
gl.glPopMatrix(); 
gl.glMatrixMode(GL_MODELVIEW); 
gl.glPopMatrix(); 

正如你可以在屏幕截圖中看到的,新的矩陣是失真的。彩色的線是軸。

現在的問題是:我如何設置(在gluPerspective等)對我的矩陣來呈現一個正確的陣容寬高比?

+0

這種扭曲的方式是什麼?你可以製作另外一張圖表,在其中畫出它應該看起來像什麼,或突出顯示問題。 –

回答

2

您需要考慮視口的大小和形狀。轉換是在「標準化座標」中完成的。這意味着視口的左下角是(0,0),視口的右上角是(1,1)。您的投影矩陣需要考慮視口的形狀以補償並使您的四邊形成方形。

視口的高度和寬度的比率稱爲「寬高比」。

請參閱this page,您問題的重要部分是視場和圖像寬高比。有太多的內容在這裏發佈可用的摘錄。您應該毫無困難地在投影矩陣縱橫比上查找資源,以及如何計算正確的投影矩陣。

+0

感謝您的網站。我沒有明白,我讀了很多這些文章。但我不明白如何設置這個「長寬比」,我的當前矩陣...似乎我必須讀更多:/ – Ontje

+0

@Ontje獲取視口的大小,「寬度/高度」是長寬比。使用該數字作爲寬高比。這有幫助嗎? – doug65536

+0

我知道如何計算比例,我已經將它用於主場景。並且它看起來像網格一樣完美。 pushMatrix後...這個失真來了 – Ontje