- ベストアンサー
Java3D アニメーションについて
- Java3DのRotationInterpolatorを使用して、Y軸を中心とした回転を行います。
- 物体をX軸を中心に20°程回転させ、かつY軸を中心に1回転させることができます。
- クォータニオンを使用することで、具体的な回転角度の例も示されています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以前の回答で述べたとおり、RotationInterpolatorでX軸について回転することはできます。コンストラクタ引数もしくはメソッドsetTransformAxis()で回転軸を設定できます。 >初期画面から座標軸が傾いた状態になってしまいます ルート - 回転A - 回転B - 物体 というシーングラフと、 ルート - 回転B - 回転A - 物体 というシーングラフでは結果が異なりますが、そういうことでしょうか?変換行列は一般的に交換法則は満たしません。 あと以前の回答で書くのを忘れましたが、今回の問題はクォータニオンを使えば解決するというものではないことを付け加えておきます。
その他の回答 (2)
- Foxtrot_OW
- ベストアンサー率38% (19/49)
#1の回答者です。質問の内容を勘違いしていたようで申し訳ありません。 クラスjavax.media.j3d.Alphaのコンストラクタの引数triggerTimeはそのアニメーションが開始するタイミングを指定できるようです。Y軸の回転の開始を、X軸の回転の終了のタイミングに指定すればいいのではないでしょうか。たとえばX軸の回転に2秒かかるとしたら、Y軸の回転を2秒後から開始するようにtriggerTimeに2000を渡します。X軸の回転も2秒後に停止し繰り返さないようloopCountには1を渡します。RotationInterpolatorを二つ重ね合わせるので、Transform3Dも二重になります。自分では確認していませんが、試してみてください。
お礼
Foxtrot_OWさん、ありがとうございます。 RotationInterpolatorはデフォルトで使用するとY軸回転ですね。 ご回答にてRotationInterpolatorを二つ重ね合わせるとありましたが、RotationInterpolatorをX軸回転で用いることは可能でしょうか? 「物体(座標軸)をX軸回転させておいて、Y軸に1回転させる」という方法では、初期画面から座標軸が傾いた状態になってしまいます。 よって、RotationInterpolatorをX軸回転で用いることが可能であれば解決するのですが。
- Foxtrot_OW
- ベストアンサー率38% (19/49)
おっしゃるとおり、RotationInterpolatorのコンストラクタの引数axisOfTransformはあくまで回転軸の方向を変換します。ご質問の内容では回転軸はY軸と(たまたま)同じ方向なので、axisOfTransformはデフォルトのままでよろしいかと思います。 >物体をX軸を中心に20°程回転させ、かつY軸を中心に1回転させる ではなく、「X軸について20°程回転させた物体」を、RotationInterpolatorでY軸について1回転させると考えてみたらどうでしょうか。X軸について20°程の回転を設定したTransformGroupにその物体を追加し、そのTransformGroupをRotationInterpolatorのコンストラクタの引数targetに渡してみてください。 なにやら面白そうなものを作ってますね。気になるな……
お礼
Foxtrot_OWさん、ありがとうございました。 私が作成しているのは3次元の座標空間を回転させるというものです。 あらかじめ「X軸について20°程回転させて」しまいますと、アニメーションが始まる前で座標軸がその分だけ傾く(20°)ことになってしまいます。 できましたら、アニメーションが始まってからX軸、Z軸について回転させたいのですが・・・
お礼
Foxtrot_OWさん、お礼も大変遅くなり失礼いたしました。 メソッドsetTransformAxis()で回転軸は以前から試していましたが、 コンストラクタ引数の設定でRotationInterpolatorでX軸について回転することができることを知って大変勉強になりました。 クォータニオンで解決するものではないと言う点も知り、嬉しく思います。ありがとうございました。