通过使用glLoadIdentity()函数可以设定变换的当前矩阵为Identity矩阵。然而在有些变换时,需要前面变换的举证进行保存,以便多次使用之前变换的结果,此时就要用到Matrix Stacks(就是一个用来存储矩阵的堆栈)
在OpenGL中提供了两个压栈和出栈的操作,分别是glPushMatrix()和glPopMatrix(),对于这两个函数的使用方法,此处小举一例,保证大家看后甚是明了:
例子:
1.理论解释:
当你做了一些移动或旋转等变换后,使用glPushMatrix();
OpenGL 会把这个变换后的位置和角度保存起来。
然后你再随便做第二次移动或旋转变换,再用glPopMatrix();
OpenGL 就把刚刚保存的那个位置和角度恢复。
glLoadIdentity(); glTranslatef(1,0,0);//向右移动(1,0,0) glPushMatrix();//保存当前位置 glTranslatef(0,1,0);//现在是(1,1,0)了 glPopMatrix();//这样,现在又回到(1,0,0)了
知道怎么用了吧?
在OpenGL Red book中,绘制了一个汽车。在绘制汽车的时候需要同时绘制四个轮子。假如现在画笔位于车身的中心,那么绘制的基本过程就是:
1.记住车身中心的位置;
2.将画笔移动到左前轮的位置并绘制轮子;
3.回到车身的中心;
4.将画笔移动到右前轮的位置并绘制轮子;
... ...
glPushMatrix其实就相当于“记住车身中心的位置”;
glPopMatrix其实就相当于“回到车身的中心”;