glLoadIdentity和glPushMatrix / glPopMatrix,为什么不只使用前者呢?

时间:2012-07-28 01:49:52

标签: opengl graphics

将变换应用于对象时,我们使用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

2 个答案:

答案 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 上进行大量不必要的运算, 使您的代码更复杂,您的应用程序速度更慢。