2008-08-27 11 views
13

Was sind Ihrer Meinung nach die besten Ressourcen (Bücher oder Webseiten), die Algorithmen oder Techniken zur Kollisionserkennung in einer 2D-Umgebung beschreiben?Ressourcen von Techniken zur Kollisionserkennung in 2D?

Ich bin nur bestrebt, verschiedene Techniken zu lernen, um anspruchsvollere und effizientere Spiele zu machen.

Antwort

2

Persönlich liebe ich die Arbeit von Paul Bourke.

Auch Paul Nettle pflegte, über das Thema zu schreiben. Er hat eine vollständige 3D-Kollisionserkennungsbibliothek, aber Sie interessieren sich vielleicht mehr für die Ideen hinter solchen Bibliotheken (die sehr gut für 2D-Anwendungen geeignet sind). Siehe hierzu General Collision Detection for Games Using Ellipsoids.

+0

Die Arbeit von Paul Bourke scheint offline zu sein. Die neueste Version, die auf der Wayback-Maschine verfügbar ist, ist vom 22. Juli 2012 datiert (https://web.archive.org/web/20120722023704/http://local.wasp.uwa.edu.au/~pbourke/geometry/). . –

0

Wenn Ihre Objekte als Punkte im 2D-Raum dargestellt werden, können Sie den Linienschnittpunkt verwenden, um zu bestimmen, ob zwei Objekte kollidiert sind. Sie können eine ähnliche Logik verwenden, um zu überprüfen, ob sich ein Objekt in einem anderen Objekt befindet (und somit kollidiert ist, selbst wenn sich eine beliebige ihrer Linien derzeit nicht schneidet). Die math to do this ist ziemlich einfach und sollte von jedem Lehrbuch über grundlegende Geometrie abgedeckt werden. Das Erkennen, ob ein Objekt vollständig durch ein Objekt hindurchgegangen ist, könnte jedoch etwas komplizierter sein.

2

Metanet Software hat some relevant tutorials veröffentlicht. Metanet entwickelt N (Flash-basiert, für Windows, Mac, Linux) und N+ (für den X360, DS und PSP).

1

Das Buch "Real-Time Collision Detection" von Christer Ericson (ISBN: 1-55860-732-3) ist ein aktuelles (2005) und weithin gelobtes Buch, das Ihnen einige gute Antworten geben sollte.

Es beginnt mit einem Grundprimer von einigen der Mathematik, die Sie wissen müssen, und geht dann in verschiedene Arten von Begrenzungsvolumina (Kugeln, Achsen ausgerichtet Bounding-Boxen, orientierte Bounding-Boxen) häufig bei der Kollisionserkennung verwendet.

Weiter zur Diskussion gibt zahlreiche Algorithmen für Kollisionen zwischen verschiedenen Kombinationen von Primitiven wie Linien, Dreiecke, Kugeln, Polygone, Flächen zu erfassen, Begrenzungsvolumen usw.

Von Bedeutung ist auch die Abdeckung einiger der Hauptmethoden der räumlichen Trennung und Organisation Ihrer Objekte (Volumenhierarchien, BSP-Bäume, Octrees usw.). Dies beschleunigt wesentlich die Kollisionserkennung, da Sie Ihre Objekte unterteilen können, so dass Sie unnötige Vergleiche zwischen Objekten vermeiden können (zB weiß ich aus meinen Datenstrukturen, dass Objekt A zu weit entfernt ist, um Objekt B zu treffen, also werde ich es nicht tun) eine Abstandsprüfung).

Es enthält auch einige Abdeckung, wie Objekte (Intervalle, etc.) für Kollisionen tatsächlich überprüfen zwischen sich bewegenden aber bewusst sein, dass, obwohl dies ein ziemlich dickes Buch und deckt das Material gut, es für die Kollisions Erkennung ist, nicht Auflösung oder Antwort. So wird es Ihnen helfen zu bestimmen, ob zwei Objekte kollidiert sind, aber nicht wirklich, was Sie dagegen tun müssen, d. H. Wie Sie es lösen können. Die Schnitttests geben Ihnen normalerweise die Daten, die Sie für solche Entscheidungen benötigen, aber im Hinblick auf das allgemeine Problem des Schreibens eines Lösers, der Kollisionserkennungsroutinen verwendet, um Kollisionen zu erkennen und dann zu entscheiden, was mit ihnen zu tun ist, tut dieses Buch bedecken Sie das nicht in der Tiefe.

13

Kollisionserkennung ist oft ein zweiphasiger Prozess.Eine Art "breiter Phasen" -Algorithmus zum Bestimmen, ob zwei Objekte sogar eine Überlappungswahrscheinlichkeit haben (um zu versuchen, n^2 Vergleiche zu vermeiden), gefolgt von einem Kollisionserkennungsalgorithmus mit "enger Phase", der auf den Geometrieanforderungen Ihrer Anwendung basiert .

Sweep and PruneSweep and Prune ist ein gut etablierter effizienter Breitphasenalgorithmus (mit einer Handvoll Varianten, die für Ihre Anwendung geeignet sind oder nicht) für Objekte, die sich relativ körperlich bewegen (Dinge, die sich rasend schnell bewegen oder sehr unterschiedliche Größen und Begrenzungsregionen haben) das ist ungeeignet). Die Bullet Bibliothek verfügt über eine 3D-Implementierung als Referenz.

Eine enge Phasenkollision kann oft so einfach wie "CircleIntersectCircle" sein. Auch hier haben die Bullet-Bibliotheken gute Referenzimplementierungen. In 3D-Land, wenn genauere Erkennung für beliebige Objekte erforderlich ist, ist GJK unter den aktuellen Creme der Ernte - nichts in meinem Wissen würde verhindern, dass es an 2d angepasst wird (aber es könnte langsamer als nur brutale zwingen alle Ihre Kanten;)

Schließlich, nachdem Sie Kollisionserkennung haben, benötigen Sie oft eine Art Kollisionsreaktion. Box 2d ist ein guter Ausgangspunkt für eine physikalische Lösung.