我们在使用矩阵对所渲染的视图做图形变换时(如平移,旋转,缩放),需要对矩阵进行点乘或叉乘计算,我们计算后的结果往往使用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);
具体我们可以总结为下图