?????我們在使用矩陣對所渲染的視圖做圖形變換時(如平移,旋轉(zhuǎn),縮放),需要對矩陣進(jìn)行點乘或叉乘計算,我們計算后的結(jié)果往往使用GLMatrixStack來存儲,它具體是個什么東西呢?我們一起學(xué)習(xí)下.
? ? ? ?首先初始化一個矩陣堆棧
? ??????GLMatrixStack::GLMatrixStack(int iStackDepth = 64)
? ? ? ? ?通過看他具體實現(xiàn)我們可以看到,它會創(chuàng)建一個棧結(jié)構(gòu)的存儲控件,iStackDepth表示該棧空間的深度為64,就是說我們可以對它進(jìn)行64次的push操作,同時會在棧頂添加一個單元矩陣.
? ??????在堆棧頂部載?一個單元矩陣? ??
????????void GLMatrixStack::LoadIdentity(void) 在堆棧頂部創(chuàng)建一個 單位矩陣
????? ??在堆棧頂部載入任何矩陣?//參數(shù):4*4矩陣
? ? ? void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);????
? ????? 矩陣乘以矩陣堆棧頂部矩陣逊彭,相乘結(jié)果存儲到堆棧的頂部
????????void GLMatrixStack::MultMatrix(const M3DMatrix44f);
????? ??獲取矩陣堆棧頂部的值?GetMatrix?函數(shù)?
? ????? ? const M3DMatrix44f & GLMatrixStack::GetMatrix(void);
????? ? ? void GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix);
?????壓棧.出棧
? ? 就是將當(dāng)前矩陣堆棧的頂部矩陣copy一份 加到矩陣堆棧的頂部
? ? ?void GLMatrixStack::PushMatrix(void);
????將M3DMatrix44f?矩陣對象壓入當(dāng)前矩陣堆棧
????void PushMatrix(const M3DMatrix44f mMatrix);
????將GLFame?對象壓?入矩陣對象
????void PushMatrix(GLFame &frame);
出棧(出棧指的是移除頂部的矩陣對象)?void GLMatrixStack::PopMatrix(void);
具體我們可以總結(jié)為下圖