2010-08-04 6 views
-1

Je ne comprends pas complètement les travaux opengl + glut .... S'IL VOUS PLAIT expliquer pourquoi il fait cela? = (OpenGL et GLUT uncomprehension

J'ai simple code

 
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(); 
    } 

Et j'obtenir le résultat attendu. screenshot #1

Je décommenter glutSolidCube (100). En tout cas, je fais même push/pop actuelle matrice, et plus tard surcharger par matrice d'identité .... je pense que je verrais la même image de résultat avec cude ... MAIS! je vois THIS screenshot #2 Ce que le ..... & *^@ # $ % W hy?

Si j'ajouter un code

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

avant glutSwapBuffers, que je ne verrai que le jeu d'échecs sur place ..... screenshot #3

Répondre

1

Ceci est probablement la moitié de la réponse, mais pourquoi sur la terre établissez-vous vos matrices APRÈS le dessin? Qu'attendez-vous qu'il fasse?

donc:

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(); 

De plus, assurez-vous toujours vous configurez la matrice droite:

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

Enfin, à moins que votre méthode draw() modifie la matrice modelview, votre push/PopMatrix est inutile et doit être évité (pour des raisons de performances et de portabilité car il est obsolète)

Questions connexes