モデルとマップの当たり判定
Posted: 2009年11月23日(月) 17:07
モデルとマップの当たり判定を行いたいと思っています。
以下に載せるPlayerMove関数について説明します。
ポリゴン同士が接触した場合は「Hit」と表示され接触しているポリゴンの数が表示され、
接触しているポリゴンが水色で表示されるはずなのですが、
HitPolyDim.HitNumが常にゼロのまま変化しません。
モデルとマップが接触した場合は、HitPolyDim.HitNumが1以上にならなければなりません。
なぜ、接触しても表示が変わらないのでしょうか?
MV1CollCheck_Sphereを使う前にコリジョン情報の構築が必要なので、
その部分は別にある初期化用関数の中で次のようにしています。
この関数で床のモデルとプレイヤーのモデルの接触判定をしたいのですが、
段階的に作って行こうと思い、現時点ではまず最初に「周りに障害物が無いか?」を調べるコードを書いています。
これが出来たら次は床があるのか無いのか。無ければ落下処理、あれば歩行するなどなど考えています。
開発環境はVistaでBCC、DXライブラリを使用しています。
ここが違うから思ってるように動かないんだ等、指摘ありましたらお教えください(_ _)
以下に載せるPlayerMove関数について説明します。
ポリゴン同士が接触した場合は「Hit」と表示され接触しているポリゴンの数が表示され、
接触しているポリゴンが水色で表示されるはずなのですが、
HitPolyDim.HitNumが常にゼロのまま変化しません。
モデルとマップが接触した場合は、HitPolyDim.HitNumが1以上にならなければなりません。
なぜ、接触しても表示が変わらないのでしょうか?
MV1CollCheck_Sphereを使う前にコリジョン情報の構築が必要なので、
その部分は別にある初期化用関数の中で次のようにしています。
Floor.ModelHandle = MV1LoadModel( "floor.mqo" ) ; if( MV1SetupCollInfo( Floor.ModelHandle , -1 , 8 , 8 , 8 ) ) return -1 ;次の部分が実際の当たり判定部分です。
この関数で床のモデルとプレイヤーのモデルの接触判定をしたいのですが、
段階的に作って行こうと思い、現時点ではまず最初に「周りに障害物が無いか?」を調べるコードを書いています。
これが出来たら次は床があるのか無いのか。無ければ落下処理、あれば歩行するなどなど考えています。
開発環境はVistaでBCC、DXライブラリを使用しています。
ここが違うから思ってるように動かないんだ等、指摘ありましたらお教えください(_ _)
// プレイヤーの移動処理(あたり判定?) int PlayerMove( void ) { int i ; MV1_COLL_RESULT_POLY_DIM HitPolyDim ; // どこかのポリゴンと接触しているか調べる HitPolyDim = MV1CollCheck_Sphere( Floor.ModelHandle , -1 , Player1.Position , 100.0f ) ; DrawSphere3D( Player1.Position , 100.0f, 8, GetColor( 255,0,0 ), GetColor( 0,0,0 ), FALSE ) ; // デバッグ用の当たり判定検知範囲を表示 // 接触している場合 if( HitPolyDim.HitNum > 0 ) { // 当たったポリゴンの数だけ繰り返し for( i = 0 ; i < HitPolyDim.HitNum ; i ++ ) { // 当たったポリゴンを描画 DrawTriangle3D( HitPolyDim.Dim[ i ].Position[ 0 ], HitPolyDim.Dim[ i ].Position[ 1 ], HitPolyDim.Dim[ i ].Position[ 2 ], GetColor( 0,255,255 ), TRUE ) ; } } // 接触しているポリゴンの数を表示 DrawFormatString( 0 , 55 , GetColor( 255 , 255 , 255 ) , "Hit: %d" , HitPolyDim.HitNum ) ; // 画面の更新 ScreenFlip() ; // 当たり判定情報の後始末 MV1CollResultPolyDimTerminate( HitPolyDim ) ; return 0 ; }