2010-08-04 73 views
-1

我完全不理解opengl + glut工作.... 请解释他为什么这么做? =(OpenGL和GLUT uncomprehension

我有简单的代码

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

     glPushMatrix(); 
      ChessboardSurrogate.Draw(6,8,50, 0,0); // draw chessboard(6x8) in (0,0,0) edge per cell 50 
     glPopMatrix(); 

     glPushMatrix();  
      //glutSolidCube(100); //!!!!! 
     glPopMatrix(); 

     glLoadIdentity();  
     gluLookAt( 0.0, 0.0, -testSet::znear*2, 
       0.0, 0.0, 0.0, 
       0.0, 1.0, 0.0); 

     glMultMatrixf(_data->m); // my transformation matrix 

     glutSwapBuffers(); 
    } 

,我得到预期的结果。screenshot #1

然后我去掉glutSolidCube(100)。在任何情况下,我甚至推/弹出电流矩阵,后来重写它的身份矩阵 ....我认为,我会看到与cude相同的结果图像... 但是!我看THIS screenshot #2什么..... & *^@#$ %W HY?

如果我添加代码

 
     glRotatef(angleX,1.0,0.0,0.0); 
     glRotatef(angleY,0.0,1.0,0.0); 

glutSwapBuffers前,比我会看到当场棋盘..... screenshot #3

回答

1

这大概是只有一半的答案,但为什么在地球上你是在绘制后设置你的矩阵吗?你期望它做什么?

这样:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity();  
    gluLookAt( 0.0, 0.0, -testSet::znear*2, 
      0.0, 0.0, 0.0, 
      0.0, 1.0, 0.0); 

    glMultMatrixf(_data->m); // my transformation matrix 
    glPushMatrix(); 
     ChessboardSurrogate.Draw(6,8,50, 0,0); // draw chessboard(6x8) in (0,0,0) edge per cell 50 
    glPopMatrix(); 

    glPushMatrix();  
     //glutSolidCube(100); //!!!!! 
    glPopMatrix(); 


    glutSwapBuffers(); 

而且,始终确保你设置正确的矩阵:

glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt()... 

最后,除非你的draw()方法改变了模型视图矩阵,你推/ PopMatrix是无用的,应该避免(出于性能和便携性的原因,因为它已被弃用)