LPD3DXMESHの変数から境界球(半径)を算出する方法を紹介します。
D3DXComputeBoundingSphere()という関数を用います。
MSDNもどうぞ。
// メッシュの境界球の半径を返す。
float GetRadiusMesh( LPD3DXMESH _pMesh )
{
float rad;
VOID* l_pFirst = NULL;
if(FAILED( _pMesh->LockVertexBuffer(0, &l_pFirst) ))
{
_pMesh->UnlockVertexBuffer();
return ER_READ;
}
D3DXVECTOR3 vCenter;
D3DXComputeBoundingSphere(
static_cast<D3DXVECTOR3 *>(l_pFirst),
_pMesh->GetNumVertices(),
D3DXGetFVFVertexSize(_pMesh->GetFVF()),
&vCenter, // 中心座標
&rad // 半径
);
m_pMesh->UnlockVertexBuffer();
return rad;
}
中心座標について
モデル作成時に中心にモデルが来るようにしていればいいんだけど、
ちょっと上の位置に作られていたりしたら
中心座標のYの値が大きくなります。
テストしていないので、うまくいかなかったら
巷のサイトを参考にして欲しいです。
byリーダ和田
[0回]
PR
COMMENT