美文网首页
OpenGL-矩阵压栈出栈浅析

OpenGL-矩阵压栈出栈浅析

作者: Tobesky | 来源:发表于2019-05-20 00:27 被阅读0次

    OpenGL绘制图形需要经过变化才能达到用户目的,而变换是通过矩阵进行操作的

    OpenGL一般通过视图变换、模型变换、投影变换等变换后会呈现新的状态(状态机)

    而当我们在经过一系列变换后再想回到原来的状态就需要依赖OpenGL提供给我们的两个函数来实现

    • 矩阵压栈 glPushMatrix()
    • 矩阵出栈 glPopMatrix()

    首先要明确一点,就是对于矩阵的操作都是针对矩阵的栈顶来操作的

    当前矩阵即为矩阵栈的栈顶元素

    对当前矩阵进行平移、旋转等的变换操作也就是对栈顶矩阵的修改

    当经过一系列的变换后,栈顶矩阵被修改,此时调用glPopMatrix()时,栈顶矩阵被弹出,且又会恢复为原来的状态。

    函数的作用

    OpenGL对于多种矩阵变换操作,控制这些操作的命令主要用到glMatrixMode(GLenum mode);,它的作用是指定用哪个矩阵作为当前矩阵,mode用于指定哪一种矩阵栈是其后矩阵操作的目标

    mode的可选值

    • GL_MODELVIEW: 把其后的矩阵操作施加于造型视图矩阵栈。(默认)
    • GL_PROJECTION: 把其后的矩阵操作施加于投影矩阵栈。
    • GL_TEXTURE: 把其后的矩阵操作施加于纹理矩阵栈。

    这三种模式分别对应了三种矩阵栈

    在场景中存在多种矩阵变换时,glPushMatrix()glPopMatrix()通常要结合glMatrixMode(GLenum mode)运用,系统才知道具体操作的是哪个矩阵栈。

    • modelview矩阵里只能保存平移,旋转和缩放
    • project矩阵里只能保存投影矩阵
    • viewport矩阵里只能保存二维平移和缩放。

    相关文章

      网友评论

          本文标题:OpenGL-矩阵压栈出栈浅析

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