2011-10-29 13 views
1

私のprevious questionからフォローしていますが、私は四元数でオブジェクトを回転させることができましたが、まだ小さな問題があり、解決方法はわかりません。下のコードでは、オブジェクトはx軸とy軸の周りを回転します。しかし、私はxとyキーの間で切り替えると、常に最初の位置にジャンプします。だから私は新しいポジションから決してローテーションを取ることはありませんが、常にプログラムが始まったポジションからのものです。クォータニオンでのローテーションは正しくありません

Quaternion q1 = quaternion->quat_rotate(anglex,1,0,0); 
Quaternion q2 = quaternion->quat_rotate(angley,0,1,0); 
quaternion->mult(q1,q2); 
quaternion->quat_matrix(Matrix); 
glMultMatrixf(Matrix); 
object->drawObject(Red,Green,Blue); 

私はあなたが何を意味するか理解していただきたいと思います。

+0

xキーを長く押すほど、大きなアングルが得られますか?キーを離したときにこれらの値をリセットしますか?完全なコードを投稿してください。その四元数変数は何ですか? –

答えて

1

xキーとyキーを切り替えると、常に最初の位置に戻ります。だから私は新しいポジションから決してローテーションを取ることはありませんが、常にプログラムが始まったポジションからのものです。

もちろんです。あなたのコードは、あなたがしていることを正確にしています。 Quaternion::mult(Quaterion&q1,Quaterion&q1)は何を表示していないのですが、それはクォータニオンインスタンスの内容をq1とq2の積で置き換えると思われます。現在の方向をq1 * q2で置き換えるのではなく、新しい方向を得るために現在の方向にq1 * q2を掛ける必要があります。

関連する問題