> そこでなのですが、ポリゴンとの距離(2乗)などを設定して、特定の距離以内のポリゴンのみ衝突判定を行う、
> などということはできませんでしょうか?
MV1CollCheck_Line などの関数の内部では既にそのようなことをしています
MV1SetupCollInfo は以下のように定義されていまして
// コリジョン情報を構築する
int MV1SetupCollInfo( int MHandle, int FrameIndex = -1 , int XDivNum = 32 , int YDivNum = 8 , int ZDivNum = 32 ) ;
まず当たり判定用のモデル( ステージモデルなど )を XDivNum, YDivNum, ZDivNum で指定した数に
空間分割して、各空間内に存在するポリゴンを記憶しておきます
そして MV1CollCheck_Line や MV1CollCheck_Sphere が実行された際は分割した空間のどの箇所に
触れているかを最初に判定して、触れている空間内に存在するポリゴンとのみ当たり判定を行っています
XDivNum や ZDivNum の数値が少なすぎると分割される空間の数が少なく、各空間に属するポリゴンの
数が多くなってしまうので( 当たり判定を行うポリゴンが多くなってしまうので )重くなりますが、
逆に XDivNum や ZDivNum の値を大きくしすぎると分割数が多くなりすぎて
「分割した空間のどの箇所に触れているか」の判定が重くなってしまうので、
XDivNum や ZDivNum の値はステージモデルのサイズやゲームの内容に応じて適切な値を指定する必要があります
デフォルト値である XDivNum = 32, YDivNum = 8, ZDivNum = 32 はどのようなケースでもそれなりの
処理負荷で動作すると思いますが、もしステージモデルが非常に大きく、32分割では分割空間1つに
属するポリゴン数が多くなり過ぎてしまう場合は XDivNum や YDivNum や ZDivNum の値を大きくすると
処理が軽くなると思います
それでも重くなってしまう場合は、ステージモデル自体を複数のモデル、又は複数のフレームの区切りに分けて、
ゲームのシステム上100%近くに存在しないステージモデルとはそもそも当たり判定の処理を行わない、
といった処理を実装することでより軽くすることができます
( 例えばステージを9つの格子状の区域に分けて( 当たり判定用のモデルも9つ用意して )、キャラクターの
存在する区域以外のステージモデルとはそもそも当たり判定の処理を行わない( MV1CollCheck_Line などを呼ばない )など )