トップページ > 過去ログ > 記事閲覧
コリジョンの仕様確認
名前:yasi 日時: 2011/08/09 07:10

何時もお世話になっております。 コリジョンについての仕様確認をさせていただきたく質問いたします。 自分は当初、コリジョンに関するリファレンスを読んだ上での解釈としては、 MV1SetupCollInfoが呼ばれない限り、そのモデルにはコリジョンは発生しない物と解釈しておりました。 しかし、下記コードを行った結果、MV1SetupCollInfoを行わなくてもコリジョンは発生している事を確認しました。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle; int Mx, My; VECTOR StartPos, EndPos; MV1_COLL_RESULT_POLY HitPoly; ChangeWindowMode( TRUE ); if ( DxLib_Init() < 0 ) return -1; ModelHandle = MV1LoadModel( "SimpleModel.mqo" ); MV1SetPosition( ModelHandle, VGet( 320.0f, 300.0f, 600.0f ) ); SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen(); MV1DrawModel( ModelHandle ); // マウス座標から線分始点・終点座標取得 GetMousePoint( &Mx, &My ); StartPos = ConvScreenPosToWorldPos( VGet( Mx, My, 0.0f ) ); EndPos = ConvScreenPosToWorldPos( VGet( Mx, My, 1.0f ) ); // 線分当り判定処理 HitPoly = MV1CollCheck_Line( ModelHandle, -1, StartPos, EndPos ); // 情報描画処理 if( HitPoly.HitFlag == 1 ){ DrawString( 0, 0, "Hit", GetColor( 255, 255, 255 ) ); DrawFormatString( 0, 40, GetColor( 255,255,255 ), "Hit Pos %f %f %f", HitPoly.HitPosition.x, HitPoly.HitPosition.y, HitPoly.HitPosition.z ); DrawFormatString( 0, 60, GetColor( 255,255,255 ), "Frame %d", HitPoly.FrameIndex ); DrawFormatString( 0, 80, GetColor( 255,255,255 ), "Material %d", HitPoly.MaterialIndex ); }else{ DrawString( 0, 0, "No Hit", GetColor( 255, 255, 255 ) ); } ScreenFlip(); } DxLib_End(); return 0 ; } 上記のコードはリファレンスのConvScreenPosToWorldPos関数に記載されている サンプルコードに手を加えた物で、MV1SetupCollInfoを呼出していません。 以上の結果から考えられる事は、 1.MV1LoadModelされたモデルはMV1SetupCollInfoを行う、行わないに関わらず、 なんらかのデフォルト値でコリジョン情報を持っている。 2.もしくは、MV1SetupCollInfoを行っていないにも関わらず、 MV1CollCheck_Lineで当り判定処理を行おうとした為、 何らかのデフォルト値をもったコリジョン情報が自動生成された。 仮に1が真である場合、 MV1SetupCollInfoは適切な当り判定を行うための空間分割を設定する為の物であり、 コリジョン情報の有無に関与しない。 このような解釈をしたのですが、合っていますでしょうか? これが仕様通りなのかどうかも含め、何方かお詳しい方がいらっしゃいましたら お答えいただけますよう、よろしくお願いします。 上記テストコードはDxLib 3.05と3.05fで確認を行った物です。

Page: 1 |

Re: コリジョンの仕様確認 ( No.1 )
名前:管理人 日時:2011/08/21 05:02

DXライブラリの仕様としては > 2.もしくは、MV1SetupCollInfoを行っていないにも関わらず、 > MV1CollCheck_Lineで当り判定処理を行おうとした為、 > 何らかのデフォルト値をもったコリジョン情報が自動生成された。 となります コリジョン情報のセットアップには時間が掛かるので事前にセットアップをするための関数は 必要だと考えたのですが、仮にリファレンスの記述を見落として MV1SetupCollInfo を実行せずに MV1CollCheck_Line などの関数を使用されることがあってもエラーにならないようになっていた方が 良いかもとも考えたので、最終的に2の仕様となりました リファレンスでは一応 MV1SetupCollInfo を事前に呼んでおかないと駄目、という記述にしてあります
Re: コリジョンの仕様確認 ( No.2 )
名前:yasi(解決) 日時:2011/08/21 07:06

管理人様、掲示板復旧作業お疲れ様でした。 ご回答ありがとうございます。 実は今回MV1TerminateCollInfoの動作について疑問に思った部分があった為、 その検証をしていたところ、その前提としてMV1SetupCollInfoの部分で今回のような疑問が沸いた為、 質問させて頂きましたが、今回ご回答頂いた内容でどちらも納得がいきました。 この仕様を踏まえた上で設計する形にします。 ありがとうございました。

Page: 1 |