2010-07-25 50 views
0

我有一個簡單的矩形,我在屏幕上繪製了opengl。在OpenGL中移動z軸的一些點不起作用

我的目標是繪製這個3D矩形,所以它的左側比右側更深(z軸)。

看的這張照片,所以你可以明白我的意思: http://www.battleteam.net/tech/fis/docs/images/metroid_hud1.png

這是我用來繪製它使用不同顏色的矩形的代碼,我在左側起來有點感動這兩點。

glColor4f(1.0, 1.0, 1.0, 1.0); 
glVertex3f(0,   -20,   z_left); 

glColor4f(0.0, 1.0, 1.0, 1.0); 
glVertex3f(SQUARE_WIDTH, 0,    0); 

glColor4f(1.0, 0.0, 1.0, 1.0); 
glVertex3f(SQUARE_WIDTH, SQUARE_HEIGHT, 0); 

glColor4f(1.0, 1.0, 0.0, 1.0); 
glVertex3f(0,   SQUARE_HEIGHT-20, z_left); 

我使用z_left變量來動態地改變在左側的兩個點的z值上的z軸移動這些點。但是,發生的情況是矩形從左側切斷。當z_left值達到通過「glOrtho」函數調用定義的zFar或zNear變量時,會發生這種情況。

我的glOrtho看起來像這樣: glOrtho(0,SCREEN_WIDTH,SCREEN_HEIGHT,0,-100,100);

所以,如果z_left高於100或低於-100,那麼奇怪的切斷就開始了。我不知道爲什麼。我期望讓矩形的左邊在z軸上移動,意味着將其移動得更深(遠離眼睛)或更靠近。

有人可以告訴我這裏有什麼錯嗎?其餘的代碼非常簡單和標準。 3D環境中的一個簡單的矩形被改變了一點,使其具有像矩形一樣的「3d面板」。

我的OpenGL init看起來像這樣。

glClearColor(0, 0, 0, 0); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -100, 100); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

感謝您的任何幫助。

回答

4

正射投影具有該屬性,您可以將它們移動到Z軸上,但對象看起來相同。切換到透視投影,其中物體距離攝像機越來越小。

關於剔除,您正在查看立​​方體之外繪圖(當Z < -100或Z> 100時)。投影將剔除視野外的任何物體。

+0

好吧,那是什麼意思?我的init錯了嗎?我以爲我已經在透視投影。我做的唯一的事情就是上面的init,然後用glVertex3f開始繪圖。你能解釋我要改變什麼嗎? 你的答案的第二塊是合理的。 感謝您的幫助。 – NovumCoder 2010-07-26 14:15:51

+0

您正在使用glOrtho,它會進行直接投影。使用gluPerspective獲得透視投影。 – 2010-07-26 14:28:40

+0

啊太好了。只是搜索「opengl透視投影」。 我在這裏看到兩個不同的地方。 glFrustum和gluPerspective。正如我使用SDL + OpenGL我猜「glFrustum」是我的選擇。 非常感謝。 – NovumCoder 2010-07-26 14:32:10