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

[Java3Djp:00932] Re: picking and detach/attach



□■■■■■□ yourID.glay.toでwebsiteを運営できる! □■■■■■■■□
■                                   ■
■   ◎CGI/SSI可。【30M・\900/月】【60M・\1,500/月】の低料金設定! ■
■    さらに、yourID@xxxxxxxxxxでメールアドレスもついてくる!     ■
■                                   ■
■   ◎"1mg"chat!も大人気!みなさんも楽しくお話しませんか??    ■
■                                   ■
□■□ katuweb communication □■□ http://katuweb.com □■■■■■■■□

えんどうです。

> #Switchをつかうべきでしょうか・・。

表示/非表示だけだったら Switch が無難かも知れません。

> pickingのbehaviorはSUNのcom.sun.j3d.utils.picking.の
> クラスをサブクラス化したものです。
> 
> で、このbehaviorの中を調べてみると、updateScene()のなかで
> PickObject#pickClosest(int xpos, int ypos, int pickMode)が
> nullを返しています。
> 
> pickingのモードはboundsでもgeometryでも変わりません。
> attach/detachするオブジェクトやその親をcompile()する・
> しないでも変わりません。

com.sun.j3d.utils.behaviors.picking パッケージですが、実際には
BranchGroup#pickAll()/pickAllSorted()/pickAny()/pickClosest()
を使っています。

これは、その BranchGroup 配下のノードを調べ、
PickRay と交差しているかどうかを判定しているようです。

null を返すとなると、再接続されたノードのトラバーサルが
うまく行っていないかもしれません。

atach/detach は BranchGroup の単位でしょうか、
それとも TransformGroup の単位ですか?

あと、pick の際の Node タイプ は何でしょうか。
PickObject には次のタイプが用意されています。
BRANCH_GROUP, GROUP, LINK, MORPH, PRIMITIVE,
SHAPE3D, SWITCH, TRANSFORM_GROUP

pickAll() で交差しているすべての SceneGraphPath を得て、
全部の Node を調べてみるという方法も考えられます。

あまり参考にならないかも知れませんが、
PickMouseBehavior を継承したピッキングのサンプルがありますので、
お好きに改造して使ってください。

http://www.javaopen.org/j3dbook/examples/SimplePicking/SimplePicking.java

---
ENDO Yasuyuki <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/index.html (Japanese Only)