2012-11-13 176 views
0

在此代碼中,我嘗試繪製立方體。我嘗試繪製所有面逆時針頂點。
問題是,如果我不旋轉立方體只繪製紅色的臉部,如果我旋轉它的5度,我只看到立方體的一部分。繪製一個立方體並旋轉它:立方體的一部分消失

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

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

void init() 
{ 
    glEnable(GL_DEPTH_TEST); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(200, 200,-200, 200, 200, 0, 0, 1, 0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0,width,0,height); 
    gluPerspective(90, 1, -100, 100); 
    glViewport(0, 0, width, height); 
} 

void drawCube() 
{ 
    int vertices[8][3]= { {100,100,0} , {300,100,0}, {300,300,0}, {100,300,0}, {100,100,300} , {300,100,300}, {300,300,300}, {100,300,300} }; 
    glBegin(GL_QUADS); 

    glColor4f(1, 0, 0, 0); 
    glVertex3iv(vertices[0]); 
    glVertex3iv(vertices[1]); 
    glVertex3iv(vertices[2]); 
    glVertex3iv(vertices[3]); 

    glVertex3iv(vertices[4]); 
    glVertex3iv(vertices[5]); 
    glVertex3iv(vertices[6]); 
    glVertex3iv(vertices[7]); 

    glColor4f(0, 1, 0, 0); 
    glVertex3iv(vertices[1]); 
    glVertex3iv(vertices[5]); 
    glVertex3iv(vertices[6]); 
    glVertex3iv(vertices[4]); 

    glVertex3iv(vertices[0]); 
    glVertex3iv(vertices[4]); 
    glVertex3iv(vertices[7]); 
    glVertex3iv(vertices[3]); 

    glColor4f(0, 0, 1, 0); 
    glVertex3iv(vertices[3]); 
    glVertex3iv(vertices[2]); 
    glVertex3iv(vertices[6]); 
    glVertex3iv(vertices[7]); 

    glVertex3iv(vertices[0]); 
    glVertex3iv(vertices[1]); 
    glVertex3iv(vertices[5]); 
    glVertex3iv(vertices[4]); 

    glEnd(); 
} 


void display() 
{ 
    glClearColor(0.0, 0.0, 0.0, 0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glTranslatef(200,200,150); 
    glRotatef(5, 0, 1, 0); 
    glTranslatef(-200,-200,-150); 
    drawCube(); 
    glutSwapBuffers(); 
} 

void idle(void) 
{ 
} 

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); 
    glutIdleFunc(idle); 
    init(); 
    glutMainLoop(); 
    return 0; 
} 

這是我所看到的:

Window

不過我應該會看到一個旋轉立方,所以我應該看到在right.My懷疑另一面的部分是我以逆時針順序繪製頂點或其他東西時會出錯。

PS:代碼已過時,因爲在我的大學我沒有可能學習最新版本的OpenGL,我必須使用GLUT。

回答

1

夫婦的問題:

  1. 你的投影矩陣設置不無意義。

    首先,您應該決定是否需要拼字或透視投影。

    如果您要拼寫,請使用gluOrtho2d。如果您想要透視投影,請使用gluPerspective。使用兩者都會產生一種奇怪的轉變,這當然不是你想要的。

  2. gluPerspective不能有一個負面的近機。近平面應該大於零,也許像1這樣的小平面,其中遠平面定義了距離相機要離背剪平面多遠的距離。既然你似乎在使用數百個單位,我可能會推薦一個1000左右的背板。

  3. 您正在調用gluLookAt,但通過在display()中調用glLoadIdentity來擦除視圖矩陣。如果你想要一個視圖矩陣,在編程之後不要擦除它。

+0

一切都好,除了我現在只能用正投影而不是預測投影。 gluPerspective的值我試圖是45,1,1,1000,我沒有看到窗口中的立方體。 –