【Java3D】マウスピックのテスト
Channel:
Subscribers:
117
Published on ● Video Link: https://www.youtube.com/watch?v=2SxwIf8XE0M
結局カメラのTransformGroupにぶら下げればビルボードにする必要ないのでOrientedShape3Dじゃなく自分でUIの位置設定する事に。
問題なのはJava3D標準のマウスピック機能で、PickCanvasのpick系メソッド使う限りどうやってもShape3Dしかピックできない(BoundingLeafノードとかをピックできない)。
それだけならまだいいけど、どういう内部ピック処理してるのか、どうやってもShape3Dの外形の形状でしかピックできない。例えばBoundingBoxをShape3DにsetしてAutoCompute falseしてもその形状でピックできないし、RasterやText3Dとかで内部がnullのShape3DにBoundingBoxセットすると、なぜかピック範囲が無限大になる。マジでどーなってんの。
結局、PickCanvasにはgetPickShapeという3D空間上のマウスピックRayを生成できるメソッドがあるので、そっから自力で3D空間上のBoundingBoxとintersect()処理実装してマウスピックにした。getPickShapeがあるのだけは便利だけどマジで意味不明。どーせいずれマウスピックRayとの接触座標まで出さなきゃいけないから駄目ってわけじゃないんだが…。
Java3Dには特定Nodeまでの行列全部の合計を即出してくれるgetLocalToVworld()メソッドがあるので、自力でBoundingBox計算して当たり判定とるの自体は簡単。時間が無駄になっただけ。
