一. 向量与矩阵
- 矩阵 Matrix 数学上,一个 m * n 的矩阵是一个由 m 行(row)n列(column)元素排列成的矩形阵列。矩阵里的元素可以是数字、符号或数学式。 一个从左上角到右下角的连线上的元素都为 1 的方阵(行和列大小一样)称之为单位矩阵。 大小相同(行数列数都相同)的矩阵之间可以相互加减,具体是对每个位置上的元素做加减法。矩阵的乘法则较为复杂。

- 向量 Vector 在计算机几何当中我们可以把向量理解为一个 m * 1 的矩阵。m 为任意正整数。

二. 压栈/出栈
2.1 矩阵堆栈的使用
在 OpenGL 里面矩阵堆栈的类型为 GLMatrixStack, 这个堆栈里面最多存储 64 的矩阵,也就是说他的深度 stackDepth = 64,GLMatrixStack 在创建的时候默认会给里面添加一个 4x4 的单元矩阵。初始化过后 GLMatrixStack 里面的元素个数为 1
- 在堆栈顶部载入一个单元矩阵
GLMatrixStack::LoadIdentity(void) - 在堆栈顶部载入一个任意矩阵
GLMatrixStack::LoadMatrix(const M3DMatrix44f m) - 矩阵乘以矩阵堆栈顶部的矩阵,相乘的结果存储到堆栈的顶部,这时候会覆盖原来矩阵的值
GLMatrixStack::multMatrix(M3DMatrix44f m) - 获取矩阵堆栈顶部的值
GLMatrixStack::GetMatrix(M3DMatrix44f mMatrix)
2.2 压栈
-
将当前矩阵压入堆栈(把原栈顶矩阵 copy 一份存在栈顶
GLMatrixStack::PushMatrix(void)比如原来的对面里面有[m1, m2, m3]总共3个矩阵,调用PushMatrix()以后就会变为[m1, m2, m3, m3]。 -
将
M3DMatrix44f矩阵对象压入当前矩阵堆栈,存在栈顶位置。GLMatrixStack::PushMatrix(const M3DMatrix44f mMatrix)比如原来的对面里面有[m1, m2, m3]总共3个矩阵,调用PushMatrix(m4)以后就会变为[m1, m2, m3, m4]。 -
将
GLFrame对象压入矩阵堆栈PushMatrix(GLFrame &frame),这个方法会在内部调用PushMatrix(const M3DMatrix44f mMatrix)
2.3 出栈
移除栈顶的矩阵对象,无需传参 GLMatrixStack::PopMatrix(void)
