[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00876] Pickingの別解(1/2) (Re: [Q]PickでObjectの認識について。。)
☆★☆★☆★☆ホームページスペースのことならAKB NETWORKへ★☆★☆★☆★
★☆ http://あなたのID.miffy.toでHPを作るなら→\890/月から! ★☆
☆ 50Mの大容量!!!独自ドメインでのホスティングなら→\3,980/月から! ★
★ サーバー丸ごとレンタル。Webレンタル業務も簡単→\20,000/月から! ☆
☆★ ただいまキャンペーン中!更にお安く提供しています!! ☆★
★☆★☆★☆★業界屈指の低料金!!http://www.akb-net.com/☆★☆★☆★☆
えんどう@執筆中 です。
> com.sun.j3d.utils.behaviors.picking.PickMouseBehavior を継承したクラスを
> 書いてください。
> やることは多分、
> processStimulus() の中で PickingCallback を呼ぶことだけになると思います。
うそでした。ピック時に呼ばれるのは updateScene() でした。
> 次に、現在の Behavior に加えて、上記の Behavior を addChild() して
> ください。このときに PickingCallback をこの Behavior にセットします。
>
> これで、回転や移動の Behavior とは別個に Pick 時の PickingCallback が
> 呼ばれると思います。
>
> # このような Behavior を書きたいとずっと思っているのですが、
> # 作業がなかなか進みません...
書きました。まず、Callback のための interface です。
// Java 3Dテスト用プログラム
// SimplePickingCallback.java
// Copyright (c) 1999 ENDO Yasuyuki
// mailto:yasuyuki@xxxxxxxxxx
// http://www.javaopen.org/j3dbook/index.html
import javax.media.j3d.Node;
interface SimplePickingCallback {
void picked(int nodeType, Node node);
}
つぎに、PickMouseBehavior を継承したクラスです。
// Java 3Dテスト用プログラム
// SimplePicking.java
// Copyright (c) 1999 ENDO Yasuyuki
// mailto:yasuyuki@xxxxxxxxxx
// http://www.javaopen.org/j3dbook/index.html
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.picking.*;
public class SimplePicking extends PickMouseBehavior {
protected SimplePickingCallback callback = null;
protected int pickMode = PickObject.USE_BOUNDS;
protected int nodeType = PickObject.SHAPE3D;
public SimplePicking(BranchGroup root, Canvas3D canvas, Bounds bounds) {
super(canvas, root, bounds);
this.setSchedulingBounds(bounds);
}
public SimplePicking( BranchGroup root, Canvas3D canvas, Bounds bounds,
int mode )
{
super(canvas, root, bounds);
pickMode = mode;
this.setSchedulingBounds(bounds);
}
public SimplePicking( BranchGroup root, Canvas3D canvas, Bounds bounds,
int mode, int type)
{
super(canvas, root, bounds);
pickMode = mode;
nodeType = type;
this.setSchedulingBounds(bounds);
}
public void setPickMode(int mode) { pickMode = mode; }
public int getPickMode() { return pickMode; }
public void setNodeType(int type) { nodeType = type; }
public int getNodeType() { return nodeType; }
public void setupCallback(SimplePickingCallback callback) { this.callback = callback; }
public void updateScene(int x, int y) {
Node node = pickScene.pickNode(pickScene.pickClosest(x, y), nodeType);
callback.picked(nodeType, node);
}
}
利用例は後ほど...
---
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/index.html (Japanese Only)