![Page 1: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/1.jpg)
Kollisionserkennung Kollisionserkennung
Eine Präsentation für das Proseminar
Game Design von
Florian Liegsalzam 04.12.07
![Page 2: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/2.jpg)
ÜberblickÜberblick1. Kollisionserkennung – Was ist das und wofür brauche ich
es?
2. Was muss ich bei der Kollisionserkennung beachten?
3. Welche Methoden der Kollisionserkennung gibt es?
4. Ausblick
04.11.07Florian Liegsalz
Überblick 2
![Page 3: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/3.jpg)
Bei der Kollisionserkennung geht es darum herauszufinden, wann und wo 2 oder mehr Objekt sich berühren oder überschneiden.
Kollisionserkennung wird in vielen Bereichen benötigt. Dazu zählen:
- Entwicklung von beweglichen Maschinen- Autocrashtests- Robotik- Realitätssimulationen- Computerspiele
04.11.07Florian Liegsalz
3Collision Detection – Was ist das und wofür brauche ich es?
Grundlagen
![Page 4: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/4.jpg)
Kollisionserkennung findet in 3 Phasen statt:
1.Phase: Ausschließung von Objekten, die nicht kollidieren können
2.Phase: Überprüfung der möglichen Kollisionen der Restobjekte
3.Phase: Ausführung genauer Schnitttests mit spezifischen Methoden
04.11.07Florian Liegsalz
4Collision Detection – Was ist das und wofür brauche ich es?
3 Phasen
![Page 5: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/5.jpg)
ÜberblickÜberblick1. Kollisionserkennung – Was ist das und wofür brauche ich
es?
2. Was muss ich bei der Kollisionserkennung beachten?
3. Welche Methoden der Kollisionserkennung gibt es?
4. Ausblick
04.11.07Florian Liegsalz
Überblick 5
![Page 6: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/6.jpg)
04.11.07Florian Liegsalz
6Was muss ich bei der Kollisionserkennung beachten? – Teil 1
Eigentlich ist Kollisionserkennung ganz einfach, oder:
[c#]Kollisionsobjekt[] colObs = new Kollisionsobjekt[n];foreach (Kollisionsobjekt o in colObs) {
o.move(); foreach (Kollisionsobjekt p in colObs) {
if (o!=p) o.checkForCollision(p);}
}[/c#]
Welche Probleme treten auf?- Offensichtlich: Laufzeit O(n²)- Wie implementiere ich eigentlich „checkForCollision“?
Also wie finde ich heraus, ob 2 Objekte kollidieren?Und was mache ich dann mit Ihnen?
Ein einfaches Modell
![Page 7: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/7.jpg)
04.11.07Florian Liegsalz
7Was muss ich bei der Kollisionserkennung beachten? – Teil 2
Geht man wie in meinem Beispiel von Kugeln aus, ist das ganze relativ einfach:[c#]public override FloatPoint checkForColBall(ColOb ob) { float dX = pos.X - ob.pos.X; float dY = pos.Y - ob.pos.Y; float l = (float)Math.Sqrt(dX * dX + dY * dY);
if (l <= this.radius + ob.radius) { dir.X = 0; dir.Y = 0; ob.dir.X = 0; ob.dir.Y = 0; return pos; } return null; }[/c#]
Welche Probleme treten auf?- Was passiert, wenn unser Objekt zu schnell ist?- Was tun, wenn unser Objekt nicht rund ist?
Noch mehr Einfaches
![Page 8: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/8.jpg)
Eine Laufzeit von O(n²) ist definitiv unerwünscht. bessere Speichermöglichkeit finden und
Ausschlussverfahren entwickeln
Wenn Elemente zu schnell sind, können sie sich „überspringen“.
Wir bilden aus unseren Objekten ein Vergleichsobjekt. Aber wie?
Unrunde Elemente führen zu Lücken, wenn man über den Mittelpunkt und den Radius abfragt.
Wir suchen uns genauere Abfragemethoden
04.11.07Florian Liegsalz
8Was muss ich bei der Kollisionserkennung beachten? – Zusammenfassung
Zwischenergebnisse
![Page 9: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/9.jpg)
ÜberblickÜberblick1. Kollisionserkennung – Was ist das und wofür
brauche ich es?
2. Was muss ich bei der Kollisionserkennung beachten?
3. Welche Methoden der Kollisionserkennung gibt es?
4. Ausblick
04.11.07Florian Liegsalz
Überblick 9
![Page 10: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/10.jpg)
Wie wir gesehen haben, sind runde „Bounding Boxes“ nicht sehr praktikabel, da der Orbit um ein Objekt sehr schnell zu groß wird.
Daher werden normalerweise Rechtecke als „Bounding Box“ verwendet.
Davon gibt es im wesentlichen 3 Arten:• AABB: axis aligned bounding boxes• OBB: oriented bounding boxes • k-DOP: k-Discrete Oriented Polytop
04.11.07Florian Liegsalz
10Welche Methoden der Kollisionserkennung gibt es? – Teil 1
Das Prinzip der Bounding Boxes
![Page 11: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/11.jpg)
04.11.07Florian Liegsalz
11Welche Methoden der Kollisionserkennung gibt es? – Teil 2
Die OBB Methode arbeitet eigentlich AABB, nur benutzt man hier die Achsen des Objekts.
Bei k-DOPs vergleicht man nicht nur ein Rechteck, sondern überprüft verschiedene Beschränkungsflächen.
Bei AABB wird das kleinste mögliche Rechteck um das Objekt anhand der Koordinatenachsen für Kollisionserkennung gelegt.
Die 3 Modelle
![Page 12: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/12.jpg)
04.11.07Florian Liegsalz
12Welche Methoden der Kollisionserkennung gibt es? – Teil 3
Mit Neuberechnung
unproblematischNicht möglich
Geringste Komplexität
Aufwendige Kollisionserkennung
Geringe Komplexität
Einfachste Erzeugung
Rechenintensive Erzeugung
Sehr einfache Erzeugung
Größter Speicherbedarf
Höherer Speicherbedarf
Geringer Speicherbedarf
Sehr GutGute HülleffizienzSehr Schlecht
Rotation
Komplexität
Aufwand
Speicher
Effizenz
k-DOPOBBAABB
Methodenvergleich
![Page 13: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/13.jpg)
Hat man nun eine Kollision zwischen 2 Objekten festgestellt, so verfeinert man den Rahmen, den man gezogen hat, bis zu einer frei gewählten Tiefe:
Das ganze stellt im Endeffekt eine Baumstruktur dar:
04.11.07Florian Liegsalz
13Welche Methoden der Kollisionserkennung gibt es? – Teil 4
Dies ist ein Quadtree, da wir im 2D-Raum sind. Im 3-dimensionalen hätten wir einen Octree.
Kollisionsverfeinerung
![Page 14: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/14.jpg)
Ein weiterer wichtiger Bestandteil der Kollisionserkunnungsabteilung ist die Minimierung der nötigen Vergleiche .
Dafür gibt es wiederum verschiedene Verfahren.
1. Bessere Speichermöglichkeiten finden als ein Array.2. Ausschlusskriterien festlegen, z.B.:
- Objekte klassifizieren in statisch und dynamisch- Regeln festlegen, wie: „Projektile kollidieren nicht“
04.11.07Florian Liegsalz
14Welche Methoden der Kollisionserkennung gibt es? – Teil 5
Kollisionsausschluss
![Page 15: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/15.jpg)
Für die Speicherung gibt es wiederum verschiedene Vor-gehensweißen.
Da wären z.B.:- die uniforme Raumunterteilung- Quad- / Octree- BSP – Baum (Binary Space Partitioning)- Sweep and Prune
Man muss aber unterscheiden! Verschieden klassifizierte Objekte können mit verschiedenen Methoden gespeichert werden. Objekte selber können wiederum andere Methoden zur Speicherung und Unterteilung benutzen.
04.11.07Florian Liegsalz
15Welche Methoden der Kollisionserkennung gibt es? – Speicherung
Speicherung
![Page 16: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/16.jpg)
Hier wird wieder mit einem Array oder Ähnlichem gearbeitet, nur dass diesmal nicht nur die Objekte im Array gespeichert werden, sondern die gesamte Fläche.
04.11.07Florian Liegsalz
16Welche Methoden der Kollisionserkennung gibt es? – die uniforme Raumunterteilung
Die uniforme Raumunterteilung
Wir legen quasi ein Raster über die gesamte Fläche und speichern dabei welches Objekt in welchen Rasterplätzen liegt.
Der große Nachteil an dieser Speicherart ist, dass sobald die gespeicherten Objekte in Bewegung sind, man auch jeweils das gesamte Raster aktualisieren muss.
![Page 17: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/17.jpg)
Der Quadtree funktioniert in diesem Fall ähnlich wie bei der Speicherung der Bounding Box.
04.11.07Florian Liegsalz
17Welche Methoden der Kollisionserkennung gibt es? – Quad- / Octree
Quad- / Octree
Der Unterschied ist, dass hier der Baum für den gesamten Raum aufgeteilt wird. Die Baumstruktur baut sich rekursiv auf und zwar so weit bis jedes Objekt ein Blatt im Baum darstellt.
Problematisch ist diese Struktur nur bei sehr beweglichen Strukturen, da der Baum relativ schwierig zu aktualisieren ist.
![Page 18: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/18.jpg)
BSP-Bäume sind in der 3D-Graphik ein häufig benutztes Mittel. Hierbei werden Polygone mit Ebenen geschnitten und dadurch wird ein Binärbaum erzeugt.
Ich habe ein Applet gefunden, mit dem ich erklären möchte, wie die Erstellung eines BSP-Baumes funktioniert.
http://www-lehre.informatik.uni-osnabrueck.de/~vcprakt/ifc/part1/html/bspapplet.html
04.11.07Florian Liegsalz
18Welche Methoden der Kollisionserkennung gibt es? – BSP - Baum
BSP – Baum
![Page 19: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/19.jpg)
Bei diesem Verfahren wird jedes Element in n sortierten Listen gespeichert, wobei n die Anzahl der Dimensionen ist.
Wir speichern in jeder Liste das jeweilige Objekt anhand der dazugehörigen Koordinate auf der Achse. Da wir durch die im Objekt gespeicherten Daten die Breite des Objekts wissen, können wir dadurch dann die Kollision abprüfen.
Das Gute an diesen Listen ist, dass wir eigentlich nur immer ein Element in den Listen aktualisieren müssen. Dadurch haben wir mittels Insert-Sort eine ungefähre Laufzeit von O(n).
04.11.07Florian Liegsalz
19Welche Methoden der Kollisionserkennung gibt es? – Sweep and Prune
Sweep and Prune
![Page 20: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/20.jpg)
ÜberblickÜberblick1. Kollisionserkennung – Was ist das und wofür
brauche ich es?
2. Was muss ich bei der Kollisionserkennung beachten?
3. Welche Methoden der Kollisionserkennung gibt es?
4. Ausblick
04.11.07Florian Liegsalz
Überblick 20
![Page 21: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/21.jpg)
Es gibt noch viele andere Verfahren. Eines der wichtigsten davon ist z.B. I-Collide. Dieses ist eine Kombination von AABB und Sweep and Prune und arbeitet daher sehr effizient.
Diese Verfahren sind natürlich nicht fix implementiert, sondern nur eine ungefähre Vorgehensweiße, d.h. jeder muss das selber programmieren. Daraus ergeben sich teilweise schnellere und bessere Algorithmen.
Ebenso werden die vorhandenen Algorithmen auch weiterentwickelt. Aus I-Collide wurde z.B. V-Collide.
04.11.07Florian Liegsalz
21Ausblick
Ausblick
![Page 22: Kollisionserkennung Eine Präsentation für das Proseminar Game Design von Florian Liegsalz am 04.12.07](https://reader035.vdokument.com/reader035/viewer/2022062512/55204d6149795902118b5bfc/html5/thumbnails/22.jpg)
04.11.07Florian Liegsalz
22Ende
Ende