DXライブラリ 3D空間での衝突判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
ptolemy
記事: 258
登録日時: 12年前

DXライブラリ 3D空間での衝突判定

#1

投稿記事 by ptolemy » 11年前

今、FPSのゲームを作ってるんですが、弾と敵のあたり判定をするために
敵をカプセルで囲んでDXライブラリのMV1CollCheck_Capsule関数でモデルと衝突判定を
したいと思っています。
でも、この関数を使うためには、MV1SetupCollInfo関数でコリジョン情報を構築しなくては、ならないですが、
この関数について、いまいちわからないことがあって質問しました。

分からない点は、
DXライブラリのリファレンスページに書いているMV1SetupCollInfo関数の引数で
int XDivNum : コリジョン情報のX軸方向の空間分割数
int YDivNum : コリジョン情報のY軸方向の空間分割数
int ZDivNum : コリジョン情報のZ軸方向の空間分割数
というものがあるのですが、よく理解できません。

少し、調べてみたんですが、いまいちピンときません。
これについて、少し解説をしてほしいです。

衝突判定するのは、
弾とカプセル(1:20)
人とカプセル(1:1)
です。()内は、大体のモデルの大きさの比です。

因みにリファレンスのページは、こちらです。
DXライブラリ置き場 リファレンスページ MV1SetupCollInfo関数
初歩的な質問かもしれませんが、ご回答よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: DXライブラリ 3D空間での衝突判定

#2

投稿記事 by softya(ソフト屋) » 11年前

この手の質問はご本家の掲示板にいくつかあったと思いましたが調べられましたか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: DXライブラリ 3D空間での衝突判定

#3

投稿記事 by ptolemy » 11年前

僕が調べた感じでは、モデルとカプセルのあたり判定のサンプル等は、掲示板にありました。
しかし、リファレンスの解説の[そのXYZ空間分割数の 一つの格子が、コリジョン処理を行うオブジェクトの大きさとコリジョン用ポリゴンの平均的な大きさを比較して、 大きい方と同じくらいになる]ということについては、みなかったので質問しました。

僕の今のところのイメージとして、立方体を同じ大きさのブロックに分けて、そのブロックの一つが
モデルの大きさと同じ大きさになるように分割するみたいにイメージしてるのですがこれであってますか?

関数の使い方やどうしたら衝突判定が出来るかという質問というより
[そのXYZ空間分割数の 一つの格子が、コリジョン処理を行うオブジェクトの大きさとコリジョン用ポリゴンの平均的な大きさを比較して、 大きい方と同じくらいになる]
という解説が理解出来ないという質問です。

もしかしたら本家の掲示板の方にあって、ただ検索したワードが引っ掛かってないだけかもしれません。
また、上手く質問を伝えられなくてすみません。

ISLe()

Re: DXライブラリ 3D空間での衝突判定

#4

投稿記事 by ISLe() » 11年前

例えば、人間と、3階建てのビルのモデルで当たり判定するとしたら、3階建てのビルは縦に3分割するのが良い、というふうなことだと思います。
人間が1階にいるのに、2階や3階と当たり判定する必要はないから。

複雑なモデルになれば、さらに絞り込んで一回の判定に使うポリゴン数を絞る必要があるでしょう。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: DXライブラリ 3D空間での衝突判定

#5

投稿記事 by ptolemy » 11年前

すみません。理解力が足りない僕が悪いのですが、まだピンときません。

人と建物だと判定しなくていい部分が2/3出来るので3というのはわかったのですが、

その衝突を受ける側が衝突する方の大きさと同じくなるように
分割という理解でよろしいのでしょうか?

弾と人場合 人が受ける側で 弾が衝突する方なら 
人を弾と同じ大きさになるように区切るということですか?

少し整理できてない部分があるので宜しくお願いします。

ISLe()

Re: DXライブラリ 3D空間での衝突判定

#6

投稿記事 by ISLe() » 11年前

分割するのは、一度に判定するポリゴン数が多すぎると当たり判定の負荷が大きくなって処理落ちが起こるので、それを避けるためです。
実際にポリゴン数と処理負荷を比べてみて、分割が必要だと思ったら分割すれば良いです。

分割したひとつのエリアに、もういっぽうの全体が収まる条件では、比較対象のエリアは1,2,4,8個のいずれかになります。
細かく分割し過ぎると、逆に効率が悪くなることもあります。

分割はフィールドに用いるのが一般的かと思います。
弾と人間なら、人間に当たり判定用の簡易モデルを用意して、分割せずに当たり判定するほうが良いのではないでしょうか。

アバター
ptolemy
記事: 258
登録日時: 12年前

Re: DXライブラリ 3D空間での衝突判定

#7

投稿記事 by ptolemy » 11年前

1,1,1(分割なし)と設定したら判定してくれました。
でもあたり場所によっては判定してくれないときもあったので
弾判定用の球体を少し大きくしたら
大体8割くらいの確率で判定されるようになりました。
2割くらいあたりどころによって判定してくれないというのは許容範囲なので大丈夫です。

今回は、分かりやすくご説明いただいてありがとうございました。
ステージとモデルとの衝突範囲などにもどんどん応用させてもらいます。
本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る