class CWall

【概要】
 壁当たり判定付きのメッシュデータ。CMesh の拡張クラス。

重要度メソッド名 解説アクセス
CWall(CD3DEnv *pEnv, TCHAR *fname)
コンストラクタ
public
~CWall()
デストラクタ
public
virtual void
Render(LPDIRECT3DDEVICE9 lpd3ddev)
モデルデータをグラフィックデバイスに対して描画する。
public
BOOL
ProbeTheWall(D3DXVECTOR3 *pVec, FLOAT fRadius, D3DXVECTOR3 *pVecNormal, FLOAT *pDist)
壁と球の当たり判定を行う。
public
BOOL
ProbeTheWallSinkDepth(D3DXVECTOR3 *pVec, FLOAT fRadius, D3DXVECTOR3 *pVecNormal, FLOAT *pDepth)
壁と球の当たり判定を行う。
public
BOOL
ProbeTheWallSinkDepthWithMotion(D3DXVECTOR3 *pVec, FLOAT fRadius, D3DXVECTOR3 *pVecNormal, FLOAT *pDepth)
壁と動く球の当たり判定を行う、球が動いていない時には判定しないのが特徴。
public
BOOL
CheckCollisionWithSegment(D3DXVECTOR3 *pVec1, D3DXVECTOR3 *pVec2, FLOAT fRadius)
壁と線分との当たり判定を行う。
public
BOOL
CheckCollisionWithSegment(D3DXVECTOR3 *pVec1, D3DXVECTOR3 *pVec2, FLOAT fErrorCapacity, D3DXVECTOR3 *pVecOut)
壁と線分との当たり判定を行う。衝突位置を返す
public
void
SetWorldMatrix(D3DXMATRIX *pMat)
地形を表示する際に使用するワールド行列を指定する。
public
virtual void
GetObjectCenter( D3DXVECTOR3 *pPos)
モデルデータの中心点をローカル座標で返す。
public
virtual void
GetBoundingBox(D3DXVECTOR3 *pMin, D3DXVECTOR3 *pMax)
モデルデータを囲む最小の矩形を返す。座標はローカル座標で表される。
public
virtual float
GetRadius()
モデルデータを囲む最小の球の半径を返す。
public
virtual HRESULT
GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9 *ppVB)
モデルデータを表現する頂点バッファを返す。
public
virtual HRESULT
GetIndexBuffer(LPDIRECT3DINDEXBUFFER9 *ppIB)
GetIndexBufferが返す頂点バッファに対応するインデックスバッファを返す。
public
virtual DWORD
GetFVF()
モデルデータで使用されている頂点フォーマットを返す。
public
virtual DWORD
GetNumVertices()
モデルデータで使用されている頂点の数を返す。
public
virtual DWORD
GetNumFaces()
モデルデータで使用されている面の数を返す。
public
static FLOAT
CalcDistanceSegmentToSegment(D3DXVECTOR3 *pveca0, D3DXVECTOR3*pveca1, D3DXVECTOR3 *pveca, D3DXVECTOR3 *pvecb0, D3DXVECTOR3 *pvecb1, D3DXVECTOR3 *pvecb)
太さ付きの二つの線分間の最短距離を返す。
public

※重要度の意味:

◎これを知らないとこのライブラリを使えないレベル。
○知っておいたほうが良いレベル。
△知らなくても支障は無いレベル。


CWall(CD3DEnv *pEnv, TCHAR *fname)

引数:pEnv:このメッシュオブジェクトが使用する描画環境へのポインタ。
fName:ファイルネームを示す文字列へのポインタ(実行ファイルからの相対パス)。


コンストラクタ。ファイルネームが示すメッシュを読み込む様に、本クラスを初期化する。 実際にはクラスを生成した時点ではファイルは読み込まれないので、描画環境に対して、 ReloadGraphics()などで明示的に読み込み指示をする必要がある。


~CWall()

デストラクタ


virtual void Render(LPDIRECT3DDEVICE9 lpd3ddev)

