2011-11-13 79 views
0

這是我在很長一段時間 (幾十個小時)在谷歌,但我仍然 還沒有解決它令我沮喪的東西。我對openGL相當陌生,在過去的2-3個月裏,我開始在網上閱讀教程 ,並試用了一些代碼。 我的主要問題是,當我從正交投影移動到透視 我一直在爆炸如何管理和繪製一個簡單的形狀在屏幕上。我對矩陣知之甚少,但事情是在投影中,我指定了對象的x,y,z座標,這些座標是 。從角度來看,我還沒有看到如何應用座標 。我已經看到範圍從-1到1,甚至-20到20等。我讀過,你可以指定openGL上的座標,但我應該怎麼做? 在正交我這樣做:關於座標透視的OpenGL幫助

窗口大小是800×600 我想框是整個窗口 所以,

glVertex2i(0, 600); 
glVertex2i(0, 0); 
glVertex2i(800, 0); 
glVertex2i(800, 600); 

但對於投影? 當我把1放在窗口的末端,-1開始。 opengl如何決定窗口的開始/結束以及它爲什麼是-1到1? 這是該死的混亂,如果有人可以幫助我,我真的很感激它。 謝謝。

+0

因爲這是除去你的「大家」。 http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/93989#93989請注意,您可以在您自己的問題 – Hasturkun

+0

你基本上發表評論詢問變換如何工作以及透視投影如何工作。這對於答案來說太複雜了,但[我的教程涵蓋了它](http://www.arcsynthesis.org/gltut/)(以及更多)。請注意,雖然它適用於初學者,但它使用着色器並避免固定功能。 –

+0

謝謝:) @NicolBolas我讀到的轉換和觀點對谷歌一點點,但它似乎很愚蠢,或我必須說不是真的有用。渲染管道有一些階段,等等,將其轉換爲-1和1等等。我沒有發現任何重要的,因爲除了-1和1之外什麼都沒有提到。這讓我發瘋了......反正我也會看看你的嘖嘖,我希望我找到一些東西。非常感謝 – Dimitris

回答

1

首先,你設置了3D投影的投影和模型觀察矩陣:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective(fov, ratio, near_clip, far_clip); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluLookAt(eyex, eyey, eyez, lookatx, lookaty, lookatz, upx, upy, upz); 

gluLookAt需要3個載體,該相機的「眼睛」的位置,看看點和「向上矢量」。如果您調用gluLookAt(0.0,0.0,-10.0,0,0,0,0,1,0),則表示攝像機座標爲0,0,-10,並沿着z軸觀察原點0,0,0並且「向上」沿着正Y軸。如果你那麼做一個簡單的繪製調用OpenGL的一個四,它應該在你的渲染顯示:

glColor3f(1.0f,1.0f,1.0f); //set white color (or any contrast to your background) 
glBegin(GL_QUADS); 
    glVertex3f(-1.0f, 1.0f, 0.0f); 
    glVertex3f(1.0f, 1.0f, 0.0f); 
    glVertex3f(1.0f,-1.0f, 0.0f); 
    glVertex3f(-1.0f,-1.0f, 0.0f); 
glEnd(); 

你要麼在順時針或逆時針順序繪製,而不是在那些的組合。您可以使用glEnable/Disable(GL_CULL_FACE)和glCullFace控制剔除。

窗口大小爲800×600,我想框是整個窗口,以便

當您正在使用的2D投影(正投影)工作,你可以輕鬆地設置你的座標系統相匹配的尺寸大小你的窗口/視口。這在3D投影中不適用,因爲邊界現在是3D viewing frustrum,或者是從近剪輯到遠剪輯平面的3D音量。然後通過模型 - 視圖 - 投影矩陣將座標投影到2D表面上。您可以輕鬆輸入寬度爲800和高度爲600的四個座標,但要查看它,您需要遠離相機以捕捉整個四邊形。從評論

引用:

gluPerspective(45.0f,(雙)W /(雙)H,1.0F,100.0f)應該設定鄰近= 1和遠= 100的透視圖。但是因爲openGL是右手的,所以正面的z不在屏幕上,所以接近的距離應該是100,最遠的距離是1。它沒有意義..

應答(見上文3D觀看截鏈路):

甲視錐是場景中的位於相對於視口的照相機的3D體積。體積的形狀影響模型如何從攝像機空間投影到屏幕上

+0

我知道這一切關於設置,我的主要問題就是屏幕從-1到1,而不是我設置它的大小(例如,800×600)。 – Dimitris

+0

啊,現在我明白你的問題,我會更新我的答案 – edvaldig

+0

嗯,這樣意味着,如果我輸入我想要的座標爲四(800×600在這種情況下)我必須設置gluLookAt坐很遠? – Dimitris