3D空間で衝突検出を実行するにはどうすればよいですか?


8

要約すると、今学期の最初から完全な3Dゲームを書く必要があります。今までのところ、私は自分の暇な時間に2Dゲームだけをプログラミングしていました。移行は難しくなく、ゲームはシンプルです。私の唯一の問題は、衝突検出です。私が見つけることができた唯一のものは、AABB、境界球、またはさまざまな物理エンジンの推奨事項でした。洞窟システム内を自由に移動する潜水艦をプログラムする必要があります。物理ライブラリを使用できないので、上記のいずれも私の問題を解決しません。

これまでは、衝突検出にSATを使用していました。同様の優れたアルゴリズムはありますが、3D衝突用に作られていますか?私は八分木や他の最適化について話しているのではなく、3Dポリゴンの1つのセットと別の3Dポリゴンのセットの直接衝突検出について話している。SATを2回使用して、メッシュを上と横から投影することを考えましたが、3D空間を凸形状に分割するのも難しいようです。また、それはoctreesを使ったとしても、あまりにも多くの計算のように思えます。

専門家はそれをどのように行うのですか?誰かがいくつかの光を当てることができますか?


1
3D空間を凸型のジオメトリに分割するのはそれほど難しくありません。たとえば、BSPツリー(バイナリスペース分割)を使用します。
Maik Semder

回答:


5

GJKは凸形状で機能します。SATを使用することもできます。必要な情報をすでに見つけました。ここではいくつかの例を示します。

まとめると、衝突メッシュを形成する複数の三角形に対して球または楕円体の衝突チェックを実行します。それはそれがどのように行われたかのようであり、誰かが私に別のことを言うことができない限り、それは私が求めていた情報でした。


1

GJKについてここで3Dで書いたね。SATがGJKより遅い http://in2gpu.com/2014/05/18/gjk-algorithm-3d/


リンクのみの回答は、移動するとすぐに無効になり、うまく検索されないため、かなり貧弱になる傾向があります。この回答を拡張して、提示しようとしているソリューションの詳細に関する情報を含めることを検討してください。

ああ、大丈夫だと思った
セルジュクレイトウ'30年

0

まあ、それが非常に要求が厳しい最先端の技術ではない場合は、ギルバートの実装から始めることができます衝突検出アルゴリズムをます。コリジョンジオメトリがそれほど詳細ではない場合は、かなり高速にすることができ、高速になります(詳細にする必要はありません)。これは、一部のシミュレーターでもうまくいく方法です。より複雑なものは、おそらく、より多くの努力を考慮に入れます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.