1

完全に明確にしたいだけです。私はまだOpenGLに不慣れで、ほとんど試行錯誤しながら学んでいます。

glRotatef(angle、x、y、z)を使用する場合

その点から描画したものは、指定された軸上で指定された量だけ回転しますか?

では、どうすればそのようなローテーションを元に戻すことができますか?

    glRotatef(45, 0, 0, 1);
    // draw object
    glRotatef(0, 0, 0, 0);

それはうまくいくでしょうか?

必要なものを明確にするために、ユーザーが画面上で指をドラッグすると、特定の角度で線が引かれ、その角度を取り、テクスチャのある正方形に適用します。

ただし、この正方形の前後に、回転させたくないオブジェクトをたくさん描いています。

これまでのところ、変換/回転/平行移動/テクスチャを適用すると、他の方法で指定するまではそのままであると言っても差し支えないと思います。

4

1 に答える 1

4

OpenGL 変換 FAQ はこれをカバーしています: http://www.opengl.org/archives/resources/faq/technical/transformations.htm

すべての変換操作の逆数を計算できます。その場合の正しい方法はglRotatef(-45, 0, 0, 1). スケールを追加してミックスに変換すると、これはすぐに複雑になります。はるかに簡単な解決策は、変換をglPushMatrixと でラップすることですglPopMatrix

例えば:

// save the current matrix state
glPushMatrix() 

// Transform
glTranslate(...)
glRotate(...)

// Issue a draw call
glDrawArrays(...)

// Restore the transformation matrix to when it was saved.
glPopMatrix()

マトリックスをポップした後、変革が起こらなかったかのようにビジネスに取り掛かることができます. これは、相互に複数のプッシュ/ポップ シーケンスを持つことができるため、階層変換にも非常に役立ちます。

于 2012-08-04T22:55:49.507 に答える