2008-08-23 128 views
10

我想在OpenGL中做一個簡單的旋轉,但是必須忽略這一點。 我不是在尋找一個特定的修補程序,而是一個快速解釋或鏈接,更一般地解釋OpenGL旋轉。OpenGL旋轉

目前,我有這樣的代碼:

glPushMatrix(); 
    glRotatef(90.0, 0.0, 1.0, 0.0); 
    glBegin(GL_TRIANGLES);   
    glVertex3f(1.0, 1.0, 0.0);   
    glVertex3f(3.0, 2.0, 0.0);   
    glVertex3f(3.0, 1.0, 0.0);   
    glEnd(); 
glPopMatrix(); 

但結果不是一個三角形旋轉90度。

編輯 嗯感謝邁克Haboustak - 看來我的代碼打電話使用glOrtho一個SetCamera功能。我對OpenGL太陌生了,不知道這意味着什麼,但禁用了這一點,並在Z軸上旋轉產生了預期的結果。

回答

6

你得到1單位直線?看起來90度腐爛。在Y周圍你會看到一個沒有深度的三角形邊。

你應該嘗試圍繞Z軸旋轉,而不是看看你是否得到了更有意義的東西。

OpenGL有兩個矩陣與幾何,ModelView和Projection的顯示有關。數據在屏幕上可見之前,兩者都應用於座標。首先應用ModelView矩陣,將數據從模型空間轉換到視圖空間。然後應用投影矩陣將來自視圖空間的數據轉換爲2D投影儀上的「投影」。

ModelView用於將多個對象定位到它們在「世界」中的位置,Projection用於將對象定位到屏幕上。

你的代碼似乎很好,所以我從閱讀文檔中知道你知道像glPushMatrix()這樣的函數的本質是什麼。如果圍繞Z旋轉仍然沒有意義,請通過調用glMatrixMode來確認您正在編輯ModelView矩陣。

+0

重要!請參閱下面的佩裏的答案。 – Ali 2011-01-07 20:46:43

6

確保你通過把下面的glRotatef調用之前修改模型視圖矩陣:

glMatrixMode(GL_MODELVIEW); 

否則,你可能會被修改或者投影或紋理矩陣代替。

1

當我第一次看OpenGL時,NeHe tutorials(參見左邊的菜單)是非常寶貴的。

1

關於投影矩陣,你可以找到一個很好的來源,開始在這裏:

http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx

它說明了一些關於如何構建一種類型的投影矩陣。正投影是這種矩陣的非常基本的/基本的形式,基本上是將3軸座標中的2個座標投影到屏幕上(您仍然可以翻轉軸並縮放它們,但不存在扭曲或透視效果) 。矩陣的

變換是最有可能在3D渲染時的最重要的事情之一和基本上包括3個矩陣階段:

  • Transform1 =對象座標系到世界(例如 - 對象的旋轉和縮放)
  • Transform2 =世界座標系到照相機(配售對象在正確的地方)
  • Transform3 =攝像機座標系統到屏幕空間(突出到屏幕)

通常,3矩陣乘法運算結果稱爲WorldViewProjection矩陣(如果您遇到此術語),因爲它將座標從模型空間轉換到World,然後轉換爲Camera,最後轉換爲屏幕表示。

玩得開心

5

的「接受的答案」是不完全正確 - 圍繞Z旋轉不會幫助您看到這個三角形,除非你已經做了在此之前的代碼一些奇怪的事情。在這種情況下,刪除glOrtho(...)調用可能會糾正問題,但您仍有其他一些問題。

兩個主要問題與代碼編寫:

  • 有你之前定位的相機?在OpenGL中,相機位於原點處,沿Z軸向下看,正Y爲向上。在這種情況下,三角形被繪製在與您的眼睛相同的平面上,但向上和向右。除非你有一個非常奇怪的投影矩陣,否則你不會看到它。 gluLookat()是執行此操作的最簡單的命令,但任何移動當前矩陣(應該是MODELVIEW)的命令都可以工作。

  • 您正在用左手或順時針方法繪製三角形,而OpenGL的默認值是右手或逆時針座標系。這意味着,如果您正在挑選背面(您可能不會,但可能會隨着您的進步而前進),但不會像預期那樣看到三角形。要看到問題,請將右手放在臉前,想象它在XY平面中,按照繪製頂點(1,1)到(3,2)到(3,1)的順序移動手指)。當你這樣做時,你的拇指背對着你的臉,這意味着你正在看三角形的背面。你需要養成用右手方法繪製面部的習慣,因爲這是在OpenGL中完成的常用方法。

我推薦的最好的東西是使用NeHe教程 - http://nehe.gamedev.net/。他們首先向您展示如何在多個系統中設置OpenGL,轉移到繪製三角形,並且繼續慢慢地,確定地繼續進行更高級的主題。他們很容易遵循。