com.nttdocomo.ui.graphics3d.collision
インタフェース CollisionObserver


public interface CollisionObserver

形状の衝突判定時に、衝突情報とともに通知を受けるためのインターフェースです。

CollisionクラスのisHitメソッド、isPickedメソッドにて、Hit/Pickした時に、衝突情報を使って 処理を行いたい場合、次のようにします。

  1. このインターフェースを実現するクラスを作成する。
  2. 必要なコールバック時の処理を実装する。
    • CollisionクラスのisHitメソッドに対する処理 → onHit()
    • CollisionクラスのisPickedメソッドに対する処理 → onPick()
  3. 1.のインスタンスを生成し、CollisionクラスのsetObserverメソッドにより、 Collisionオブジェクトに設定する。
CollisionObserverの各メソッドの呼び出しは、CollisionクラスのisHitメソッド、 isPickedメソッド内部で同期的に呼び出されます。

Collisionクラスの説明にあるサンプルコードを参照してください。

導入されたバージョン:
DoJa-5.0 (903i)

メソッドの概要
 boolean onHit(Shape shape, int boneId0, BoundingVolume[] bv, int[] boneId1, boolean[] isInvolved, Vector3D[] point)
           衝突判定対象がBVFigureオブジェクトの時、CollisionクラスのisHitメソッドにてHitした場合に 呼ばれます。
 void onHit(Shape shape0, Shape shape1, boolean isInvolved, Vector3D point)
           CollisionクラスのisHitメソッドにてHitした場合に呼ばれます。
 void onHit(Shape shape, Sphere sphere, float contactPos, Vector3D normal, float distance)
           衝突判定対象がShapeSphereの軌跡の時、CollisionクラスのisHitメソッドにてHitした場合に 呼ばれます。
 void onPick(Ray ray, Figure fig, IntersectionAttribute[] attr)
           CollisionクラスのisPickedメソッドにてPickした場合に呼ばれます。
 

メソッドの詳細

onHit

public void onHit(Shape shape0,
                  Shape shape1,
                  boolean isInvolved,
                  Vector3D point)

CollisionクラスのisHitメソッドにてHitした場合に呼ばれます。

Collisionクラスの次のメソッドで、引数notifyをtrueにしてHitした場合に呼ばれます。

取得できる情報は次のとおりです。(shape0とshape1が逆の組合せも含む)
shape0shape1内包状態として渡される値交点データ
PointBVtrue or falseなし
(内包状態がfalseの場合、交点はPointと同じになるため、交点データとしては返しません)
Line(Ray)Trianglefalseあり
Line(Ray)Planefalseあり
LineBVtrueなし
Line(Ray)BVfalseあり
TriangleTrianglefalseなし
TrianglePlanefalseなし
TriangleBVtrue or falseなし
PlanePlanefalseなし
PlaneBVfalseなし
BVBVtrue or falseなし

パラメータ:
shape0 - 衝突判定対象のShapeオブジェクトの片方が渡されます。
shape1 - 衝突判定対象のShapeオブジェクトの他方が渡されます。
isInvolved - 片方がBoundingVolumeオブジェクトで、この内部に他方のオブジェクトが 内包されているかどうかのboolean値が渡されます。内包されている場合trueが渡され、内包されていない場合falseが渡されます。
point - 交点を表わすVector3Dオブジェクトが渡されます。交点が無い場合はnullが渡されます。

onHit

public boolean onHit(Shape shape,
                     int boneId0,
                     BoundingVolume[] bv,
                     int[] boneId1,
                     boolean[] isInvolved,
                     Vector3D[] point)

衝突判定対象がBVFigureオブジェクトの時、CollisionクラスのisHitメソッドにてHitした場合に 呼ばれます。

Collisionクラスの次のメソッドで、引数notifyをtrueにしてHitした場合に呼ばれます。

取得できる情報は次のとおりです。
shape内包状態として渡される値交点データ
Pointtrue or falseなし
(内包状態がfalseの場合、交点はPointと同じになるため、交点データとしては返しません)
Linetrueなし
Line(Ray)falseあり
Triangletrue or falseなし