2012-11-17 177 views
1

我想用OpenGL繪製一個簡單的四邊形。如果我沒有使用深度並使用0.0作爲z座標繪製四邊形,相同的代碼不會失敗。
好像深度未啓用或責任:無法用3D圖形繪製簡單的四邊形

#import <OpenGL/OpenGL.h> 
#import <GLUT/GLUT.h> 

int width=500, height=500, depth=500; 


void init() 
{ 
    glEnable(GL_DEPTH_TEST); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glViewport(0, width, height, 0); 
    gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0); 
    gluPerspective(45, 1, 1.0, 200.0); 
} 


void display() 
{ 
    glClearColor(0.0, 0.0, 0.0, 0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glColor4f(1, 0, 0, 0); 
    glBegin(GL_QUADS); 
    glVertex3i(100, 100, 100); 
    glVertex3i(100, 300, 100); 
    glVertex3i(300, 300, 100); 
    glVertex3i(300, 100, 100); 
    glEnd(); 

    glutSwapBuffers(); 
} 


int main(int argc, char * argv[]) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowPosition(100, 100); 
    glutInitWindowSize(width, height); 
    glutCreateWindow("Test"); 
    glutDisplayFunc(display); 
    init(); 
    glutMainLoop(); 
    return 0; 
} 

我剛纔看到一個黑色的窗口,但我看到裏面有一個紅色的方形。

回答

1

更改init()功能:

void init() 
{ 
    glEnable(GL_DEPTH_TEST); 
    glViewport(0, width, height, 0); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45, 1, 1.0, 200.0); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0); 
} 

您的問題是gluLookAt()應該用來定義模型視圖矩陣,但是你乘以投影之一。另外glViewport()調用與矩陣計算無關,所以我將它移動到函數的起始位置。不是很需要,但我覺得更清楚。

+0

非常感謝,直到現在我還不知道如何處理3D圖形。 –