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を使用して現在のマトリックスにすることができます。

これらは次の場合にのみ同じです

  • カメラは常にzに沿って(0、0、0)に固定されています

  • すべてのモデルは単一の剛体形状です

  • そもそもIDをマトリックススタックにロードしました

または、CPUで不要な演算を大量に実行している場合は、コードがより複雑になり、アプリケーションの速度が低下します。

于 2021-04-01T20:23:35.060 に答える