com.nttdocomo.ui.graphics3d.collision
クラス BVFigure

Object
  拡張com.nttdocomo.ui.graphics3d.collision.BVFigure

public class BVFigure
extends Object

複数のBoundingVolumeで表現した、ボーン構造を持つFigureクラスです。
Figureにおけるポリゴンのかわりに、BoundingVolumeが付いているものがBVFigureです。

BVFigureオブジェクトは、BVBuilderクラスのcreateBVFigureメソッドにFigureオブジェクトを 渡して生成します。

BVFigureでは、次のBoundingVolumeを保持することができます。

ただし、1つのBoundingVolumeオブジェクトを複数の位置(Figure全体およびボーン)にセット して使用することはできません。このような使い方をした場合の衝突判定、可視判定は保証されません。

BoundingVolumeをFigure全体またはボーンにセットする際には、BoundingVolumeの Shape座標系 とBVFigure座標系またはボーン座標系が一致します。OBVに対して、setRotateメソッド、 setCenterメソッドにより、 Shape座標系におけるBV座標系の回転変換、平行移動を設定すると、そのままの 状態でBVFigure座標系またはボーン座標系にセットされることになります。
Figureのボーン座標系では、Z軸がボーンとなるため、CapsuleCylinderの場合は中心軸をZ軸 に合わせて使用することが一般的と言えます。したがって、OBVをBVFigureのボーンにセットして 使用する場合は、setRotateメソッドで、BoundingVolume.ROTATE_Xを設定するのが一般的となります。 ただし、これはモデルの作り方によるので、適当な回転を設定する必要があります。

setActionメソッド、setTimeメソッドによりFigureと同様にボーンを動かすことができます。この際、 各ボーンのBoundingVolumeは、Figureのポリゴンからアクションごとに再計算するのではなく、 セットされたBoundingVolumeを動かすだけとなります。

また、Figure全体のBoundingVolumeは、アクションを行っても形状が変化しません。アクション の結果を反映させるためには、calculateBV を使って、Figure全体のBoundingVolumeを再生成 してください。

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

フィールドの概要
static int ID_NOT_FIGURE
          Figure全体、Figureのボーンのいずれでもない場合のID(=-2)。
static int ID_WHOLE_FIGURE
          Figure全体を示すID(=-1)。
 
メソッドの概要
 void calculateBV(int shapeType, float fit)
           設定されたアクション、フレーム値から、Figure全体のBoundingVolumeオブジェクトを 生成します。
 BoundingVolume getBV()
           Figure全体のBoundingVolumeを取得します。
 BoundingVolume getBV(int boneId)
           指定するボーンに設定されているBoundingVolumeを取得します。
 int getNumBones()
           ボーンの個数を取得します。
 Transform getTransform(Transform trans)
           現在設定されている一次変換行列を取得します。
 boolean isHittingEnabled(int boneId)
          ボーンおよびFigure全体に設定されているBoundingVolumeに対して衝突判定を行うかどうか の状態を取得します。
 void setAction(ActionTable act, int index)
           アクションを設定します。
 void setBV(BoundingVolume bv)
           Figure全体のBoundingVolumeを設定します。
 void setBV(BoundingVolume bv, int boneId)
           指定するボーンにBoundingVolumeを設定します。
 void setHittingEnabled(int boneId, boolean enable)
           ボーンおよびFigure全体に設定されているBoundingVolumeに対して衝突判定を行うかどうかを設定します。
 void setTime(int frame)
           姿勢のフレーム値を設定します。
 void setTransform(Transform trans)
           ワールド座標系に対してBVFigure座標系をセットする際の一次変換行列を設定します。
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

ID_WHOLE_FIGURE

public static final int ID_WHOLE_FIGURE
Figure全体を示すID(=-1)。

関連項目:
定数フィールド値

ID_NOT_FIGURE

public static final int ID_NOT_FIGURE
Figure全体、Figureのボーンのいずれでもない場合のID(=-2)。

関連項目:
定数フィールド値
メソッドの詳細

setTransform

public void setTransform(Transform trans)

ワールド座標系に対してBVFigure座標系をセットする際の一次変換行列を設定します。

