美文网首页OpenGL
OpenGL矩阵堆栈处理

OpenGL矩阵堆栈处理

作者: 聪莞 | 来源:发表于2019-05-19 16:43 被阅读2次

为什么要使用矩阵堆栈?

OpenGL在进行渲染的时候是通过模型视图矩阵和投影矩阵运算得到最终显示的坐标。

模型矩阵: 将顶点从局部坐标系转换到世界坐标系中;
视图矩阵: 将顶点从世界坐标转化到视图坐标系下;
投影矩阵: 将顶点从视图坐标系转换到规范立方体中(即屏幕中);

模型视图投影矩阵 = 投影矩阵 * 模型视图矩阵 (注意这里不能写成 模型视图矩阵 * 投影矩阵,矩阵乘法不满足交换

为了保证每一次渲染的独立性,需要在每一次渲染前保存当前状态(PushMatrix),并在渲染结束后恢复这个状态(PopMatrix)。

使用方法

    
    //创建一个矩阵堆栈,初始化时会在创建时在栈顶加入一个单元矩阵 (FILO:先进后出)
    GLMatrixStack modelViewMatrix;
    
    //在栈顶载入一个单元矩阵
    modelViewMatrix.LoadIdentity();
    
    //在栈顶载入矩阵
    modelViewMatrix.LoadMatrix(<#const float *mMatrix#>)
    
    //将当期矩阵压入矩阵堆栈
    modelViewMatrix.PushMatrix(<#const float *mMatrix#>)
    modelViewMatrix.PushMatrix();   ps:复制当前栈顶的矩阵并保存在栈顶,这样pop后并不影响原来的矩阵堆栈
    modelViewMatrix.PushMatrix(<#GLFrame &frame#>)
    
    //出栈
    modelViewMatrix.PopMatrix();
    
    //获取矩阵栈顶的值
    modelViewMatrix.GetMatrix();
ps:一个矩阵(A)乘以栈顶矩阵(B)的结果C将覆盖掉B,继续放在栈顶

来看几个例子来理解一下:(3在栈顶)
假设当期矩阵堆栈modelViewMatrix为:

image.png

PushMatrix():

调用 modelViewMatrix.PushMatrix() 后变为:

image.png

比如这时候需要做一个矩阵运算,那么就会用复制的这个栈顶矩阵去做操作,开始矩阵运算,使用当前的栈顶矩阵进行运算:


image.png

结束后,调用pop,会把本次的结果3*A给pop出去,得到初始的矩阵:


image.png

PushMatrix(<#const float *mMatrix#>)

继续,在原来的基础上执行 modelViewMatrix.PushMatrix(4),得到结果:

image.png

同理,结束后,会将 矩阵4 pop出栈,矩阵得到还原。

所以:push跟pop一定要成对出现,要不然可能会发生不可预知的错误

图画的不行,差不多能表达出意思,不要太在意。。。

相关文章

  • OpenGL矩阵堆栈处理

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

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

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

  • OpenGL矩阵堆栈

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

  • OpenGL 矩阵堆栈

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

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

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

  • 五:OpenGL矩阵与堆栈

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

  • OpenGL之变换、矩阵堆栈

    OpenGL中的变换 变换解释视图变换指定观察者的位置模型变换在场景中移动物体模型视图描述视图/模型变换的二元性(...

  • OpenGL -- 变化和矩阵堆栈

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

  • 十、OpenGL中的向量、矩阵、矩阵堆栈

    1. 向量 1.1 向量相关概念 向量:在 3D 笛卡尔坐标系中,一个由 x、y、z组成的顶点就是一个向量 单位向...

  • OpenGL渲染流程和矩阵堆栈

      想要更深入的学习OpenGL,就要先了解OpenGL渲染架构图(如下图)。客户端和OpenGL渲染服务严格遵循...

网友评论

    本文标题:OpenGL矩阵堆栈处理

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