【openGL2021版】矩阵

                     【openGL2021版】矩阵

      大家好,我是Lampard猿奋~

      欢迎来到船新的openGL基础系列的博客,今天记录的是矩阵

(一)移动旋转缩放

(1)glLoadIdentity单位矩阵

      之前我们在每一帧绘画之前,都会执行一个glLoadIdentity()方法,这个方法是对矩阵进行一次重置,清空成单位矩阵。所以每一次绘制的时候,都能得到同样的画面

   (百度百科对glLoadIdentity的解释)

      如果不重置为单位矩阵的话,openGL就会在上一帧绘制的基础上进行一个线性运算,然后得出一个新的画面,执行出来的结果就会一闪一闪的

(2)glScalef缩放

      我们可以用glScalef来进行缩放,实际上它影响的是我们坐标,对我们的坐标进行一个系数的相乘

      缩放X轴为0.5倍

      如果x,y,z轴缩放同一个数,那么画面不会改变,因为Z代表的是远近的程度

      同时缩放0.5倍(没有变化)

(3)glRolatef旋转

      我们可以通过glRolatef来进行一个旋转,其有4个参数(角度,X,Y,Z),它的旋转角度,是根据Z轴的正负决定,如果Z轴是正则四肢握拳,大拇指朝屏幕外,食指的方向就是旋转方向。若Z轴为负数,则大拇指朝里

     正方向X轴旋转30度

(4)glTranslatef移动

      glTranslatef能够帮助我们对图像进行移动,其作用原理和旋转相同

      往右移动1个位置

(二)矩阵的压栈和出栈

(1)先移动再旋转,和先旋转再移动

      这两个操作顺序不同其实得到的结果是不一样的,原因在于,无论是旋转还是移动它们的实现逻辑都是矩阵运算,它们发生的改变都是相对于“自己”。比如一个人,向前走100米再转身,和先转身再走100米得到的结果是不一样的

      先移动再旋转

      先旋转再移动

(2)glPushMatrix&glpopMatrix压栈和出栈

      glPushMatrix()将当前矩阵压入栈中,当前矩阵不清零,其下的操作及显示在当前的矩阵的拷贝下继续进行,在使用glPopMatrix()后,当前的矩阵恢复到调用glPushMatrix()之前,在两者之间的各种变换不在起作用。

      因此如果使用这个方法,我们就不需要每一帧开始的时候glLoadIdentity,因为每次矩阵的状态不会被污染(下图为GIF格式)

最后总结一下,就是显卡会有一个栈存储矩阵的状态,每一次会对栈顶矩阵进行绘制。我们可以通过glPushMatrix&glpopMatrix,来拷贝矩阵的状态,以至于原来的矩阵不被污染。今天就写那么多~

点赞,关注!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值