Wie führe ich eine Kollisionserkennung im 3D-Raum durch?

8

Ich muss dieses Semester ein komplettes 3D-Spiel von Grund auf neu schreiben. Bisher habe ich in meiner Freizeit nur 2D-Spiele programmiert, der Übergang scheint nicht schwierig zu sein, das Spiel ist einfach. Das einzige Problem, das ich habe, ist die Kollisionserkennung. Das einzige, was ich finden konnte, war AABB, Grenzkugeln oder Empfehlungen verschiedener Physik-Engines. Ich muss ein U-Boot programmieren, das sich innerhalb eines Höhlensystems frei bewegen kann. AFAIK Ich kann keine Physikbibliotheken verwenden, daher löst keines der oben genannten Probleme mein Problem.

Bisher habe ich SAT für meine Kollisionserkennung verwendet. Gibt es ähnliche, großartige Algorithmen, die jedoch für 3D-Kollisionen entwickelt wurden? Ich spreche nicht von Oktrees oder anderen Optimierungen, sondern von der direkten Kollisionserkennung eines Satzes von 3D-Polygonen mit einem anderen Satz von 3D-Polygonen. Ich habe darüber nachgedacht, SAT zweimal zu verwenden, das Netz von oben und von der Seite zu projizieren, aber dann scheint es so schwierig zu sein, den 3D-Raum in konvexe Formen zu unterteilen. Auch das scheint selbst bei Oktrees viel zu viel Rechenaufwand zu sein.

Wie machen es Profis? Könnte jemand etwas Licht ins Dunkel bringen?

Dreta
quelle
1
Es ist nicht so schwer, den 3D-Raum in konvexe Geometrie zu unterteilen. Zum Beispiel mit einem BSP-Tree (Binary Space Partitioning).
Maik Semder

Antworten:

5

GJK arbeitet an konvexen Formen, ich könnte auch SAT verwenden. Ich habe bereits Informationen gefunden, die ich wollte. Hier sind einige Beispiele:

Zusammenfassend werde ich Kollisionsprüfungen einer Kugel oder eines Elipsoids gegen mehrere Dreiecke durchführen, die ein Kollisionsnetz bilden. So scheint es gemacht zu werden und das waren die Informationen, nach denen ich gefragt habe, es sei denn, jemand kann mir etwas anderes sagen.

Dreta
quelle
1

Hey, ich habe hier über GJK in 3D geschrieben. SAT ist langsamer als GJK http://in2gpu.com/2014/05/18/gjk-algorithm-3d/

Sergiu Craitoiu
quelle
Nur-Link-Antworten sind in der Regel eher schlecht, da sie sofort nach dem Verschieben ungültig werden und nicht gut suchen. Erwägen Sie, diese Antwort um einige Informationen zu den Details der Lösung zu erweitern, die Sie präsentieren möchten.
Oh, ok, ich dachte, es ist in Ordnung
Sergiu Craitoiu
0

Wenn dies nicht sehr anspruchsvoll und auf dem neuesten Stand der Technik ist, können Sie zunächst den Gilbert- Kollisionserkennungsalgorithmus implementieren . Es kann ziemlich schnell gemacht werden und es wird schnell sein, vorausgesetzt, Ihre Kollisionsgeometrie ist nicht so detailliert (und es muss nicht sein!). Auf diese Weise machen sogar einige Simulatoren den Trick. Alles, was aufwändiger ist, wird wahrscheinlich mehr Aufwand in Betracht ziehen.

Teodron
quelle