美文网首页
OpenGL -- 变化和矩阵堆栈

OpenGL -- 变化和矩阵堆栈

作者: 木扬音 | 来源:发表于2021-09-12 21:44 被阅读0次
image.png

视图变换

  • 应用到场景中的第一种变换,用来确定场景中的有利位置,在默认情况下,透视投影中位于原点(0,0,0),并沿着 Z 轴负方向进行观察
  • 试图变换将观察者放在你希望的任何位置,并允许在任何方向上观察场景,确定视图变换就像在场景中放置观察者并让它指向某一位置
  • 通过moveForward调整观察者位置
  • 从大局上考虑,在应用任何其他模型变换之前,必须先应用视图变换,视图变换移动了当前工作的坐标系,后续的变化都会基于新坐标系进行

模型变换

用于操纵模型与其中某特定变换,通过旋转、缩放、平移将对象移动到指定位置

  • 模型变换中,两个变换的顺序是不能交换的,交换后的矩阵相乘结果不一样
image.png

投影

  • 正投影 void SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)
  • 透视投影 void SetPerspective(float fFov, float fAspect, float fNear, float fFar)

矩阵堆栈

程序全局只有一个矩阵堆栈,但是需要绘制的图形有多种 即 变化有很多种--每个图形所需的变换矩阵不同,如果想两个图形的操作互不影响,需要一个矩阵状态去保存空白的状态

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

仿射变换

矩阵堆栈中有与平移、旋转、缩放三个模型变换相对应的放射变换,可以不用通过模型变换,而是直接通过矩阵堆栈的API实现这3种变换,如下表所示 image.png

角色帧

主要是用来表示物体及观察者所处的位置,主要有三个参数

//  vOrigin:当前所处的位置,默认是(0,0,0),处于原点
// vForward:即将要去的位置,默认是(0,0,-1),朝向-z轴方向
//  vUp:朝向哪,默认是(0,1,0),朝向+y轴方向
class GLFrame
    {
    protected:
        M3DVector3f vOrigin;    // Where am I?
        M3DVector3f vForward;   // Where am I going?
        M3DVector3f vUp;        // Which way is up?

除了矩阵,GLFrame对象也可以直接压入矩阵堆栈,主要涉及以下3个方法

  • 加载到堆栈栈顶 void GLMatrixStack::LoadMatrix(GLFrame &frame);
  • 与堆栈栈顶相乘,将结果覆盖栈顶矩阵 void GLMatrixStack::MultMatrix(GLFrame &frame);
  • 堆栈栈顶出栈 void GLMatrixStack::PushMatrix(GLFrame &frame);

相关文章

  • OpenGL -- 变化和矩阵堆栈

    视图变换 应用到场景中的第一种变换,用来确定场景中的有利位置,在默认情况下,透视投影中位于原点(0,0,0),并沿...

  • OpenGL学习之路(5.3) 矩阵堆栈的了解和使用方法

    什么是矩阵堆栈? OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。一般说来,矩阵堆栈常用于...

  • OpenGL 基础变化与矩阵堆栈

    OpenGL中涉及的基础变化: 视图变换 视图变换是应用到场景中的第一种变换,通过物体/观察者在Z轴上的移动,确定...

  • OpenGL 基础变化与矩阵堆栈

    基础变化 OpenGL中涉及的基础变化主要有以下5种 变换说明视图变换指定观察者位置模型变换在场景中移动物体模型视...

  • 矩阵堆栈

    矩阵堆栈的作用? 矩阵堆栈只是保存变化的状态。 GLMatrixStack::GLMatrixStack(int ...

  • OpenGL矩阵堆栈处理

    为什么要使用矩阵堆栈? OpenGL在进行渲染的时候是通过模型视图矩阵和投影矩阵运算得到最终显示的坐标。 模型矩阵...

  • OpenGL矩阵堆栈

    OpenGL的矩阵堆栈指的就是内存中专门用来存放矩阵数据的某块特殊区域。一般说来,矩阵堆栈常用于构造具有继承性的模...

  • OpenGL 矩阵堆栈

    矩阵堆栈的使用 压栈、出栈 根据上述API的说明,可以根据一张图,清楚地查看堆栈信息的变化 当使用PushMatr...

  • 矩阵堆栈操作

    顶点变化管线图中,我们需要对模型视图矩阵和投影矩阵进行设置或者变换。 矩阵堆栈 本质还是堆栈,只是存储着矩阵。#i...

  • 九、OpenGL 基础变化与矩阵堆栈

    基础变化 OpenGL中涉及的基础变化主要有以下5种 变换说明视图变换指定观察者位置模型变换在场景中移动物体模型视...

网友评论

      本文标题:OpenGL -- 变化和矩阵堆栈

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