引数: lpd3ddev 描画に使用するDirect3D9 デバイス。

引数に指定された Direct3D9 デバイスに対して描画を行う。
ワールド行列やビュー行列については、このメソッド呼び出しの前に設定しておく必要がある。


virtual void GetObjectCenter( D3DXVECTOR3 *pPos)

引数: pPos D3DXVECTOR3 型のデータへのポインタ。
返値: なし。
引数に指定されたポインタが指すデータに対して、このモデルの中心座標を返す。
座標はローカル座標で示されるので、必要に応じて変換が必要。


virtual void GetBoundingBox(D3DXVECTOR3 *pMin, D3DXVECTOR3 *pMax)

引数:pMin:矩形の最小値側を指すD3DXVECTOR3 型データへのポインタ。
pMax:矩形の最大値側を指すD3DXVECTOR3 型データへのポインタ。
返値: なし。

引数に指定されたポインタが指すデータに対して、このモデルを囲む最小の矩形を返す。
座標はローカル座標で示されるので、必要に応じて変換が必要。


virtual float GetRadius()

引数: なし。
返値: このモデルの半径。

このモデルを囲む最小の球の半径を返す。


virtual HRESULT GetVertexBuffer(LPDIRECT3DVERTEXBUFFER9 *ppVB)

引数: ppVB : 頂点バッファを受け取るポインタを示すポインタ。
返値: 成功したら、S_OK。

このモデルを表現する頂点バッファを返す。 頂点バッファへのリファレンスカウントがインクリメントされる為、 使用終了後、速やかに Release しなければならない。


virtual HRESULT GetIndexBuffer(LPDIRECT3DINDEXBUFFER9 *ppIB)

引数: ppIB : インデックスバッファを受け取るポインタを示すポインタ。
返値: 成功したら、S_OK。

このモデルを描画するのに使用するインデックスバッファ。 (頂点バッファ内のポリゴンを表現するインデックスを示すバッファ) インデックスバッファへのリファレンスカウントがインクリメントされる為、 使用終了後、速やかに Release しなければならない。


virtual DWORD GetFVF()

引数: なし。
返値: このモデルが使用する頂点フォーマットを返す。


virtual DWORD GetNumVertices()

引数: なし。
返値: このモデルを構成する頂点数を返す。


virtual DWORD GetNumFaces()

引数: なし。
返値: このモデルを構成する面の数を返す。


BOOL ProbeTheWall(D3DXVECTOR3 *pVec, FLOAT fRadius, D3DXVECTOR3 *pVecNormal, FLOAT *pDist);

引数:pVec:当たり判定用の球の中心点
fRadius:当たり判定用の球の半径。
pVecNormal:地形の当たった部位の法線を返す為の D3DXVECTOR3 型のポインタ。
pDist:地形と球の中心点との最短距離を返す為の FLOAT 型のポインタ。
返値: 地形との衝突があれば true なければ false。

このメッシュと球との当たり判定を行う。衝突している場合、通常壁にめり込んだ
状態なので、衝突地点との距離と、最短距離地点の法線とを用いて、キャラクタなど
を衝突直前の位置に戻すか、キャラクタを当たった分だけ変形させるなどの処理が必要。

地形と衝突していない場合の距離や法線は不定。


BOOL ProbeTheWallSinkDepth(D3DXVECTOR3 *pVec, FLOAT fRadius, D3DXVECTOR3 *pVecNormal, FLOAT *pDepth);

引数:pVec:当たり判定用の球の中心点
fRadius:当たり判定用の球の半径。
pVecNormal:地形の当たった部位の法線を返す為の D3DXVECTOR3 型のポインタ。
pDepth:球が地形にめり込んだ量を返す為の FLOAT 型のポインタ。
返値: 地形との衝突があれば true なければ false。

このメッシュと球との当たり判定を行う。衝突している場合、通常壁にめり込んだ
状態なので、衝突地点でのめり込み量と、最短距離地点の法線とを用いて、キャラクタなど
を衝突直前の位置に戻すか、キャラクタを当たった分だけ変形させるなどの処理が必要。

