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

[Java3Djp:01316] Re: [Java3Djp:01313] Re: Shape3Dのピッキング



◆◇ ◆◇ ◆◇   MagicalCastβ(ベータ版)  ◆◇ ◆◇ ◆◇
    ┌──┐                                 ┌──┐
    │\/│ DNSの新MLシステム誕生です!│\/│
    └──┘                                 └──┘
        これまでの簡単・快適そのままで高機能に
      いえいえもっと高速に。βテストにご協力下さい
            ※ fmlでもmajordomoでもありません
◆◇ ◆◇ ◆◇   http://mx7.dns-ml.co.jp/  ◆◇ ◆◇ ◆◇

どうも、阿部晃久です。

教えていただいた方法などを試したとところ、うまくピッキングすることに成功しま
した。
参考までに,どのようにプログラムを変更したのか記しておきますね。

TriangleArrayのコンストラクタにてGeometry.ALLOW_INTERSECTを指定していたんで
すが、
作ったジオメトリーに対してsetCapability()で設定しないと反映されないようでし
た。

TriangleArray(verts.length,
TriangleArray.COORDINATES|TriangleArray.NORMALS|Geometry.ALLOW_INTERSECT)
               ↓
TriangleArray geom = new TriangleArray(verts.length,
TriangleArray.COORDINATES|TriangleArray.NORMALS);
geom.setCapability(Geometry.ALLOW_INTERSECT);

私のプログラムでは,pickObjectのpickClosest()にてSceneGraphPathを取り出し
て,pickNode()によって
ノードを取り出していたんですが,各メソッドの引数として以下のように設定したら
うまく行きました.

  pickObject.pickClosest(mouseX, mouseY, PickObject.USE_GEOMETRY);
  pickObject.pickNode(sgPath, PickObject.SHAPE3D, 1)

mouseXとmouseYはマウスの座標であり、sgPathというのは取り出したSceneGraphPath
です。

つまり、ジオメトリーを元にピッキング処理を行ってシーングラフの探索を行い,
ノードを見つけるときはSHAPE3Dを探すように設定したことになるんでしょうね。

これはJava3DのTickTockPickingデモに似た方法が載っていたので,
それを参考にして作りました。
なお、Shape3DにALLOW_GEOMETRY_READをセットするように言われましたが,これはし
なくても大丈夫でした。

ちゃんと調べずに質問してしまい,本当にすいませんでした。

================================
Name  : Teruhisa Abe (阿部晃久)
E-mail : teru-abe@xxxxxxxxxx
================================