[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