初学时,我们通常会对矩阵压栈和出栈这对“难兄难弟”感到疑惑,为什么它们是成对出现的?它们做的又是什么操作呢?那,今天我们就来看一看。
我们先来看看它的代码是怎么实现的,原理又是什么?
-
矩阵压栈
矩阵压栈的两种方式
方式一:
void PushMatrix(void)
将当前矩阵压入堆栈(栈顶矩阵copy⼀份到栈顶),我们通过一张图来了解一下
原理:
void PushMatrix(void) {
if(stackPointer < stackDepth) {
stackPointer++;
m3dCopyMatrix44(pStack[stackPointer], pStack[stackPointer-1]);
}
else
lastError = GLT_STACK_OVERFLOW;
}
方式二:
```void PushMatrix(GLFrame& frame)``
将矩阵对象压入当前矩阵堆栈,我们也通过一张图来了解一下
原理:
void PushMatrix(GLFrame& frame) {
M3DMatrix44f m;
frame.GetMatrix(m);
PushMatrix(m);
}
-
矩阵出栈
void PopMatrix(void)
绘制完成之后,移除矩阵堆栈中顶部的矩阵移除
以上就是关于OpenGL的矩阵压栈与出栈啦,希望能帮到大家理解。
网友评论