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

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



   ★★★ !!!注目!!! ★★★ 

 ━ フルカラー名刺屋さん ━━ URL http://www5.tokyoweb.or.jp/netcraft/
        カードクラフト                          ▲  Click ! ▲
 ● 速い!●  ご注文の翌営業日に出荷致します。
 ● 安い!●  80枚1500円(税別)全国送料無料。
 ● 綺麗!●  高品質なフルカラー名刺です。
-----------------------------------------------------------------------

小池です。

えんどうさん、ありがとうございます。

At 06:16 99/09/23 +0900, yasuyuki@xxxxxxxxxx wrote:
> えんどうです。
> 
> > #Switchをつかうべきでしょうか・・。
> 
> 表示/非表示だけだったら Switch が無難かも知れません。

うーむ、最初にちょっと検討したんですけど、インスタンスの
参照はどの道キープしてるので、detach/attachの方が簡単に
思えたんですよね。

> > pickingのbehaviorはSUNのcom.sun.j3d.utils.picking.の
> > クラスをサブクラス化したものです。
> > 

> com.sun.j3d.utils.behaviors.picking パッケージですが、実際には
> BranchGroup#pickAll()/pickAllSorted()/pickAny()/pickClosest()
> を使っています。
> 
> これは、その BranchGroup 配下のノードを調べ、
> PickRay と交差しているかどうかを判定しているようです。
> 
> null を返すとなると、再接続されたノードのトラバーサルが
> うまく行っていないかもしれません。

そうですね。私もその線を疑っています。
昨日JDCのバグパレードも調べてみたんですが、らしいものは
見つかりませんでした。

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

親はTransformGroup、子はBranchGroupのサブクラスです。

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

PRIMITIVE | BRANCH_GROUP、もしくはTRANSFORM_GROUPにして
あります(behaviorが複数あり、両方のタイプがある)。
ただ、該当部分のコードは以下の通りですが、

int pickObjectType = PickObject.PRIMITIVE | PickObject.BRANCH_GROUP;
(途中省略)
TransformGroup tg = null;
if (trigger.isTrigger(mevent)) {
  tg = (TransformGroup)pickScene.pickNode(
          pickScene.pickClosest(xpos, ypos, pickMode),
          pickObjectType);

( pickScene : PickObject型 )

nullを返すのはpickClosest()ですので、あまり関係ないかなと。

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

そうですね。やってみます。

実はPickObject#pickClosest()の中を見て、そこで
BranchGroup#pickClosest()を呼んでいたので、これをpickAll()に
してみようか、とは思ってました。ただ、それにはPickObjectを
自前のクラスにしなければならず、それを使うようにするには
PickMouseBehaviorもしなければならず・・という具合で、
躊躇してました。

えんどうさんに言われて初めて、PickObjectにpickAll()があるのに
気づきました。

> あまり参考にならないかも知れませんが、
> PickMouseBehavior を継承したピッキングのサンプルがありますので、
> お好きに改造して使ってください。
> 
> http://www.javaopen.org/j3dbook/examples/SimplePicking/SimplePicking.java

ありがとうございます。




/* written by Koike,T. */