将变换应用于对象时,我们使用glPushMatrix / glPopMatrix。但是为什么我们不使用glLoadIdentity呢?
因此
glPushMatrix()
..apply tranformations
...draw object
glPopMatrix()
glPushMatrix()
..apply tranformations
...draw object
glPopMatrix()
这应该是怎么做的?
可以成为
glLoadIdentity()
..apply tranformations
...draw object
glLoadIdentity()
..apply tranformations
...draw object
答案 0 :(得分:8)
因为你无法做到这一点:
glPushMatrix()
..apply tranformations
glPushMatrix()
..apply ADDITIONAL transformations
..draw object with combined transforms
glPopMatrix()
...draw object without the additional transforms.
glPopMatrix()
答案 1 :(得分:0)
我找到了一个很好的解释:https://www.allegro.cc/forums/thread/595000
<块引用>它们的效果不同。
glLoadIdentity 用单位矩阵替换当前矩阵。
glPushMatrix 将当前矩阵压入堆栈。然后你可以拉 堆栈顶部的矩阵,稍后使用 glPopMatrix。
只有在:
你的相机总是固定在 (0, 0, 0) 沿 z 方向看
你所有的模型都是单一的、刚性的形状
您首先使用标识加载了矩阵堆栈
或者,如果您自己在 CPU 上进行大量不必要的运算, 使您的代码更复杂,您的应用程序速度更慢。