La compréhension glPushMatrix() et glPopMatrix()

J'ai le code suivant:

void drawObj1(){    
    glPushMatrix();
            glTranslatef(rBaseInitPos + (rBaseDim[0] /2), rBaseDim[1] + baseIncrement + rBaseDim[1] /2, rBaseDim[2] /2);
            glRotatef(rBaseArmRotateAngle, 0, 1, 0);
            /*
                    glPushMatrix();
    */
            drawRobotBaseArm();
            /*
                    glPopMatrix();
    */
            glPushMatrix();
                glRotatef(90, 1, 0, 0);
                glEnable(GL_TEXTURE_2D);
                glBindTexture(GL_TEXTURE_2D, rCamouflage[0]);
                gluQuadricTexture(obj, GL_TRUE);
                gluQuadricDrawStyle(obj, GLU_FILL);
                gluDisk(obj, 0, (rBaseDim[0] /2) - 0.5, 16, 4);
                gluCylinder(obj, (rBaseDim[0] /2) - 0.5, (rBaseDim[0] /2) - 0.5, rBaseDim[1] /2, 16, 4);
                glDisable(GL_TEXTURE_2D);
            glPopMatrix();                      
        glPopMatrix();
    }


void drawScene(){
    glTranslatef(X, Y, Z);
    drawObj0();
    drawObj1();
}

Avec le code ci-dessus, puisqu'il y a une traduction à l'intérieur de drawRobotBaseArm(); à la fois la Disket la Cylinder sont également traduits. Depuis je n'en veux pas, j'ai dé-commenter le code en haut et en bas de drawRobotBaseArm();

Ce faisant, le code suivant:

glTranslatef(rBaseInitPos + (rBaseDim[0] /2), rBaseDim[1] + baseIncrement + rBaseDim[1] /2, rBaseDim[2] /2);
glRotatef(rBaseArmRotateAngle, 0, 1, 0);

N'agit que sur drawRobotBaseArm(); et maintenant, le Disket la Cylinder ne sont pas traduits et mis en rotation.

Je n'arrive pas à comprendre comment glPushMatrix() et glPopMatrix() travail. Une idée de comment puis-je obtenir ce que je cherche?

OriginalL'auteur Favolas | 2014-05-31