ProbeTheWall(...) と異なり、戻すべき量を返す。


BOOL ProbeTheWallSinkDepthWithMotion(D3DXVECTOR3 *pVec, FLOAT fRadius, D3DXVECTOR3 *pVecNormal, FLOAT *pDepth);

引数:pVec:当たり判定用の球の中心点
fRadius:当たり判定用の球の半径。
pVecNormal:判定球の前フレームからの移動量を入れて呼び出す、地形の当たった部位の法線を返す、
pDepth:球が地形にめり込んだ量を返す為の FLOAT 型のポインタ。
返値: 地形との衝突があれば true なければ false。

このメッシュと球との当たり判定を行う。衝突している場合、通常壁にめり込んだ
状態なので、衝突地点でのめり込み量と、最短距離地点の法線とを用いて、キャラクタなど
を衝突直前の位置に戻すか、キャラクタを当たった分だけ変形させるなどの処理が必要。

前フレームからの移動量を渡すことで、戻す方向や戻す量の判定が困難なケースに対応できる。 どうにも判定しかねる場合は移動前の座標に戻す仕様としている


BOOL CheckCollisionWithSegment(D3DXVECTOR3 *pVec1, D3DXVECTOR3 *pVec2, FLOAT fRadius);

引数:pVec1:当たり判定用の線分(先端)
pVec2:当たり判定用の線分(末端)
fRadius:線分の太さ(半径)。
返値: 地形との衝突があれば true なければ false。

このメッシュと線分との当たり判定を行う。
高速で移動する物体と地形との当たり判定に利用する事を想定。

弾丸などの移動時に移動先の座標をpVec1 に 移動前の座標をpVec2 に
格納して呼び出すと1フレームでキャラクターを飛び越すような動きが
あっても当たり判定が可能。ただし、本メソッドは当たり・ハズレの判定のみを 行う仕様


BOOL CheckCollisionWithSegment(D3DXVECTOR3 *pVec1, D3DXVECTOR3 *pVec2, FLOAT fErrorCapacity, D3DXVECTOR3 *pVecOut);

引数:pVec1:当たり判定用の線分(先端)
pVec2:当たり判定用の線分(末端)
fErrorCapacity:ポリゴンエッジでの許容誤差。
pVecOut:交差位置を返す為の変数。
返値: 地形との衝突があれば true なければ false。

このメッシュと線分との当たり判定を行う。
弾丸などの移動時に移動先の座標をpVec1 に 移動前の座標をpVec2 に
格納して呼び出すと1フレームでキャラクターを飛び越すような動きが
あっても当たり判定が可能。線分とポリゴンモデルとの交差位置をpVecOut に返す。
ポリゴンの境界で抜けてしまう事を避けるため、ポリゴンをfErrorCapacity の分だけ広げて 判定できるようにしている。これは広げる大きさの自乗で指定する。


void SetWorldMatrix(D3DXMATRIX *pMat)

引数: pMat このモデルを表示するのに使用するワールド行列。
返値: なし。

このモデルを表示する際に使用するワールド行列を指定する。


static FLOAT CalcDistanceSegmentToSegment(D3DXVECTOR3 *pveca0, D3DXVECTOR3*pveca1, D3DXVECTOR3 *pveca, D3DXVECTOR3 *pvecb0, D3DXVECTOR3 *pvecb1, D3DXVECTOR3 *pvecb)

引数:pveca0:当たり判定用の線分1(先端)
pveca1:当たり判定用の線分1(末端)
pveca :当たり判定用の線分1の最短距離算出点
pvecb0:当たり判定用の線分2(先端)
pvecb1:当たり判定用の線分2(末端)
pvecb :当たり判定用の線分2の最短距離算出点
返値: 2線分間の最短距離

二つの線分を指定すると、線分間の距離が最短となる点での最短距離を返す。 また最短となった点も返す。


D3DQuickLib のTOPページへ。