[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