Wie funktioniert 3D Kollision / Objekterkennung?
I ' V immer gefragt. In einem Spiel wie GTA wo gibt es 10s von tausenden von Objekten, wie funktioniert das Spiel wissen, sobald Sie sich auf ein Gesundheits-pack?
Kann es nicht vielleicht sein, einen Ereignis-listener für jedes Objekt? Durchlaufen nicht gut, oder? Ich Frage mich nur, wie es tatsächlich zu tun.
InformationsquelleAutor der Frage jmasterx | 2009-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine eine Antwort auf diese doch große Welten sind oft Raum-partitioniert mit etwas entlang der Linien von einem quadtree oder kd-Baum das bringt mal Suchfunktion für die Suche nach nächsten Nachbarn unten die lineare Zeit (gebrochene macht, oder im schlimmsten Fall O( N^(2/3) ) für ein 3D-Spiel). Diese Methoden werden oft als BSP für binary space partitioning.
Bezug auf Kollisionserkennung, jedes Objekt hat in der Regel einen bounding volume mesh (Satz von Polygonen bilden eine konvexe Hülle, die mit ihm verbunden ist. Diese stark vereinfachte meshes (manchmal nur ein cube) nicht gezogen, aber sind verwendet in der Erkennung von Kollisionen. Die elementarste Methode ist das erstellen einer Ebene aus, die senkrecht zu der Verbindungslinie der Mittelpunkte von jedem Objekt mit der Ebene schneidet die Linie in den Mittelpunkt. Wenn eine Objekt-bounding-Volumen hat Punkte auf beiden Seiten dieser Ebene, es ist eine Kollision (Sie brauchen nur zu prüfen, eine der beiden bounding volumes gegen die Fläche). Eine andere Methode ist die verbesserte GJK Distanz-Algorithmus. Wenn Sie möchten, eine Anleitung zu dive durch, check-out NeHe Productions' OpenGL lesson #30.
Nebenbei bounding volumes kann auch verwendet werden, für andere Verbesserungen wie die sogenannten occlusion queries. Dies ist ein Prozess der Bestimmung, welche Objekte hinter anderen Objekten (sehen) und müssen daher nicht bearbeitet /gerendert. Bounding volumes kann auch verwendet werden, für pyramidenstumpfs culling das ist der Prozess der Bestimmung, welche Objekte sich außerhalb des Blickwinkels anzeigen der Lautstärke (zu nah, zu weit, oder über Ihre field-of-view-Winkel) und somit nicht gerendert werden müssen.
Als Kylotan festgestellt, die Verwendung einer bounding volume erzeugen kann, die Fehlalarme bei der Erkennung von Okklusion und einfach nicht funktionieren überhaupt für manche Arten von Objekten wie toroids (z.B. Blick durch das Loch in einem donut). Mit Objekten wie diesen sehen, dass es richtig ist eine ganz andere Gewinde auf portal-culling.
InformationsquelleAutor der Antwort charstar
Quadtrees und Octreesein weiterer quadtreesind beliebte Möglichkeiten, mit Raum-Partitionierung, um dies zu erreichen. Die späteren Beispiel zeigt eine 97% Reduzierung in der Verarbeitung über ein paar-von-paar-brute-force-Suche für Kollisionen.
InformationsquelleAutor der Antwort joshperry
Ist eine verbreitete Technik in Spiel-Physik-engines ist die sweep-and-prune-Methode. Dies erklärt sich in David Baraff der SIGGRAPH Noten (siehe Motion-mit Einschränkungen-Kapitel). Havok definitiv verwendet dieses, ich denke, es ist eine option in der Kugel, aber ich bin mir nicht sicher über PhysX.
Die Idee ist, dass Sie kann, Blick auf die überschneidungen von AABBs (axis aligned bounding boxes) auf jeder Achse; wenn die Projektion der beiden Objekte' AABBs überschneidungen, die auf alle drei Achsen, dann die AABBs überlappen müssen. Sie können überprüfen, jede Achse relativ schnell durch die Sortierung der start-und end-Punkte der AABBs; es gibt eine Menge von zeitlicher Kohärenz zwischen den frames, da in der Regel die meisten Objekte bewegen sich nicht sehr schnell, so dass die Sortierung ändert sich nicht viel.
Einmal sweep-and-prune erkennt einen überlapp zwischen AABBs, die Sie tun können, die detaillierte Prüfung der Objekte, z.B. sphere vs. box. Wenn die detaillierte Prüfung zeigt eine Kollision, dann können Sie lösen die Kollision durch Anwendung von Kräften und/oder trigger ein Ereignis im Spiel oder spielen Sie eine sound-Effekt.
InformationsquelleAutor der Antwort celion
Richtig. Normalerweise ist es nicht ein Ereignis-listener für jedes Objekt. Oft gibt es einen nicht-binären Baum-Struktur im Speicher, die imitiert Ihre Spiele-Karte. Stellen Sie sich eine U-Bahn/U-Bahn-Karte.
Dieser Speicher Verteilung ist eine Sammlung von Dingen im Spiel. Sie die Spieler, Monster und Gegenstände können Sie die Abholung oder Elemente, die möglicherweise blowup und tun Sie Schaden. So bewegt sich der Spieler um das Spiel der Spieler-Objekt Zeiger bewegt sich im Spiel/Karte-Speicher-Struktur.
sehen Wie soll ich meinen Spiel-Entitäten gut informiert über die Dinge um Sie herum?
InformationsquelleAutor der Antwort kingchris
Möchte ich empfehlen, die solides Buch von Christer Ericson, die auf Echtzeit-Kollisionserkennung. Es präsentiert die Grundlagen der Kollisionserkennung während der Abgabe von Referenzen auf die zeitgenössische Forschung.
Real-Time Collision Detection (The Morgan Kaufmann Series in Interactive 3-D Technology)
InformationsquelleAutor der Antwort wojakzek
Gibt es eine Menge von Optimierungen verwendet werden können.
Erstens - jedes Objekt (sagen wir mit index i zum Beispiel) ist begrenzt durch die Würfel mit Mittelpunkt-Koordinaten
CXi
,CYi
und GrößeSi
Zweitens - die Kollisionserkennung arbeitet mit Schätzungen:
a) Finden Sie alle Paare cubes i,j mit der Bedingung:
Abs(CXi-CXj)<(Si+Sj) AND Abs(CYi-CYj)<(Si+Sj)
b) Nun arbeiten wir nur mit Paaren hat in einem). Wir berechnen die Entfernungen zwischen Ihnen genauer zu, so etwas wie
Sqrt(Sqr(CXi-CXj)+Sqr(CYi-CYj))
Objekte nun dargestellt werden, wie Sätze von paar zahlen von einfachen Figuren - Würfel, Kugeln, Kegel - und wir mit geometrie Formeln zu überprüfen, diese zahlen Kreuzungen.c) Objekte aus b) mit erkannt Kreuzungen bearbeitet werden, da Kollisionen mit der Physik Berechnung etc.
InformationsquelleAutor der Antwort user224564