今日はJavaの日

com.sun.j3d.utils.picking.PickIntersection を使っていろいろ試してみる。QUAD_ARRAYでShape3Dを作った場合、getPrimitiveCoordinateIndices() で得られるのはピックしたポリゴン(この場合4角形)のShape3Dインスタンス内でのインデックスとなって長さ4のintの配列。
一方 getClosestVertexIndex() で得られるのはピックされたポリゴン内で何番目の頂点かというインデックス。だから pi を PickIntersection オブジェクトだとすると、

int indices = pi.getPrimitiveCoordinateIndices();
int index = indices[pi.getClosestVertexIndex()];

にて index には Shape3D を作る時に作った GeometryArray の意味でのピックされた一番近い頂点番号が入るらしい。気持もわからなくもないけど Java3D って無駄にわかりにくい気がする…