矩陣堆棧的使用
//類型
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);
壓棧、出棧
//將當前矩陣壓入堆棧(棧頂矩陣copy 一份到棧頂)
void GLMatrixStack::PushMatrix(void);
//將M3DMatrix44f 矩陣對象壓入當前矩陣堆棧
void PushMatrix(const M3DMatrix44f mMatrix);
//將GLFame 對象壓入矩陣對象
void PushMatrix(GLFame &frame);
//出棧(出棧指的是移除頂部的矩陣對象)
void GLMatrixStack::PopMatrix(void);
根據上述API的說明,可以根據一張圖,清楚地查看堆棧信息的變化
矩陣入棧、相乘、出棧流程
- 當使用
PushMatrix
方法,會將棧頂信息復制一份,放入棧頂。
2.使用MultMatrix
方法做矩陣相乘時,將該矩陣與棧頂矩陣相乘,覆蓋
棧頂矩陣。
3.使用PopMatrix
做出棧操作時,移除棧頂矩陣對象。(根據棧的特點,只能pop棧頂)
4.使用LoadMatrix
加載矩陣到棧頂,若沒有傳參數矩陣,默認將單元矩陣壓入棧頂