平面の取得方法が悪いのかキャラが床に埋まってしまいます。
ソースを載せますので修正点を教えてください。
MakePlane( LPCSTR pFileName )
{
LPD3DXMESH p_mesh; //メッシュ
LPMESHTABLE p_m_table; //作業用
/*** 三頂点の座標と平面得る ***/
//メッシュインタフェースを得る
p_m_table = CMesh::GetMeshTable( pFileName );
p_mesh = p_m_table->m_pMesh;
/*** 頂点フォーマットのサイズを得る ***/
UINT fvf_size = D3DXGetFVFVertexSize( p_mesh->GetFVF() );
do{
/*** 頂点バッファをLockする ***/
BYTE* p_vertex = NULL;
if(FAILED( p_mesh->LockVertexBuffer( 0, (LPVOID*)&p_vertex )) ){
/*** エラー ***/
Dialog( "CFieldHitCheck ","Line 66 : 頂点バッファのLockに失敗 " );
break;
}
/*** インデックスバッファLockする ***/
WORD* p_index = NULL; //インデックスバッファポインタ
if(FAILED( p_mesh->LockIndexBuffer(0, (LPVOID*)&p_index )))
{
/*** エラー ***/
Dialog( "CFieldHitCheck", "Line 74 : インデックスバッファのLockに失敗" );
break;
}
/*** メッシ構成しているポリゴンの枚数を得る ***/
INT polygon = p_mesh->GetNumFaces(); //ポリゴンの枚数
/*** すべてのポリゴンから当たり判定用の平面情報を取得する ***/
LPPLANETABLE p_work = m_pPlaneTableList; //作業用
//枚数分ループ
for( INT i = 0; i < polygon; i++ )
{
/* 頂点を取り出す */
for(INT j = 0; j < 3; j++)
{
/* 頂点を得る */ // ↓キャストすることで1度に代入 ↓インデックス * 頂点サイズ(32byte)
p_work->m_Vertex[ j ] = *( D3DXVECTOR3* )(p_vertex + *p_index * fvf_size);
//次のインデックスへ
p_index++;
}
/*** 頂点データから平面を作る ***/
//頂点から法泉を算出
D3DXPlaneFromPoints( &p_work->m_Plane, //格納先
&p_work->m_Vertex[ 0 ], //頂点1
&p_work->m_Vertex[ 1 ], //頂点2
&p_work->m_Vertex[ 2 ]); //頂点2
/*** メモリ確保 ***/
//まだすべてのポリゴンを読み込んでいなければ次のメモリを確保
if(i + 1 < polygon )
{
/* メモリ確保 */
p_work->m_pNext = new PLANETABLE;
p_work = p_work->m_pNext;
}
else
{
/* 終端なのでNULLを設定 */
p_work->m_pNext = NULL;
}
}
}while(0);
/*** インデックスバッファをunlockする ***/
p_mesh->UnlockIndexBuffer();
/*** 頂点バッファをunlockする ***/
p_mesh->UnlockVertexBuffer();
}