2013-05-12 57 views
1

我剛開始閱讀藍皮書的初始章節,並理解投影矩陣可用於修改我們所需座標系到真實座標系的映射。它可以用於重置的座標系和由以下(作爲一個例子)
在OpenGL中設置繪圖的座標系

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); //With 1's in the diagonal of the identity matrix, the coordinate system is rest from -1 to 1 (and the drawing should happen then inside those coordinates which be mapped later to the screen) 

又如它從-1更改爲1上左,右,頂和底:(寬度:1024,身高:768,屏幕比例:1.33),並改變座標系統,做到:

glOrtho (-100.0 * aspectRatio, 100.0 * aspectRatio, -100.0, 100.0, 100.0, 1000.0);

我預期的座標系對OpenGL更改爲-133在左邊,133在右邊,-100在底部和100頂上。使用這些座標,我知道繪圖將在這些座標內完成,而這些座標之外的任何內容都將被裁剪。

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
    glOrtho(-100 * aspectRatio, 100 * aspectRatio, -100, 100, 100, 1000); 
glMatrixMode(GL_MODELVIEW); 
    glRectf(-50.0, 50.0, 200, 100); 

但是,上述命令在屏幕上沒有給出任何輸出。我在這裏錯過了什麼?

+0

您不應該使用棄用的API!在當前的API中,座標系統的設置有很大的不同(你必須自己完成),學習已棄用的API是浪費時間的恕我直言。 – 2013-05-12 11:41:08

+0

@FelixK。 :你能指出最新的正確方法嗎?我甚至不確定它是什麼。 – user1240679 2013-05-12 11:47:25

+0

也許你沒有設置顏色。我建議爲OpenGL 3或更高版本做一些教程,以獲得一些東西。 – 2013-05-12 11:53:59

回答

2

我看到這裏有兩個問題:

  1. 的矩形應該通過節目不可言,因爲glRectf()畫在深度z = 0,但您設置orthorgraphic投影覆蓋z範圍[100,1000],所以物體位於近平面之前,應該被剪掉。
  2. 您不指定您使用的MODELVIEW矩陣。在評論中,你提到該對象確實出現,但不在你期望的地方。這也違反了我的第一點,但如果ModelView矩陣不是身份可以解釋。

所以我建議首先使用像glOrtho(...,-1.0f,1.0f)不同的投影矩陣;因此實際上會覆蓋z = 0,然後在上述代碼中的glMatrixMode(GL_MODELVIEW)之後插入glLoadIdentity()調用。

另一種方法是保持glOrtho()原樣並指定一個平移矩陣,它在z = 100和z = 1000之間的某處移動矩形。