[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Java3Djp:00217] Re: オブジェクトの座標読み書き込みするには



 えんどうです。

>この1の現在の座標を返すメソッドを物体に書くというのはどういう形でやればいい
>のでしょうか?

TransformGroupを継承したクラスを書くと良いのではないでしょうか。

>通常物体の座標は
>Transform3D at3d = new Transform3D();
>    at3d.set(new Vector3d(3.0, 0.7, -10.0)); <※
>    TransformGroup a = new TransformGroup(at3d);
>の部分で指定しているのですがこの座標を書き換えるようなものがあるのですか?

TransformGroupのgetTranslationメソッドで現在の Transform3D が取得できます。

「Java 3Dプログラミングバイブル」の p.224-226あたりで SimplePicking という
プログラムを書いています。

updateScene というメソッドの中でピッキングを行っています。

    public void updateScene(int x, int y) {
        pickCanvas.setShapeLocation(x, y);
        PickResult pickResult = pickCanvas.pickClosest();
        if (pickReusult != null) {
            Node node = pickResult.getNode(nodeType);
            if (node != null && callback != null) {
              callback.picked(nodeType, node);
            }
        }
    }

SimplePickingCallback を実装したクラス内の
picked メソッドが呼ばれ、ピックされた Node が引数にわたってくるので、
TransformGroup をピックするようにして getTranslation メソッドで
Transform3D を取得すれば良いのでは。

テストしてませんがこんな感じで。

    picker.setupCallback( new SimplePickingCallback() {
        public void picked(int type, Node node) {
            Transform3D t3d = new Transform3D();
            (TransformGroup)node.getTransform(t3d);
            // 取得した t3d からデータを取り出す処理をここに書く
        }
    });

-- 
ENDO Yasuyuki <yasuyuki@xxxxxxxxxxxx>
http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)