2013-02-19 187 views
0

我知道在這段代碼中存在一些問題,就像我運行它沒有任何東西被繪製一樣。錯誤的地方位於該代碼堆棧中的push和pop矩陣(openGL)

void display(void) 
{ 
    glClear (GL_COLOR_BUFFER_BIT); 
    glColor3f (1.0, 1.0, 1.0); 

    glLoadIdentity();   

    glPushMatrix(); 
    glRotated((GLdouble) Vangle,1.0,0.0,0.0); 
    gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 
    glPopMatrix(); 

    glutWireCube (1.0); 

    glFlush(); 
} 

程序

部分,你能告訴什麼是錯的?

我覺得在矩陣堆棧方法(push和pop),我不知道我怎麼使用它。注意

:價值Vangle爲零。

+1

顯示*不*矩陣OPS立方體?請記住,「pop」將撤銷對「推送」矩陣所做的所有操作。 – 2013-02-19 21:25:46

+0

爲什麼在gluLookAt之前glRotated()?你是否也需要旋轉,因爲gluLookAt基本上提供了一些旋轉和翻譯到矩陣堆棧? – user3728501 2013-02-19 21:45:15

+0

我想到的另一點是,您應該在調用gluLookAt之前調用glMatrixMode(GL_PROJECTION),然後調用glMatrixMode(GL_MODELVIEW)以避免混淆。看到這個線程:http://stackoverflow.com/questions/13053334/gluperspective-glviewport-glulookat-and-the-gl-projection-and-gl-modelview-mat哪一個應該理清關於這個問題的任何混淆。 (我希望!) – user3728501 2013-02-19 21:47:20

回答

1

正如pst指出的那樣:在glPush/PopMatrix()對內移動glutWireCube()呼叫。

這給一個鏡頭:

#include <GL/glut.h> 

void display() 
{ 
    glEnable(GL_DEPTH_TEST); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    // projection 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    double w = glutGet(GLUT_WINDOW_WIDTH); 
    double h = glutGet(GLUT_WINDOW_HEIGHT); 
    double ar = w/h; 
    gluPerspective(60, ar, 0.1, 100); 

    // "camera" transform 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 

    // draw cube 
    glPushMatrix(); 
    float Vangle = 0.0f; 
    glRotated((GLdouble) Vangle,1.0,0.0,0.0); 
    glutWireCube (1.0);  
    glPopMatrix(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("GLUT"); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 
+0

是的,它工作,但我想旋轉影響沒有立方體的相機的位置,謝謝 – user1841718 2013-02-19 22:42:36