Beste / Effiziente Methode zur Implementierung einer 3D-Kollision

16

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 seiner aktuellen Zelle (n) betrachtet. 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.

Jean-Philippe Leclerc
quelle

Antworten:

11

Sie benötigen einen guten Algorithmus für die Raumaufteilung, der in 3D häufig als Oktree verwendet wird .

Danach können Sie Modelle usw. mit Begrenzungskugeln umgeben, in die sie genau passen, da eine Kollision zwischen Begrenzungskugeln sehr einfach zu berechnen ist. Wenn 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 verwenden, um Kollisionen zwischen zwei komplexen Objekten zu berechnen.

Siehe dieses Bild: mehrere begrenzende Kugeln

Roy T.
quelle
12

Letztendlich denke ich, dass die Antwort auf Ihre Frage von den Anforderungen Ihrer speziellen Anwendung abhängt, da es keine einheitliche Lösung gibt. Obwohl es im Internet eine Reihe anständiger Ressourcen gibt, sparen Sie viel Zeit und Frustration, wenn Sie sich die Echtzeit-Kollisionserkennung von Christer Ericson zunutze machen , die beispielsweise eine Vielzahl von Techniken und Algorithmen ausführlich beschreibt C ++ Code.

Es half mir, kleine Schritte zu unternehmen, bevor ich versuchte, ein großartiges System aufzubauen. Schreiben einer Funktion, um zu bestimmen, ob ein Punkt in einer Ebene liegt, ob ein Punkt in einem Dreieck liegt, ob ein Strahl in einem Dreieck liegt usw. Fahren Sie dann mit statischen Tests verschiedener konvexer Körper fort: AABB vs. Triangle usw. Mit Zeit Dinge, die auf den ersten Blick undurchdringlich schienen (verzeihen Sie das Wortspiel), wurden weniger entmutigend. Hier ist eine Auflistung einer guten Anzahl von Tests mit Beispielcode:

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

In der Zwischenzeit, da ich weiß, dass nicht jeder nach Belieben 70-80 $ für ein Buch ausgeben kann, sind hier einige Begriffe, die Sie vielleicht prüfen möchten:

  • Raumaufteilung, Octrees, Quadtrees, BSP-Bäume
  • BIH Bäume
  • Bounding-Volumes und Bounding-Volume-Hierarchien
  • Diskrete oder kontinuierliche Kollisionserkennung
  • Theorem der Trennachse
  • GJK-Algorithmus
user_123abc
quelle