|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Objectcom.nttdocomo.ui.graphics3d.collision.BVFigure
複数のBoundingVolumeで表現した、ボーン構造を持つFigureクラスです。
Figureにおけるポリゴンのかわりに、BoundingVolumeが付いているものがBVFigureです。
BVFigureオブジェクトは、BVBuilderクラスのcreateBVFigureメソッドにFigureオブジェクトを
渡して生成します。
BVFigureでは、次のBoundingVolumeを保持することができます。
BoundingVolume
BoundingVolume
BoundingVolumeオブジェクトを複数の位置(Figure全体およびボーン)にセット
して使用することはできません。このような使い方をした場合の衝突判定、可視判定は保証されません。
BoundingVolumeをFigure全体またはボーンにセットする際には、BoundingVolumeの
Shape座標系
とBVFigure座標系またはボーン座標系が一致します。OBVに対して、setRotateメソッド、
setCenterメソッドにより、
Shape座標系におけるBV座標系の回転変換、平行移動を設定すると、そのままの
状態でBVFigure座標系またはボーン座標系にセットされることになります。
Figureのボーン座標系では、Z軸がボーンとなるため、Capsule、Cylinderの場合は中心軸をZ軸
に合わせて使用することが一般的と言えます。したがって、OBVをBVFigureのボーンにセットして
使用する場合は、setRotateメソッドで、BoundingVolume.ROTATE_Xを設定するのが一般的となります。
ただし、これはモデルの作り方によるので、適当な回転を設定する必要があります。
setActionメソッド、setTimeメソッドによりFigureと同様にボーンを動かすことができます。この際、
各ボーンのBoundingVolumeは、Figureのポリゴンからアクションごとに再計算するのではなく、
セットされたBoundingVolumeを動かすだけとなります。
また、Figure全体のBoundingVolumeは、アクションを行っても形状が変化しません。アクション
の結果を反映させるためには、calculateBV を使って、Figure全体のBoundingVolumeを再生成
してください。
| フィールドの概要 | |
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 |
| フィールドの詳細 |
public static final int ID_WHOLE_FIGURE
public static final int ID_NOT_FIGURE
| メソッドの詳細 |
public void setTransform(Transform trans)
ワールド座標系に対してBVFigure座標系をセットする際の一次変換行列を設定します。
初期値は単位行列で、BVFigure座標系がワールド座標系と一致します。
設定する行列の3×3部分が直交行列となり、全方向同一スケールとなるように指定してください。そうでない場合の 衝突判定、可視判定は保証されません。
trans - 設定する一次変換行列を指定します。nullを指定すると単位行列として扱われ、恒等変換となります。
IllegalArgumentException - 引数transの1〜3列の列ベクトルに零ベクトルがある場合に発生します。
public Transform getTransform(Transform trans)
現在設定されている一次変換行列を取得します。
setTransformメソッドで設定された一次変換行列を取得します。
trans - 一次変換行列の値を受け取るTransformオブジェクトを指定します。
指定されたTransformオブジェクトに値をコピーして、戻り値で返します。nullが指定された
場合は、Transformオブジェクトを生成して値をコピーし、戻り値で返します。
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()メソッドが返す値以上の
場合に発生します。
public void setTime(int frame)
姿勢のフレーム値を設定します。
使用方法は、FigureクラスのsetTimeメソッドと同じです。
frame - 姿勢のフレーム値を指定します。public int getNumBones()
ボーンの個数を取得します。
public void setBV(BoundingVolume bv)
Figure全体のBoundingVolumeを設定します。
AAB、OBVの両方が設定可能です。
引数bvにnullを指定することにより、Figure全体のBoundingVolumeを除去することができます。
bv - 設定するBoundingVolumeオブジェクトを指定します。AAB、OBVが指定可能です。
nullを指定すると未設定状態になります。
public void setBV(BoundingVolume bv,
int boneId)
指定するボーンにBoundingVolumeを設定します。
設定できるのはOBVだけです。
引数bvにnullを指定することにより、BoundingVolumeをボーンから除去することができます。
ボーン座標系ではZ軸がボーンとなるため、Capsule、Cylinderの場合は中心軸を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のタイプの場合に発生します。
public BoundingVolume getBV()
Figure全体のBoundingVolumeを取得します。
BoundingVolumeオブジェクトを返します。未設定の場合はnullを返します。raphics3d.collision 蜀