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