多くの小さな三角形で作られたオブジェクトの衝突検出をどのように実行しますか?


13

どんな形状でも小さな三角形で作成(または近似)できることを理解しています。2つの小さな三角形で任意の長方形を作成できます。多くの薄い「ピザのスライス」三角形によって、任意の円を作成できます。これはどのように衝突検出に変換されますか?

頂点を使用して長方形の重なりを計算する方法を理解しています。中心、半径、距離を使用して円の重なりを計算する方法を理解しています。

しかし、小さな三角形で作られた形状の衝突検出はどのように行いますか?仕様ではなく、一般的な概念...

回答:


26

しかし、小さな三角形で作られた形状の衝突検出はどのように行いますか?

それをしないことによって。

任意の三角形のコレクション(または、さらに悪いことに、任意の三角形の2つのコレクション間)に対する衝突検出は、法外に高価です。

代わりに、通常、コレクションの検出を階層形式で実行します。最初に、基礎となるオブジェクトに(不十分に)近似する非常に粗雑で単純な形状(ボックスや球体)から始めます。

これにより、通常発生する可能性のある衝突の大部分を「発生しない」として迅速に拒否できます。そのような粗いチェックに合格した場合、それは潜在的な実際の衝突を示し、基礎となる形状のより詳細な近似(複数のしっかりとフィットしたカプセル形状、または多くの境界ボックスの整列)。

基本的に、衝突検出は粗いテストから始まり、それらのテストに合格すると、より詳細な表現を続けます。ShiroがAlexandreの答えへのコメントで提供したこの画像は、複雑なモデル(人間)が一連のより単純な形状によってどのように表されるかを示しています。

ヒットボックス

個々の三角形レベルで衝突を実際に実行する必要はほとんどありません。通常は、より粗い方法を使用して、テストする潜在的な三角形の非常に小さなセットにドリルダウンしました。その時点で、2つの長方形が重なるかどうかをテストするのと同じように、特定のアルゴリズムを使用してテストを実行します。たとえば、光線が三角形に当たるかどうか、どこに当たるかを判断できます。


ありがとう。はい、実際にゲームを作成している場合は、既存のエンジンを使用するだけです。しかし、事前に作成された衝突検出エンジンに実装されている基本的なアイデアを理解したいだけです。上記の図では、長方形の数学を使用して、男性を構成する数十個の長方形のいずれかに触れているかどうかを確認します。それが基本的なアイデアですか?
JackOfAll

これらは長方形ではなく、方向付けられた境界ボックス(3D)です。でも、はい。レイ(たとえば、弾丸を表す)がプレイヤーと衝突するかどうかをテストする場合、おそらくすべてのキャラクターに対してではなく、キャラクター全体を表す1つの巨大なボックスに対して最初にテストした後、それらのボックスに対してレイをテストしますレンダリングメッシュの三角形)。

アイデアは、上の画像に示されている方向付けられた境界ボックスなど、キャラクターの大まかな近似を使用し、最初にそれをテストしてより安価なヒットテストを実行し、衝突がある場合は下位レベルにドリルダウンできることです必要に応じて、境界ボックスに含まれる個々の三角形をテストします。通常、階層的に使用される複数の異なるBVがあり、外側のBVは精度は低いがテストは最速(球、バウンディングボックス)、より具体的なものへのドリルダウン(k-DOP)、さらにはさらにドリルダウン(三角形) )
キク

4

衝突検出は、ジオメトリ(線、平面、球、ボックス、カプセル、円柱などのプリミティブ)に基づいています。

三角形で作られた形状、たとえば平らでない地形で衝突検出を実行する必要がある場合、メッシュを形成するすべての三角形に対してテストする必要があります。

この点に到達したら、事前に作成した衝突検出エンジンを使用することを強くお勧めします。この種のものは非常に複雑で非常に高速になるためです。


三角形で構成される形状の衝突検出はどのように行いますか?
JackOfAll

@JackOfAllは、彼の返事で、通常はジオメトリ形状を使用することで既に言及しているi.stack.imgur.com/CAhxn.jpg-dimitris93 15
19:42

@JackOfAll回答を編集しました。Shiroが言うように、あなたの環境(ボディ、椅子、車など)にもっと複雑な「アイテム」がある場合、ゲーム開発では、それらは通常一緒に結び付けられたより単純なプリミティブから作られます。衝突の検出はプリミティブシェイプで行われますが、物理シミュレーションは全身で行われます。
ベイランクール

4
私は文字通りゲームを作ろうとしているのではなく、既成の衝突検出エンジンに実装されている基本的なアイデアを理解したいだけです。私が実際にゲームを作っている場合、私は明らかに、車輪を再発明することはないだろうと同意した。
JackOfAll
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.