projekt.thermobjekt@roman.Vogl

April 30, 2006

kollisionserkennung in OpenGL

Filed under: 3D-Objekt/OpenGL, Softwaredesign, Uncategorized — roman @ 1:19 pm

Die “Bounding Box”-Methode

Kurz zusammengefasst: “Bounding Box”-Kollision ist die einfachste Kollisionsmethode, bei denen Rechtecke (die sog. “Bounding Boxes” - OBBs) die Umrisse von Objekten bilden. Wenn sich diese Rechtecke überlappen, dann findet eine Kollision statt. Ist rasend schnell, aber ungenau. Daher sollte man die “Bounding Box”-Routine behalten, um schnell herrauszufinden, ob zwei Objekte nicht oder möglicherweise kollidiert sind. Wenn die “Bounding Boxes” sich nicht überlappen, kann man gleich aufhüren, denn in diesem Fall gibt es sicherlich KEINE Kollision. überlappen sich aber die “Bounding Boxes”, so kann es möglicherweise eine Kollision geben, und diese genauer Berechnen (-> Kollisionsbaum).
Weiters gliedert sich die Kollisionserkennung in zwei wichtige Fragestellungen:
-Wann tritt die Kollision auf?
-Wo genau tritt Kollision auf?
Da die Simulation zeitlich diskret abläuft, kann es passieren, dass sich ein Objekt zunächst in einer gültigen und im
nächsten Zeitschritt bereits in einer ungültigen Konfiguration befindet (Objekte tauchen räumlich ineinander ein). Grund
für diese Situation ist die fehlende Behandlung des Kontaktes. Diese Behandlung muss möglichst genau dann stattfinden,
wenn eine Berührung vorliegt. Weiterhin ist es notwendig die genauen Stellen zu kennen, an denen diese Berührung stattfindet, wie die Oberflächennormale an diesen Stellen aussieht und welche Geschwindigkeiten dort vorliegen, um einen entsprechenden Stoss zwischen den Objekten zu berechnen.
Da die Oberflächen der Kollisionsobjekte durch sehr viele Dreiecke beschrieben sind, ist es in Echtzeit nicht mehr möglich
einfach jedes Dreieck des einen Kollisionspartners mit jedem Dreieck des anderen Kollisionspartners auf Schnitt zu
Überprüfen. Da kommen sogenannte Kollisionsbäume ins Spiel. Das sind räumliche Datenstrukturen, die eine effiziente Überprüfung der Dreiecke ermöglichen. Das Grundprinzip von Kollisionsbäume ist die hierachische Einteilung der Dreiecke in einen Baum aus Hüllvolumen. Der Wurzelknoten stellt ein Hüllvolumen um das gesamte Objekt dar (alle Dreiecke). Danach wird die Menge der Dreiecke entlang der Hauptausdehnung des Hüllvolumens in zwei Teilmengen zerlegt, die wiederum in eine Hüllvolumen gelegt werden. Diese bilden die Kindsknoten. Den Abschluss bilden dann die einzelnen Dreiecke als Blätter des Baumes.
(bild von University of Freiburg - Institute of Computer Science - Computer Graphics Laboratory)
boundingbox-tree
kann dann effizient anhand des Baumes durchgeführt werden, indem bei dem Wurzelkonten begonnen und dann rekursiv durch den Baum traversiert wird. Findet an einem Knotenpaar keine Überlappung statt, so fallen sofort alle Kindsknoten aus dem Test.
Open GL hat selbst keine einfache Möglichkeit für Kollisionserkennung und simulieren von Physikalischen Ereignissen in 3D. Ich bin gerade auf der suche nach einer geeigneten freien Libary wie z.B die OPCODE-library (collision detection library).
www.codercorner.com/Opcode.htm

Leave a Reply

Security Code: