8. OpenGL中如何使用矩阵堆栈

2019-10-25  本文已影响0人  吃土豆的Panda

     我们在使用矩阵对所渲染的视图做图形变换时(如平移,旋转,缩放),需要对矩阵进行点乘或叉乘计算,我们计算后的结果往往使用GLMatrixStack来存储,它具体是个什么东西呢?我们一起学习下.

       首先初始化一个矩阵堆栈

        GLMatrixStack::GLMatrixStack(int iStackDepth = 64)

         通过看他具体实现我们可以看到,它会创建一个栈结构的存储控件,iStackDepth表示该栈空间的深度为64,就是说我们可以对它进行64次的push操作,同时会在栈顶添加一个单元矩阵.

        在堆栈顶部载⼊一个单元矩阵    

        void GLMatrixStack::LoadIdentity(void) 在堆栈顶部创建一个 单位矩阵

        在堆栈顶部载入任何矩阵 //参数:4*4矩阵

      void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);    

        矩阵乘以矩阵堆栈顶部矩阵,相乘结果存储到堆栈的顶部

        void GLMatrixStack::MultMatrix(const M3DMatrix44f);

        获取矩阵堆栈顶部的值 GetMatrix 函数 

          const M3DMatrix44f & GLMatrixStack::GetMatrix(void);

          void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);

     压栈.出栈

    就是将当前矩阵堆栈的顶部矩阵copy一份 加到矩阵堆栈的顶部

     void GLMatrixStack::PushMatrix(void);

    将M3DMatrix44f 矩阵对象压入当前矩阵堆栈

    void PushMatrix(const M3DMatrix44f mMatrix);

    将GLFame 对象压⼊入矩阵对象

    void PushMatrix(GLFame &frame);

出栈(出栈指的是移除顶部的矩阵对象) void GLMatrixStack::PopMatrix(void);

具体我们可以总结为下图

上一篇 下一篇

猜你喜欢

热点阅读