[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:01182] RE: [Java3Djp:01180] Re: RotationInterpolatorのaxisOfRotationについて
======================================================================
┌────┐ 1.会員登録をする(無料)
(( /⌒│\ P /│⌒\ )) 2.好きな情報をたくさんキャッチする
/へへ│ \/ │へへ\ 3.ポイントを集めて、賞品と交換する
└────┘ ☆★☆ ポイントメール ☆★☆
・...・ http://www.pointmail.co.jp/
===================================================================ad=
冨塚です。
Tomohiro Koike wrote:
>確認ですが、「ピックされた最上位の」というのは、動かす
>対象のサブグラフの中の最上位と言うことですよね。
そうです。ピック対象として
PickObject.TRANSFORM_GROUPを指定しています。
>グローバル座標の原点位置(0.0, 0.0, 0.0)から動作を開始、
>というのは、Interpolatorの軸がグローバル座標系の
>座標軸になっている、ということでしょうか。
ちょっとその辺が自信ないんです。
ご提示頂いたソースに倣って修正してみたのですが、
状況は変わりませんでした。以下に修正前後のソースをUPします。
(修正前)
--------------------------------------------
if(node instanceof TransformGroup) {
Transform3D t3d = new Transform3D();
((TransformGroup)node).getTransform(t3d);
if(debug) {
Matrix4d m4d = new Matrix4d();
t3d.get(m4d);
System.out.println("Matrix4d: " + m4d);
}
pi.setEnable(false);
pi.setTarget((TransformGroup)node);
pi.setAxisOfTranslation(t3d);
pi.setEnable(true);
}
--------------------------------------------
(修正後)
--------------------------------------------
if(node instanceof TransformGroup) {
Transform3D t3d = new Transform3D();
((TransformGroup)node).getTransform(t3d);
Vector3d v3d = new Vector3d();
t3d.get(v3d);
Transform3D axis3d = new Transform3D();
axis3d.set(v3d);
if(debug) {
Matrix4d m4d = new Matrix4d();
t3d.get(m4d);
System.out.println("Matrix4d: " + m4d);
System.out.println("axis3d: " + axis3d);
}
pi.setEnable(false);
pi.setTarget((TransformGroup)node);
pi.setAxisOfTranslation(axis3d);
pi.setEnable(true);
}
--------------------------------------------
上記コードはPick時に呼ばれるCallback関数内の一部です。
if(node instanceof TransformGroup) { のnodeは、ピックされたノードを
指しています。先ほども書きましたがピック対象として、
PickObject.TRANSFORM_GROUPを指定していますので、パーツの
最上位のTransformGroupを取得できているとは思うのですが・・・。
piはPositioinInterpolatorオブジェクトです。予め生成しておいて、
ピックされた時にターゲットを変えるようにしています。
このソースを実行すると、ピックしたパーツが原点位置に移動した後に
横に向かって飛んでいってしまいます。
なお、修正後のモジュールを走らせた結果のDebug情報を
以下に示します。
(1回目のピック時)
--------------------------------------------
Matrix4d: 1.0, 0.0, 0.0, 0.0
0.0, 1.0, 0.0, 29.192899703979492
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
axis3d: 1.0, 0.0, 0.0, 0.0
0.0, 1.0, 0.0, 29.192899703979492
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
--------------------------------------------
(2回目のピック時)
--------------------------------------------
Matrix4d: 1.0, 0.0, 0.0, 5.4000091552734375
0.0, 1.0, 0.0, 0.0
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
axis3d: 1.0, 0.0, 0.0, 5.4000091552734375
0.0, 1.0, 0.0, 0.0
0.0, 0.0, 1.0, 0.0
0.0, 0.0, 0.0, 1.0
--------------------------------------------
長々とすみません。何か不足情報がありましたら言ってください。
冨塚 義浩(TOZUKA Yoshihiro)
E-mail: i-totuka@xxxxxxxxxx