一、使用矩阵堆栈
//类型
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
//在堆栈顶部载入一个单元矩阵
void GLMatrixStack::LoadIdentity(void);
//在堆栈顶部载⼊任何矩阵 (参数:4*4矩阵)
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
//矩阵 乘以 矩阵堆栈顶部矩阵,相乘结果存储到 堆栈的顶部
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
//获取矩阵堆栈顶部的值 GetMatrix 函数 。
//为了适应GLShaderMananger的使用,或者获取顶部矩阵的副本
const M3DMatrix44f & GLMatrixStack::GetMatrix(void);
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);
二、压栈-出栈
- 压栈: 存储一个状态
- 出栈: 恢复一个状态
//将当前矩阵压入堆栈
void GLMatrixStack::PushMatrix(void);
//将M3DMatrix44f 矩阵对象压⼊当前矩阵堆栈
void PushMatrix(const M3DMatrix44f mMatrix);
//将GLFame 对象压入矩阵对象
void PushMatrix(GLFame &frame);
//出栈(出栈指的是移除顶部的矩阵对象)
void GLMatrixStack::PopMatrix(void);
三、仿射变换
// 旋转 angle参数是度数,不是弧度
void MatrixStack::Rotate(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);
// 移动
void MatrixStack::Translate(GLfloat x,GLfloat y,GLfloat z);
// 缩放
void MatrixStack::Scale(GLfloat x,GLfloat y,GLfloat z);
四、矩阵分析
- 一个4*4矩阵是如何在3D空间中表示一个位置和⽅向的
- 列向量进行了特别的标注:矩阵的最后⼀行都为0,只有最后一个元素为1
五、GLFrame
// 将堆栈的顶部压⼊任何矩阵
void GLMatrixStack::LoadMatrix(GLFrame &frame);
// 矩阵 乘以 矩阵堆栈顶部的矩阵。相乘结果存储在 堆栈的顶部
void GLMatrixStack::MultMatrix(GLFrame &frame);
// 将当前的矩阵压栈
void GLMatrixStack::PushMatrix(GLFrame &frame);
// GLFrame函数,这个函数用来检索条件适合的照相矩阵
void GetCameraMatrix(M3DMatrix44f m,bool bRotationOnly = flase);