Beste / effizienteste Möglichkeit, eine 3D-Kollision zu implementieren

Ich habe bereits ein 2D-basiertes Kollisionssystem für ein vorheriges Spiel programmiert. Es war mein erstes Kollisionssystem und es war hässlich. Ich suchte nach einer Kollision zwischen Objekten, indem ich alle Objekte mit allen Objekten überprüfte. Ich habe bereits von einem Rastersystem mit Zellen gehört, bei dem ein Objekt nur die Kollision mit anderen Objekten aus seinen aktuellen Zellen sieht. Ist es wirklich eine gute Möglichkeit, die Kollision zu überprüfen?

Ich hätte gerne eine gute Technik, um alle meine Gegenstände in einer 3D-Welt zu durchlaufen.

Antwort

Sie benötigen einen guten Algorithmus zur Speicherplatzaufteilung. In 3D werden häufig Octrees verwendet.

Danach können Sie Modelle usw. mit Begrenzungskugeln umgeben, in die sie gut passen, da eine Kollision zwischen Begrenzungskugeln sehr einfach zu berechnen ist. Nachdem Sie wissen, dass zwei Begrenzungskugeln kollidieren, können Sie entweder die Begrenzungskugeln iterativ verkleinern und Begrenzungskugeln hinzufügen, um das Objekt in ihnen zu halten, oder einen anderen intelligenten Algorithmus zur Berechnung von Kollisionen zwischen zwei komplexen Objekten.

Siehe Dieses Bild: mehrere Begrenzungskugeln

Antwort

Letztendlich denke ich die Antwort Ihre Frage hängt von den Anforderungen Ihrer speziellen Anwendung ab, da es keine einheitliche Lösung gibt. Obwohl es im Web eine Reihe anständiger Ressourcen gibt, sparen Sie sich viel Zeit und Geld Frustration durch Aufgreifen von Christer Ericsons Echtzeit-Kollisionserkennung , die eine Vielzahl von Techniken und Algorithmen mit Beispiel-C ++ – Code ausführlich beschreibt.

Es hat mir geholfen, kleine Schritte zu unternehmen, bevor ich versuchte, ein großartiges System aufzubauen. Schreiben Sie eine Funktion, um festzustellen, ob sich ein Punkt in einer Ebene befindet n wenn sich ein Punkt in einem Dreieck befindet, wenn sich ein Strahl in einem Dreieck befindet usw. Dann werden statische Tests verschiedener konvexer Körper durchgeführt: AABB vs. Dreieck usw. Mit der Zeit wurden Dinge, die undurchdringlich schienen (verzeihen Sie das Wortspiel), zunächst weniger entmutigend. Hier ist eine Auflistung einer guten Anzahl von Tests mit Beispielcode:

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

Da ich weiß, dass nicht jeder nach Belieben 70-80 $ für ein Buch ausgeben kann, sollten Sie sich folgende Begriffe ansehen:

  • Räumliche Partitionierung, Octrees, Quadtrees, BSP-Bäume
  • BIH-Bäume
  • Bounding Volumes und Bounding Volume Hierarchies
  • Diskrete vs. kontinuierliche Kollisionserkennung
  • Trennachsensatz
  • GJK-Algorithmus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.