arcball/trackballローテーションを実装しようとしていますが、 ローテーションの中心に問題があります。何となく、センターを私の画面の中心にしたい。OpenGLでクォータニオンを使って画面の中心をどのように回転させるのですか?
私がこれまで行ってきたことを説明しましょう。私はquaterion (:vector_start X vector_end、角度:回転軸vector_start * vector_end)作成した
私はglMultMatrixfでそれを使用するために、回転行列を作成したこと四元(マトリックス)から
をし、所望の回転を得る。
問題は、私のモデルがアークボールのように回転するように見えますが、それは常にローカル原点を中心に回転するはずです。どのように私はそれが画面の中心の周りに回転させることができます そのローカル起源がどこにあるかにかかわらず?
この問題の解決策は、回転軸全体を画面の中央で に変換してから回転を適用することができますが、これは可能でしょうか? ここに何かがありますか?
はい、しかし、私はglMultMatrixf()を適用しても、OpenGLはモデルをローカル原点の周りで回転させませんか? 私は原点に回転すると(glRotatef()ではなくglMultMatrix()を使用して)回転して再び元に戻すと、元のモデルが原点を中心に再回転します。 –
glTranslatef()で翻訳してから、あなたの回転行列glMultMatrix()を掛けて、glTranslatef()を使って再び翻訳し直してください。これは単にglMultMatrix()を呼び出すのとは対照的です。それはうまくいかない? – catchmeifyoutry
いいえ動作しません。それは、glMultMatrixfによって適用された回転行列から言われるようにモデルを回転させるが、そのローカル起源の周りを回転させるということである。私は回転クォータニオンを オイラー角に変換しようとしましたが、glRotatef(Yaw、0.、0.、1.)を適用しました。 glRotatef(Pich、0.、1.、0); glRotatef(ロール、1.、0.、0。); glMultMatrixf()を直接適用するのではなく、回転が画面中央付近にある間に、円弧とは何の関係もありません 回転! –