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?


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.


1

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.