美文网首页
OpenGL 基础变化与矩阵堆栈

OpenGL 基础变化与矩阵堆栈

作者: Gumball_a45f | 来源:发表于2020-07-27 23:22 被阅读0次
    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是一一对相应的
    • 最终的矩阵堆栈仍然是最初时的矩阵堆栈

    相关文章

      网友评论

          本文标题:OpenGL 基础变化与矩阵堆栈

          本文链接:https://www.haomeiwen.com/subject/wxqxrktx.html