一涂臣、使用矩陣堆棧
//類型
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
//在堆棧頂部載入一個(gè)單元矩陣
void GLMatrixStack::LoadIdentity(void);
//在堆棧頂部載?任何矩陣 (參數(shù):4*4矩陣)
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
//矩陣 乘以 矩陣堆棧頂部矩陣截碴,相乘結(jié)果存儲(chǔ)到 堆棧的頂部
void GLMatrixStack::MultMatrix(const M3DMatrix44f);
//獲取矩陣堆棧頂部的值 GetMatrix 函數(shù) 。
//為了適應(yīng)GLShaderMananger的使用,或者獲取頂部矩陣的副本
const M3DMatrix44f & GLMatrixStack::GetMatrix(void);
void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);
二、壓棧-出棧
- 壓棧: 存儲(chǔ)一個(gè)狀態(tài)
- 出棧: 恢復(fù)一個(gè)狀態(tài)
//將當(dāng)前矩陣壓入堆棧
void GLMatrixStack::PushMatrix(void);
//將M3DMatrix44f 矩陣對(duì)象壓?當(dāng)前矩陣堆棧
void PushMatrix(const M3DMatrix44f mMatrix);
//將GLFame 對(duì)象壓入矩陣對(duì)象
void PushMatrix(GLFame &frame);
//出棧(出棧指的是移除頂部的矩陣對(duì)象)
void GLMatrixStack::PopMatrix(void);
三、仿射變換
// 旋轉(zhuǎn) angle參數(shù)是度數(shù)锣咒,不是弧度
void MatrixStack::Rotate(GLfloat angle,GLfloat x,GLfloat y,GLfloat z);
// 移動(dòng)
void MatrixStack::Translate(GLfloat x,GLfloat y,GLfloat z);
// 縮放
void MatrixStack::Scale(GLfloat x,GLfloat y,GLfloat z);
四、矩陣分析
- 一個(gè)4*4矩陣是如何在3D空間中表示一個(gè)位置和?向的
- 列向量進(jìn)行了特別的標(biāo)注:矩陣的最后?行都為0赞弥,只有最后一個(gè)元素為1
五毅整、GLFrame
// 將堆棧的頂部壓?任何矩陣
void GLMatrixStack::LoadMatrix(GLFrame &frame);
// 矩陣 乘以 矩陣堆棧頂部的矩陣。相乘結(jié)果存儲(chǔ)在 堆棧的頂部
void GLMatrixStack::MultMatrix(GLFrame &frame);
// 將當(dāng)前的矩陣壓棧
void GLMatrixStack::PushMatrix(GLFrame &frame);
// GLFrame函數(shù)绽左,這個(gè)函數(shù)用來(lái)檢索條件適合的照相矩陣
void GetCameraMatrix(M3DMatrix44f m,bool bRotationOnly = flase);