初期値は単位行列で、BVFigure座標系がワールド座標系と一致します。

設定する行列の3×3部分が直交行列となり、全方向同一スケールとなるように指定してください。そうでない場合の 衝突判定、可視判定は保証されません。

パラメータ:
trans - 設定する一次変換行列を指定します。nullを指定すると単位行列として扱われ、恒等変換となります。
例外:
IllegalArgumentException - 引数transの1〜3列の列ベクトルに零ベクトルがある場合に発生します。
関連項目:
図形サイズ・位置、ベクトル、行列設定値に関する注意事項

getTransform

public Transform getTransform(Transform trans)

現在設定されている一次変換行列を取得します。

setTransformメソッドで設定された一次変換行列を取得します。

パラメータ:
trans - 一次変換行列の値を受け取るTransformオブジェクトを指定します。 指定されたTransformオブジェクトに値をコピーして、戻り値で返します。nullが指定された 場合は、Transformオブジェクトを生成して値をコピーし、戻り値で返します。
戻り値:
現在設定されている一次変換行列を返します。

setAction

public void setAction(ActionTable act,
                      int index)

アクションを設定します。

使用方法は、FigureクラスのsetActionメソッドと同じです。

アクション作成時に、各ボーン行列で、X、Y、Z軸方向に異なるスケールを設定しないように してください。 異なるスケールを設定すると、ワールド座標系に対する変換行列の計算結果が 直交行列にならない場合があり、衝突判定は保証されません。

パラメータ:
act - ActionTableオブジェクトを指定します。
index - アクションの番号を指定します。0以上かつact.getNumActions()メソッドが返す 値未満の値を指定します。
例外:
NullPointerException - 引数actがnullの場合に発生します。
UIException - 引数actが既に dispose() されたオブジェクトの場合に発生します(ILLEGAL_STATE)。
IllegalArgumentException - 引数index が0未満の場合、あるいは、引数indexがact.getNumActions()メソッドが返す値以上の 場合に発生します。

setTime

public void setTime(int frame)

姿勢のフレーム値を設定します。

使用方法は、FigureクラスのsetTimeメソッドと同じです。

パラメータ:
frame - 姿勢のフレーム値を指定します。

getNumBones

public int getNumBones()

ボーンの個数を取得します。

戻り値:
ボーンの個数を返します。

setBV

public void setBV(BoundingVolume bv)

Figure全体のBoundingVolumeを設定します。

AAB、OBVの両方が設定可能です。 引数bvにnullを指定することにより、Figure全体のBoundingVolumeを除去することができます。

パラメータ:
bv - 設定するBoundingVolumeオブジェクトを指定します。AAB、OBVが指定可能です。 nullを指定すると未設定状態になります。

setBV

public void setBV(BoundingVolume bv,
                  int boneId)

指定するボーンにBoundingVolumeを設定します。

設定できるのはOBVだけです。 引数bvにnullを指定することにより、BoundingVolumeをボーンから除去することができます。

ボーン座標系ではZ軸がボーンとなるため、CapsuleCylinderの場合は中心軸をZ軸に合わせて 使用することが一般的と言えます。したがって、ボーン座標系(Shape座標系)における、BV座標系の回転変換として、X軸回りに90度回転 させる変換(BoundingVolume.ROTATE_X)を使用するのが一般的となります。

パラメータ:
bv - 設定するBoundingVolumeオブジェクトを指定します。OBVのみ指定可能です。 nullを指定すると未設定状態になります。
boneId - ボーンIDを指定します。
例外:
IndexOutOfBoundsException - 引数boneIdが0未満の場合、あるいは、getNumBones()メソッドが返す値以上の場合に発生します。
IllegalArgumentException - 引数bvが、TYPE_AAB_BOX、TYPE_ AAB_CAPSULE、TYPE_ AAB_CYLINDERのタイプの場合に発生します。

getBV

public BoundingVolume getBV()

Figure全体のBoundingVolumeを取得します。

戻り値:
Figure全体のBoundingVolumeオブジェクトを返します。未設定の場合はnullを返します。

getBV

raphics3d.collision 蜀