前のゲーム用に2Dベースのコリジョンシステムをすでにプログラムしました。これは私の最初のコリジョンシステムであり、醜いです。すべてのオブジェクトとすべてのオブジェクトをチェックして、オブジェクト間の衝突を探していました。オブジェクトが現在のセルからの他のオブジェクトとの衝突のみを確認するセルを備えたグリッドシステムについてはすでに聞いたことがあります。衝突をチェックするのは本当に良い方法ですか?
3Dの世界ですべてのアイテムをループするための優れたテクニックが欲しいです。
回答
3Dで一般的に使用される八分木は優れたスペースパーティションアルゴリズムが必要になります。
その後、バウンディングスフィア間の衝突は非常に簡単に計算できるため、モデルなどをバウンディングスフィアで囲むことができます。 2つのバウンディングスフィアが衝突することがわかったら、バウンディングスフィアを繰り返し小さくしてバウンディングスフィアを追加し、オブジェクトをカバーしたままにするか、2つの複雑なオブジェクト間の衝突を計算する別のスマートアルゴリズムを使用できます。
この画像:
回答
最終的には答えだと思います「万能のソリューションはないので、質問は特定のアプリケーションのニーズに依存します。Webには適切なリソースが多数ありますが、時間を大幅に節約し、 ChristerEricsonのリアルタイム衝突検出を手に取ったことによるフラストレーション。これは、C ++コードなど、さまざまな手法とアルゴリズムを詳細に示しています。
壮大なシステムを構築しようとする前に、赤ちゃんの一歩を踏み出すのに役立ちました。点が平面内にあるかどうかを判断する関数を作成すると、 n点が三角形の場合、光線が三角形の場合など。次に、さまざまな凸面ソリッドの静的テストに移ります。AABBと三角形など。時間の経過とともに、最初は侵入できない(しゃれを許す)ように見えたものがそれほど気が遠くなることはありません。多数のテストのリストをサンプルコードとともに示します。
http://www.realtimerendering.com/intersections.html
それまでの間、誰もが自由に1冊の本を70〜80ドルでフォークできるわけではないことを知っているので、調べておくとよい用語をいくつか示します。
- 空間分割、八分木、四分木、BSPツリー
- BIHツリー
- バウンディングボリュームとバウンディングボリューム階層
- 離散衝突検出と連続衝突検出
- 分離軸定理
- GJKアルゴリズム