阅读量:6
OpenGL中的glPushMatrix()和glPopMatrix()函数用于操作矩阵栈顶的矩阵。
- glPushMatrix()函数将当前矩阵(模型视图矩阵或投影矩阵)压入矩阵栈的栈顶。
当前矩阵是指通过glMatrixMode()函数设置的当前矩阵模式(GL_MODELVIEW或GL_PROJECTION)下的矩阵。
压入栈顶后,当前矩阵被复制到新的栈顶位置。
- glPopMatrix()函数将矩阵栈顶的矩阵弹出,同时将弹出的矩阵设置为当前矩阵。
弹出后,矩阵栈顶的下一个矩阵成为新的栈顶,并成为当前矩阵。
如果弹出后矩阵栈为空,则当前矩阵被设置为单位矩阵。
这两个函数通常是一起使用的,用于保存和恢复矩阵状态,例如在进行多个变换操作后,恢复到最初的状态。
示例代码:
// 在OpenGL渲染循环的开始部分,保存初始状态 glMatrixMode(GL_MODELVIEW); // 设置当前矩阵模式为模型视图矩阵 glPushMatrix(); // 保存当前模型视图矩阵 // 执行变换操作 glLoadIdentity(); // 将当前模型视图矩阵设置为单位矩阵 glTranslatef(0.0f, 0.0f, -5.0f); // 平移变换 // 绘制物体 // ... // 恢复初始状态 glPopMatrix(); // 恢复之前保存的模型视图矩阵
这样,在每次渲染循环中,通过glPushMatrix()和glPopMatrix()函数,可以保证每次绘制物体时都使用初始状态的矩阵,并在变换操作完成后恢复到初始状态。