5

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

2 回答 2

8

因为你不能这样做:

glPushMatrix()
..apply tranformations
glPushMatrix()
..apply ADDITIONAL transformations
..draw object with combined transforms
glPopMatrix()
...draw object without the additional transforms.
glPopMatrix()
于 2012-07-28T01:55:36.740 回答
0

我找到了一个很好的解释:https ://www.allegro.cc/forums/thread/595000

它们没有相同的效果。

glLoadIdentity 用单位矩阵替换当前矩阵。

glPushMatrix 将当前矩阵推入堆栈。然后,您可以使用 glPopMatrix 将顶部矩阵从堆栈中拉出并使其成为当前矩阵。

只有在以下情况下才相同

  • 您的相机始终固定在 (0, 0, 0) 沿 z 方向看

  • 你所有的模型都是单一的、刚性的形状

  • 您首先使用身份加载了矩阵堆栈

或者,如果您自己在 CPU 上进行大量不必要的算术运算,从而使您的代码更加复杂,并且您的应用程序速度降低。

于 2021-04-01T20:23:35.060 回答