Opengl的glPushMatrix和glPopMatrix理解

本文深入探讨了OpenGL中如何利用glPushMatrix和glPopMatrix确保变换独立性,避免上一次变换对本次变换的影响,实现精确的三维空间操作。文章阐述了OpenGL建模的两步法,即在世界坐标系原点绘制物体后再通过modelview变换移动到目标位置,并解释了矩阵栈的使用原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响,将本次需要执行的缩放、平移等操作放在两者之间。使本次变换是以世界坐标系的原点为参考点进行。

1)OpenGL中的modelview矩阵变换是一个马尔科夫过程:上一次的变换结果对本次变换有影响,上次modelview变换后物体在世界坐标系下的位置是本次modelview变换的起点。默认时本次变换和上次变换不独立。

2)OpenGL物体建模实际上是分两步走的。第一步,在世界坐标系的原点位置绘制出该物体;第二步,通过modelview变换矩阵对世界坐标系原点处的物体进行仿射变换,将该物体移动到世界坐标系的目标位置处。

3)将modelview变换放在glPushMatrix和glPopMatrix之间可以使本次变换和上次变换独立。

4)凡是使用glPushMatrix()和glPopMatrix()的程序一般可以判定是采用世界坐标系建模。既世界坐标系固定,modelview矩阵移动物体。

 

     Opengl中对于矩阵的操作都是对于矩阵栈的栈顶来操作的。当前矩阵即为矩阵栈的栈顶元素,而对当前矩阵进行平移、旋转等的变换操作也同样是对栈顶矩阵的修改。所以我们在变换之前调用glPushMatrix()的话,就会把当前状态压入第二层,不过此时栈顶的矩阵也与第二层的相同。当经过一系列的变换后,栈顶矩阵被修改,此时调用glPopMatrix()时,栈顶矩阵被弹出,且又会恢复为原来的状态。如下图所示

从第一个图状态1到第二个图状态2调用了glPushMatrix()方法,此时矩阵栈的第一个和第二个的状态是一样的,但是平移、旋转等方法都是对栈顶元素操作的,在经过平移,旋转之后栈顶的状态1变为状态2,此时对状态2再进行某些绘制,在调用glPopMatrix()弹栈,就相当于在状态1的情况下绘制了。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值