MV1SetupCollInfo

コリジョン情報を構築する

MV1SetupCollInfo MHandle

int MHandle : モデルのハンドル
int FrameIndex : コリジョンの情報を構築するフレームの番号
int XDivNum : コリジョン情報のX軸方向の空間分割数
int YDivNum : コリジョン情報のY軸方向の空間分割数
int ZDivNum : コリジョン情報のZ軸方向の空間分割数

(プラグイン / モジュール : DxLibW)

解説

MHandle のモデルハンドルが示すモデルの指定のフレーム( 若しくはモデル全体 )に含まれるポリゴンとの当たり判定を行うための情報のセットアップを行います。

3Dを扱うゲームでは多くの場合3Dモデルとの当たり判定を行っています。
この MV1SetupCollInfo を含むコリジョン関係関数は、その当たり判定処理の手助けをするものです。

その使い方ですが、コリジョン関係の機能を使用するにはまずこの関数でコリジョン情報として使用したいポリゴンを持つフレームのポリゴンをコリジョン情報として使うための準備をしてやる必要があります。
そのフレームは FrameIndex で指定しますが、ここで FrameIndex を -1 にすることでモデル全体のポリゴンをコリジョン情報として準備することができます。

因みにコリジョン処理は非常に負荷の高い処理ですので、
例えばステージモデルとの当たり判定を行う場合等は描画用のステージモデルをそのまま当たり判定用のモデルとして使うのではなく、
当たり判定用の粗いポリゴンメッシュを収めるフレームを用意して、
そのフレームに対して MV1SetupCollInfo をした方が良いです。
( そしてそのフレームは MV1SetFrameVisible 関数で描画されないようにしておきます )

セットアップ時に指定する XDivNum, YDivNum, ZDivNum ですが、
コリジョン処理の仕組みとして、
あるコリジョン処理をする際にコリジョン用のフレーム内に存在するすべてのポリゴンと接触判定をすると大変な処理負荷になってしまいますので、
コリジョン用のポリゴンはまずポリゴンが存在する空間を格子状に区切ってどの枠にどのポリゴンが存在するかを整理して、
コリジョン処理を行いたい領域の周辺に存在するポリゴンとだけ接触判定をするようにして、
処理負荷があまり大きくならないようにします。

分割数の最適値ですが、
一つの格子が、コリジョン処理を行うオブジェクトの大きさとコリジョン用ポリゴンの平均的な大きさを比較して、
大きい方と同じくらいになる分割数が良いです。
検索対象となるポリゴンが多くなるのは問題ですが、検索対象となる格子の数が多すぎるのもまた問題ですので・・・
( 例えば人型キャラクターが登場するステージの分割数でしたら、
人型キャラクターのモデルとコリジョン用ポリゴンの平均的な大きさを比較して、
人型キャラクターモデルの方が大きい場合は格子一つのサイズが人型キャラクターと同じ位の大きさになる分割数、
コリジョン用ポリゴンの平均的な大きさのほうが大きい場合は格子一つのサイズがコリジョン用ポリゴンの平均的な大きさと同じくらいの大きさになる分割数が最適となります )

ちなみにコリジョン情報の構築は負荷の高い処理ですので、
コリジョン情報の更新は MV1RefreshCollInfo 関数を使用して明示的に行う必要があります。

動かないモデルをコリジョンとして使用する場合は一度この関数でコリジョン情報をセットアップした後は何もする必要はありませんが、
動くモデルをコリジョンとして使用する場合は MV1RefreshCollInfo を呼ばないとコリジョン情報の形状が最後に更新したときの状態のままとなってしまいますので注意してください。

戻り値:
  0:成功

情報

プラグイン / モジュールDxLibW
バージョン3.24f
作成日2026/04/12
著作者DxLib: Takumi Yamada / HSP binding: IronHSP Project
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib 3Dモデル
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs