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();
}
如果我不使用glPushMatrix
(glPopMatrix
下),则不会绘制底部的黄色框。据我所知,glPopMatrix()加载最后保存的glPushMatrix(),但我想知道为什么需要两次调用glPushMatrix
。
答案 0 :(得分:1)
为什么需要两次致电
glPushMatrix
。
因为它会两次调用glPopMatrix
。每推一次都应该有一个流行音乐。那是how a stack works。
glPopMatrix
不仅仅是"加载最后保存的glPushMatrix()&#34 ;;它会弹出一堆矩阵。从堆栈中弹出元素时,它将从堆栈中删除。所以glPopMatrix
"加载"的矩阵堆栈中不再存在。因此,如果你想保留它,你必须把它推回堆栈。