OpenGL的變換運算均使用4×4矩陣進行.OpenGL使用堆棧保存矩陣.各種變換運算均針對棧頂進行操作.
矩陣 | 簡介 |
void glMatrixMode (GLenum mode); | 設定當前矩陣堆棧 |
GL_MODELVIEW | 模型視圖矩陣 |
GL_PROJECTION | 投影矩陣 |
GL_COLOR | 顏色矩陣 |
GL_TEXTURE | 紋理矩陣 |
示例
- glMatrixMode(GL_MODELVIEW); 設定當前矩陣為模型視圖矩陣
- glLoadIdentity();載入單位矩陣,並且朝向負Z軸
- 進行其它變換
矩陣堆棧 | 簡介 |
void glPushMatrix(void); | 複製當前矩陣(棧頂)並壓棧. |
void glPopMatrix(void); | 當前矩陣堆棧出棧並丟棄. |
將當前坐標系統切換為新坐標系統,渲染完成後恢復原始坐標系統.示例:
- glMatrixMode(GL_MODELVIEW);設定模型視圖矩陣
- glPushMatrix();複製當前矩陣並壓棧.
- glLoadIdentity();載入單位矩陣
- glTranslatef(x,y,x);移動坐標系
- glPopMatrix();出棧,恢復源始坐標系統
不同矩陣堆棧有不同的深度,可通過glGetIntegerv()獲取
參數 | 深度 | 簡介 |
GL_MAX_MODELVIEW_STACK_DEPTH | 32 | 模型視圖矩陣堆棧的深度 |
GL_MAX_PROJECTION_STACK_DEPTH | 10 | 投影矩陣堆棧的深度 |
GL_MAX_TEXTURE_STACK_DEPTH | 10 | 紋理矩陣堆棧的深度 |
GL_MAX_ATTRIB_STACK_DEPTH | 16 | 屬性矩陣堆棧的深度 |
獲取模型視圖矩陣深度示例:
- GLint params[1];
- glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH,params);