トップページ > 記事閲覧
DXライブラリのMV1CollCheck_...関数について
名前:ゆゆ 日時: 2016/11/30 19:52

※追加していた質問1つ目です この間質問致しました、 MV1CollCheck_Line MV1CollCheck_Sphere の関数についてなのですが、 ローポリゴンのオブジェクトを作成し、それで衝突判定をするようにしました。 しかし、規模が大きくなると、重くなってきました。(60FPS⇒50FPS) もっと大きくなると、もっと重くなるかもしれません。 (※規模が大きくなったから、重くなったのかどうかは定かではありませんが...) そこでなのですが、ポリゴンとの距離(2乗)などを設定して、特定の距離以内のポリゴンのみ衝突判定を行う、 などということはできませんでしょうか?
メンテ

Page: 1 |

Re: DXライブラリMV1CollCheck_...関数について ( No.1 )
名前:管理人 日時:2016/11/30 00:35

> そこでなのですが、ポリゴンとの距離(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 などを呼ばない )など )
メンテ
Re: DXライブラリMV1CollCheck_...関数について ( No.2 )
名前:ゆゆ (解決) 日時:2016/11/30 07:25

>MV1CollCheck_Line などの関数の内部では既に... そうだったのですね!よく理解していませんでした.... >それでも重くなってしまう場合は... 分かりました!試してみます。 素早いご回答ありがとうございました!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存