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

[Java3Djp:00074] PickMouseBehavior について



はじめて投稿させていただきます。
赤松と申します。
MLへの投稿自体初めてなので、失礼があればご指摘お願いします。


PickMouseBehaviorをつかって、クリックしたものを
特定するプログラムを作成しました。
プログラムの概要は以下のようなものです。

・原点を中心にxz平面上に3×3の9個のSphereが並んでいる。
・初期状態でz軸負方向に視点が向いている。
・ボタンを一回押すごとにy軸を中心に原点方向に向いたまま45度移動する。
(つまり、ボタンを8回押すと元の位置に戻る。)
・Sphereをクリックすると、各々に設定しておいた文字列をTextFieldに出力する。


これを実行したところ、z軸負方向やx軸負方向を向いている場合は
クリックしたものを返すのですが、
z軸正方向やx軸正方向を向いている場合、クリックしたSphereの陰の
もっともz軸正方向もしくはx軸正方向よりの(奥の)ものを返してきます。

何故このようになるのか、
また、どの方向を向いていてもクリックしたものを返すには
どのようにすればよいか、教えていただけないでしょうか。


作成したPickMouseBehaviorのサブクラスは以下の通りです。

class MyPMBehavior extends PickMouseBehavior{
    Point3d eyePos;
    Transform3D t3d = new Transform3D();
    public MyPMBehavior(BranchGroup root, Canvas3D canvas, Bounds bounds){
        super(canvas, root, bounds);
        setSchedulingBounds(bounds);
    }
    public void updateScene(int xpos,int ypos){
        TransformGroup tg = null;
        pickCanvas.setShapeLocation(xpos,ypos);
        PickResult res = pickCanvas.pickClosest();
        eyePos = pickCanvas.getStartPosition();
    //    System.out.println(drct+" eyePos: " + eyePos);
        if(res != null){
            tg = (TransformGroup)res.getNode(PickResult.TRANSFORM_GROUP);
            if(tg != null){
                tfPicked.setText((String)tg.getUserData());
            }
        }
    }
}


赤松 真悟
aandk@xxxxxxxxxxxxxxx