美文网首页
OpenGL 矩阵堆栈与角色帧

OpenGL 矩阵堆栈与角色帧

作者: Joker_King | 来源:发表于2020-07-18 20:19 被阅读0次

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

矩阵堆栈是由GLMatrixStack类创建的,其特性是先进后出,根据矩阵类的源码可知,矩阵堆栈中最大只能放64个状态,对应的API参见下表


image

矩阵对阵中除了可以放M3DMatrix44f矩阵外,还可以放GLFRame,其实就是比矩阵多做了一步,需要通过GLFRame的get方法方法获得矩阵,放入堆栈中。

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

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

需要注意:
==> 用了几个push,就需要pop几个矩阵,push与pop是一一对相应的
==> 最终的矩阵堆栈仍然是最初时的矩阵堆栈

image

角色帧

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

  • 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 矩阵堆栈与角色帧

    程序全局只有一个矩阵堆栈,但是需要绘制的图形有多种 即 变化有很多种--每个图形所需的变换矩阵不同,如果想两个图形...

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

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

  • OpenGL矩阵堆栈

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

  • OpenGL 矩阵堆栈

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

  • 五:OpenGL矩阵与堆栈

    前言: 本节课为大家介绍非常重要,也是非常难以理解的“矩阵”属性,也许前期的新手小白可能(当然也包括我自己呀)理解...

  • OpenGL矩阵堆栈处理

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

  • OpenGL 基础变化与矩阵堆栈

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

  • OpenGL 基础变化与矩阵堆栈

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

  • OpenGL笔记六:纹理常用API(一)

    前言 期待您移步上篇:OpenGL笔记五:综合实例理解-压栈、出栈、堆栈矩阵相乘、矩阵相乘、向量相乘 纹理 纹理只...

  • OpenGL 基础变化

    顶点变换管线image.png GLMatrixStack 矩阵堆栈 GLFrame -参考帧 其中存储了1个世...

网友评论

      本文标题:OpenGL 矩阵堆栈与角色帧

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