3Dコリジョンを実装するための最良/効率的な方法


16

以前のゲーム用に2Dベースの衝突システムをすでにプログラミングしました。それは私の最初の衝突システムであり、wasいものでした。すべてのオブジェクトとすべてのオブジェクトをチェックして、オブジェクト間の衝突を探していました。オブジェクトが現在のセルの他のオブジェクトとの衝突のみを見るようなセルを備えたグリッドシステムについては、すでに聞いたことがあります。衝突をチェックするのに本当に良い方法ですか?

3Dの世界ですべてのアイテムをループするための優れたテクニックが必要です。

回答:


11

3Dで一般的に使用されるoctreesは、適切な空間分割アルゴリズムが必要になります。

その後、境界球間の衝突は計算が非常に簡単であるため、モデルなどを境界球できれいに収めることができます。2つの境界球が衝突することがわかった後、境界球を繰り返し小さくして、境界球を追加してオブジェクトをカバーするか、2つの複雑なオブジェクト間の衝突を計算する別のスマートアルゴリズムを使用できます。

この画像をご覧ください: 複数の境界球


12

最終的には、万能ソリューションはないため、質問に対する答えは特定のアプリケーションのニーズに依存すると思います。まともなリソースの数は、ウェブ上でありますが、あなたはクリステルエリクソンのピックアップして自分自身の時間と欲求不満の多くを救うリアルタイム衝突検出例で、非常に詳細に技術とアルゴリズムのさまざまなレイアウト、 C ++コード。

壮大なシステムを構築しようとする前に、赤ちゃんの一歩を踏み出すのに役立ちました。点が平面にあるかどうか、次に点が三角形にあるか、光線が三角形にあるかなどを判別する関数を作成します。次に、さまざまな凸面ソリッドの静的テストに進みます:AABB対三角形など。初めは突き通せないように見えた(しゃれを許す)ことは、それほど困難ではなくなりました。以下に、多数のテストとサンプルコードのリストを示します。

http://www.realtimerendering.com/intersections.html

とりあえず、だれもが自由に本を70〜80ドルで分岐できるわけではないことを知っているので、次の用語を検討してください。

  • 空間分割、八分木、四分木、BSPツリー
  • BIHツリー
  • 境界ボリュームと境界ボリューム階層
  • 離散衝突検出と連続衝突検出
  • 軸定理の分離
  • GJKアルゴリズム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.