|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 蜀