平面の取得方法が悪いのかキャラが床に埋まってしまいます。
ソースを載せますので修正点を教えてください。
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(); }