OpenGL 基础变化与矩阵堆栈

2020-07-27  本文已影响0人  Gumball_a45f
OpenGL中涉及的基础变化:
视图变换
  • 视图变换是应用到场景中的第一种变换,通过物体/观察者在Z轴上的移动,确定场景中利于观察的位置
  • 默认情况下,透视投影中的观察者位置处于原点(0,0,0),并沿着z轴负方向看向屏幕里面,一般通过moveForward方法来调整观察者位置,moveForward默认的朝向是-z轴,所以向屏幕里面移动传正数值,向屏幕外即+z轴,需要传负数值
  • 引用《OpenGL 超级宝典 第5版》96页文字:从大局上考虑,在应用任何其他模型变换之前,必须先应用视图变换,这句话的意思就是我们后续的其他模型变换,其实都是基于视图变换后的新坐标进行的。
模型变换

模型变换其实就是物体通过平移、旋转、缩放的操作,将物体移动到你想要的位置的一个过程。

模型变换中,两个变换的顺序是不能交换的,交换后的矩阵相乘结果是不一致的,如下图:

主要还是因为矩阵相乘采用的是矩阵的叉乘,而矩阵叉乘是不满足交换律的。

另外,在模型变换过程中,有两种观察方式,

  1. 移动观察者 即 观察者动,物体不动
  2. 移动坐标系 即 观察者不动,物体动
3种模型变换相对应的OpenGL方法

矩阵堆栈

矩阵堆栈中关于入栈、相乘、出栈的流程:

  1. 原始矩阵堆栈中,拷贝一份栈顶矩阵,压入栈顶
  2. 当有变换操作时,将变换操作的矩阵与矩阵堆栈栈顶相乘,将其结果覆盖栈顶矩阵
  3. 如果还有其他矩阵入栈,则继续相乘
  4. 当没有矩阵需要push,即图形绘制完成后,需要pop栈顶矩阵

需要注意:

  • 用了几个push,就需要pop几个矩阵,push与pop是一一对相应的
  • 最终的矩阵堆栈仍然是最初时的矩阵堆栈
上一篇下一篇

猜你喜欢

热点阅读