推送和弹出矩阵

时间:2017-04-13 14:23:03

标签: opengl

void display(void){
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT);

    glColor3f(1.0, 0.0, 0.0);
    draw_square();
    glPushMatrix();

    glColor3f(0.0, 1.0, 0.0);
    glTranslatef(-0.6, 0.6, 0.0);
    draw_square();

    glPopMatrix();
    //glPushMatrix();

    glColor3f(0.0, 0.0, 1.0);
    glTranslatef(0.6, 0.6, 0.0);
    glRotatef(45, 0.0, 0.0, 1.0);
    draw_square();

    glColor3f(1.0, 0.0, 1.0);
    glScalef(1.2, 1.2, 1.0);
    glTranslatef(-0.7, -0.7, 0.0);
    draw_square();

    glPopMatrix();

    glColor3f(1.0, 1.0, 0.0); //draw yellow box
    glTranslatef(-0.6, -0.6, 0.0);
    glScalef(1.2, 1.2, 1.0);
    draw_square();

    glFlush();
}

如果我不使用glPushMatrixglPopMatrix下),则不会绘制底部的黄色框。据我所知,glPopMatrix()加载最后保存的glPushMatrix(),但我想知道为什么需要两次调用glPushMatrix

1 个答案:

答案 0 :(得分:1)

  

为什么需要两次致电glPushMatrix

因为它会两次调用glPopMatrix。每推一次都应该有一个流行音乐。那是how a stack works

glPopMatrix不仅仅是"加载最后保存的glPushMatrix()&#34 ;;它会弹出一堆矩阵。从堆栈中弹出元素时,它将从堆栈中删除。所以glPopMatrix"加载"的矩阵堆栈中不再存在。因此,如果你想保留它,你必须把它推回堆栈。