我们知道OPenGL 中的图形变化是用矩阵来记录保存的.OpenGL 矩阵基础变化
简单来讲,当你做了一些移动或旋转等变换后,使用PushMatrix(),OpenGL 会把这个变换后的位置和角度的矩阵,保存起来。然后你再随便做第二次移动或旋转变换,再调用PopMatrix(),将堆栈栈顶的状态矩阵弹出,OpenGL 就把刚刚保存的那个位置和角度进行恢复。那么后面进行的操作均是基于恢复之后的这个位置和角度进行变换的。这样就有一个非常大的好处,就是当你后面绘制的对象与之前的对象相关联时,相当于可以抛弃掉现在的状态,而回到之前的状态,减少变换的计算复杂度。
举个例子:
假设在场景中,绘制了一个汽车。在绘制汽车的时候需要同时绘制四个轮子。假如现在画笔位于车身的中心,那么绘制的基本过程就是:
1.记住车身中心的位置;
2.将画笔移动到左前轮的位置并绘制轮子;
3.回到车身的中心;
4.将画笔移动到右前轮的位置并绘制轮子;
... ...
PushMatrix其实就相当于“记住车身中心的位置”;
PopMatrix其实就相当于“回到车身的中心”;
-
流程图如下: