2011-01-05 12 views
1

私はマウスの動きを使って回転したいキューブを持っています。マウスを左に動かすと、回転Xが増加したように回転します。私が右に動くと、rotationXが増加します。上下に移動すると回転が変わります。マウスでフラッシュ回転XYZで2方向に簡単に回転

これは、1つのディメンション(rotationXまたはrotationYのいずれか)のみを変更している限り、問題なく表示されます。しかし、既にrotationXを変更してからrotateYを修正しようとすると、結果は変です。 rotationXが180回転の場合、効果は逆になります。それは基本的には非常に予測不可能であり、確かにユーザーには適していません。

クォータニオン(理解できませんでした)を読んだり、青と非常に複雑な三角計算(自分自身から馬鹿を作った)を試してみました。私はこの質問を見つけましたBest way to translate mouse drag motion into 3d rotation of an objectしかし、それは私を少し助けていない、私は本当に答えのいずれかを理解することはできません。

AS3の完全な実用的なソリューション/アルゴリズムが最適ですが、擬似コードや明確な説明は本当に感謝しています。

答えて

1

既に回転しているオブジェクトにrotationYを適用しています。したがって、rotationXを180に設定し、次にrotateYを設定すると、実際にオブジェクトを「頭の上に」回転させていることになります。 xとyの両方の回転を同時に適用する場合は、matrixを使用することをお勧めします。あなたが提供したリンクは便利です。マトリックスの概念を理解したら、すべてのことを説明します。これを読んで、特に将来的にもっと3Dをやろうと思っている人は、ぜひ読んでみてください。

今のところ、Flash manual page for Matrix3Dをご覧ください。それは、あなたが行くために必要なすべての情報と例を提供する必要があります。

+0

そう、私はそれが原因だと分かっています。私は多かれ少なかれ、マトリックスが理論的にどのように働いているかを知っていますが、それは学校で行っていますが、実用的な実装をそれほどよく理解することはできません。このMatrix3Dでもう一度試してみましょう。今回はわかりました。 – Maurycy

+0

WOW! *総ショック*私はそれが簡単だったとは信じられません。そして、私はこれまでにこの試みをしていないと信じることはできません。必要なのはMatrix3D.appendRotation()です。私は最初に試していたときに、rotationXZを改変することを仮定しました。これを私に指摘してくれてありがとう:D。 – Maurycy

+1

このように考えてください。 rotationXを変更すると、オブジェクトを*独自の* x軸の周りに回転させます。あなたがここに求めたのは、オブジェクトのx軸がどこにあるかにかかわらず、*ワールド* x軸の周りでオブジェクトを回転させる方法でした。これは、オブジェクトの現在のローテーションにローテーションを追加する必要があるため、appendRotationは必要な処理を行い、パラメータを変更することはできません。 – fenomas

関連する問題