Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten.

Slides:



Advertisements
Ähnliche Präsentationen
Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
Advertisements

Polynomial Root Isolation
3. 3D-Betrachtungstransformationen
Gruppenwettbewerb. Gruppenwettbewerb Aufgabe G1 (8 Punkte)
Funktionen.
• • • • • 3.2 Die projektive Erweiterung des E³
Vom graphischen Differenzieren
WR + WS ZEIGEN Neues aus der Mathematik.
Wilhelm-Raabe-Schule Fachbereich: Mathematik Thema: Lineare Funktionen
Binnendifferenzierung im Mathematik-Unterricht der SEK II
Die ganzen Zahlen an der Zahlengeraden
Kollisionen beschreiben Tag 6
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Klicke Dich mit der linken Maustaste durch das Übungsprogramm! Ein Übungsprogramm der IGS - Hamm/Sieg © IGS-Hamm/Sieg 2007 Dietmar Schumacher Zeichnerische.
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
Philosophie der Logik nach Frege I
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Indoor-Rendering Softwaretechnologie II Master of Ceremony: Christian Daum Sidekick: Tanja B. Lange (wofür, zum Henker, steht eigentlich das B.?)
Geometrie. Geometrie 6. Ebene Geometrie Ein Punkt ist, was keinen Teil hat. Euklid ( ) Gerade analytisch: y = mx + c y(0) = c y(1)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Koordinatengeometrie 3 Mathematik Jahrgangsstufe 11 Übersicht Strecke – Streckenlänge – Mittelpunkt und Abstände Wie beschreibe ich eine Strecke? Wie bestimme.
Tesselation Vortrag im Rahmen des Seminars Computergrafik II
erstellt von Petra Bader
FHP - Fachbereich Bauingenieurwesen
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
Anschauliche Mathematik mit Derive 6
Lösungsweg: Satz von Gauß
Prismatische Schnitte ähnliche AB 23-1
Informatik Grundlagen, WS04, Seminar 11
Computergraphische Visualisierungs- verfahren für 3D-Stadtmodelle
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
Simulation und 3D-Proggrammierung Dozent Prof. Dr. M. Thaller Referentin Nadya Steinert 1.
Zeichnen linearer Funktionen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
§3 Allgemeine lineare Gleichungssysteme
Geometrie : Rekonstruktion
Thema Ebenen von: Sarah Otto.
Ganz einfach gerade / LU 4
Lineare Funktionen und ihre Schaubilder, die Geraden
Das Heronverfahren arithmetisches Mittel geometrisches Mittel
Gegenseitige Lage von Geraden Schnittpunktberechnung
Lösen von quadratischen Ungleichungen
Beleuchtung, inkl. Schatten, Reflexionen
Using latent semantic analysis to find different names for the same entity in free text Präsentation und Diskussion des Papers Im Rahmen des PS Web-Information.
Lineare Gleichungen mit 2 Variablen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Diskrete Mathematik II
Diskrete Mathematik II
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II 6. Sem. Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms.
Vom graphischen Differenzieren
Diskrete Mathematik I Vorlesung 2 Arrays.
Parabeln – Magische Wand
Constraint Delaunay Triangulations
setzt Linearität des Zusammenhangs voraus
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Voronoi-Diagramme.
8. Vektoren. 8. Vektoren Ortsvektor oder Polarvektor.
Vorstellen und Herleiten der Horner Schemas
DG3 - Angittern Gerades, quadratisches Prisma, Grundfläche parallel zu
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Beispiel-Aufgaben für Unterricht, Klausur oder Prüfung Diese kleine Sammlung soll aufzeigen, dass dieser Lehrplan auch neue Aufgaben- stellungen erfordert.
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
Konstruktoren.
DG9 - Angittern Regelmäßige quadratische Pyramide, Grundfläche in
DG1 - Angittern Aufgabenstellung: Eine Gerade A-B durchdringt eine Ebene, die durch ein Dreieck P-Q-R definiert ist. Angegeben sind: A, B, P, Q, R Die.
Abstandsbestimmungen
Wahlteil 2009 – Geometrie II 1
Pflichtteil 2016 Aufgabe 6: Gegeben ist die Gerade
Abstand Punkt – Ebene Gesucht ist der Abstand des Punktes
 Präsentation transkript:

Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten Bounding Boxen für die Verbesserung der Performance bei Kollisions- und Schnittpunkttests auf Dreieckbasis Kollision zweier 3D Modelle: OOB-OOB-Test AABB-OOB_Test

Kollisions- und Schnittpunkttests auf Dreieckbasis (1) 3D Modell auf Dreieckbasis Drahtgittermodell (besteht aus Dreiecken) mit Texturüberzug Dreiecke werden zu Kollisions- und Schnittpunkttests herangezogen Punkt-in-Dreieck-Test Wofür: z.B. um festzustellen ob ein Spieler gegen die Wand gerannt ist Strahl-schneidet-Dreieck-Test: Wofür: Zur Bestimmung der Fußboden- und Terrainhöhe

Kollisions- und Schnittpunkttests auf Dreieckbasis (2) 1. Schnittpunkt in der Ebene bestimmen (allgemein): Mit Normalenform einer Ebene Es muss zuerst überprüft werden ob zwischen den Objekten in der Umgebung und dem jeweiligen Dreieck in einer Ebene einen Schnittpunkt gibt - Wenn Punkt innerhalb der Ebene liegt, liegt der Vektor ∆ in der Ebene und ist damit senkrecht zur Flächennormalen n. - Das Skalarprodukt (relative Lage der zwei Vektoren zueinander) ist gleich Null

Kollisions- und Schnittpunkttests auf Dreieckbasis (2) Schnittpunktberechnung (konkret)

Kollisions- und Schnittpunkttests auf Dreieckbasis (3) Dreieck in der Ebene (Konstruktion einer Ebene aus Eckpunkten) Wir kennen die Eckpunkte (Vertices) des Dreiecks aus denen das 3D Modell zusammengesetzt ist (wurden festgelegt als das Gittermodell entworfen wurde) Daraus muss die Ebene berechnet werden

Kollisions- und Schnittpunkttests auf Dreieckbasis (4) Der Halbseitentest Was können wir schon? Aus Punkten Ebene berechnen Wir kennen Methode zur Schnittpunktberechnung mit Ebene Schnittpunkt muss nicht innerhalb des Dreiecks sein Ebene hat unendliche Ausdehnung Ausdehnung eines Dreiecks ist aber begrenzt Methode um festzustellen ob ein Schnittpunkt einer Ebene innerhalb des Dreiecks liegt ist Halbseitentest Es wird überprüft auf welcher Seite einer Dreieckskante der Schnittpunkt liegt Liegt der Schnittpunkt immer innerhalb der drei Dreieckskanten, liegt er auch innerhalb des Dreiecks

Kollisions- und Schnittpunkttests auf Dreieckbasis (5) Halbseitentest die Zweite: Test ist möglich für zweidimensionale, konvexe Polygone Konvex = Innenwinkel aller benachbarter Kanten ist < 180 ° Für dreidimensionale Polygone gibt es den Halbraumtest Kleiner mathematisch-terminologischer Exkurs: Der Mathematiker bezeichnet sowohl die Innen-, als auch die Außenseite als Halbseite  Deshalb der Name

Kollisions- und Schnittpunkttests auf Dreieckbasis (6) Auf zur Praxis: Klasse CTriangle wird implementiert Dreiecksnummer 3 Vektoren für die Eckpunkte 3 Vektoren für die Senkrechten der Dreieckskanten Normalenvektor Konstruktor/Destruktor hat keine Funktion

Kollisions- und Schnittpunkttests auf Dreieckbasis (7) Was machen die Funktionen: Init_Triangle() Aufgabe: Initialisierung eines Dreiecks Skalierte sowie unskalierte Eckpunkte können übergeben werden Damit das Dreieck mit unskalierten Eckpunkten richtig skaliert werden kann, muss der Skalierungsfaktor mit übergeben werden - Nach Zuweisung der Eckpunkte wird der Normalvektor, sowie die Senkrechten der Dreieckskanten berechnet Warum skaliert, warum unskalierte Eckpunkte: Bei wenigen Objekten ist es sinnvoll die Eckpunkte als skaliert schon vorliegen zu haben (also ein 3D Modell zu übergeben) Bei mehreren Objekten ist es sinnvoller wenige 3D Modelle zu verwenden und durch Variation des Skalierungsfaktors variable Objekte zu erzeugen (bsplw. Bei Asteroiden)

Init_Triangle()

Kollisions- und Schnittpunkttests auf Dreieckbasis (8) Test_for_Ray_Intersection() Führt Schnittpunkttest zwischen einem Strahl (z.B. Sonnenstrahl) und einem Dreieck durch Schritt 1: es wird überprüft ob Normalvektor und die Richtung des Strahls senkrecht zueinander sind Wenn ja, kann es keinen Schnittpunkt geben Schritt 2: intersection_parameter (entspricht Variable a aus 7.3) wird berechnet Um Schnittpunkt zu bestimmen wird dieser Parameter anschließend in die Geradengleichung eingesetzt Schritt 3: Halbseitentest

Test_for_Ray_Intersection()

Kollisions- und Schnittpunkttests auf Dreieckbasis (9) Test_for_Point_Collision() Kollisionstest zwischen Punkt und einem Dreieck wird gemacht (Raketen, Laserimpulswaffen ) Übergeben werden: Adresse des Ortsvektors der Objektmittelpunktes Adresse der Objektflugrichtung Adresse einer Ganzzahlvariablen Im Falle eines positiven Kollisionstests übergibt man die Dreiecksnummer Diese Funktion für den Punkt und die „Strahlfunktion“ sind identisch Einziger Unterschied: Abstandstest zwischen Dreieck und Objektmittelpunkt Ist der Abstand zu groß liegt keine Kollision vor Ist Abstand in bestimmten Rahmen, liegt Kollision vor Die Größe des Rahmens soll man durch ausprobieren herausfinden

Test_for_Point_Collision()

Test_for_Point_Collision_Wall() Abwandlung der Test_for_Point_Collision() für den Kollisionstest an einer Wand Keine Adresse der Bewegungsrichtung wird mit übergeben Als Richtung wird immer der negative Normalenvektor der Wand verwendet

Kollisions- und Schnittpunkttests auf Dreieckbasis (10) CTriangle() wird später zur genauen Treffer- und Schnittpunkterkennung in Indoor und Terainrenderer verwendet Bei der Initialisierung werden immer die Modellkoordinaten der Dreiecke einer 3 D Modells an die Funktion Init_Triangle() übergeben Im Spiel hingegen unterliegen die Modelle ständigen Transformationen Frage: Wie soll Treffererkennung ohne Kenntnis der Weltkoordinaten der 3 D Modelle funktionieren?

Kollisions- und Schnittpunkttests auf Dreieckbasis (11) Beispiel: Rakete fliegt, Raumschiff (fliegt), Treffer soll erkannt werden Mittels Funktion Test_for_Point_Collision() soll getroffenes Dreieck gefunden werden Lösung: Ortsvektor und Bewegungsrichtung der Rakete müssen so transformiert werden, dass Modellkoordinaten der Dreiecke des Raumschiffs für die Treffererkennung verwendet werden können

Rücktransformation Für Treffertest müssen Position und Flugrichtung transformiert werden - Inverse Rotationsmatrix des Raumschiffes wird benötigt Inverse Rotationsmatrix macht die Transformationen der Oirginalmatrix wieder rückgängig

Kollisions- und Schnittpunkttests auf Dreieckbasis (12) Dreieck-Dreieck-Kollisionstest Wenn sich zwei Dreiecke schneiden muss mindestens eine Kante des einen Dreiecks eine Fläche des anderen schneiden Schnittpunktberechnungsfunktion kennen wir bereits Die Dreieckskante die man der Funktion übergibt muss man relativ zu den Modellkoordinaten des anderen Dreiecks transformieren Eckpunkte des Dreiecks transformieren und aus ihnen die Kanten berechnen Dann intersection_parameter berechnen Hat dieser einen Wert >=0 und <=1schneidet die Kante diejenige Ebene in der das andere Dreieck liegt

Kollisions- und Schnittpunkttests auf Viereckbasis (1) Unterschied zu Tests auf Dreieckbasis: Beim Halbseitentest kommt eine weitere Kante hinzu Mit Klasse ClQuad() Hat zwei weitere Funktionen Test_for_axis_aligned_Ray_Intersection() Schnittpunkt zwischen Strahl und achsenausgerichtetem Rechteck/Quader kann schneller berechnet werden als mit Test_for_Ray_Intersection()  Schnittpunkte sind einfacher und auf Halbseitentest kann verzichtet werden, und nur Ausdehnung in x-, y- und z-Richtung wird benötigt Test_Portal_Durchtritt() Verwendet Seitentest den wir schon kennen (in Verbindung mit Portalen)

Einsatz von achsenausgerichteten Bounding Boxen für die Verbesserung der Performance bei Kollisions- und Schnittpunkttests auf Dreieckbasis Sind viele Objekte vorhanden deren Kollisionen berechnet werden müssen kommt es ab einem gewissen Grad zu Performance-Problemen (alle Dreiecke müssen auf Kollision getestet werden) Bounding Boxen bringen hier große Vorteile Zuerst Treffertest mit Boxen und Waffe durchgeführt Ist dieser positiv können alle Dreiecke in anderen Boxen vernachlässigt werden Nur die in der positiv getesteten Box liegenden Dreiecke werden getestet Treffertest zwischen AABB und Lenkwaffe ist ohne großen Rechenaufwand möglich Position der Lenkwaffe wird mit den Eckpunkten der Box verglichen

Einsatz von achsenausgerichteten Bounding Boxen für die Verbesserung der Performance bei Kollisions- und Schnittpunkttests auf Dreieckbasis (2) Bei Schnittpunktberechnung zwischen Strahl und Box wird überprüft ob der Strahl eine der sechs Flächen der Box schneidet Bei Verwendung von AABB kann Test_for_axis_aligned_Ray_Intersection()- Methode benutzt werden Praktikabelste Lösung ist eine eigene Klasse zur Erzeugung einer AA Bounding Box anzulegen Damit AABB korrekt initialisiert werden kann, müssen der Klasseninstanz vor dem Aufruf der Initialisierungmethode die minimalen und maximalen x-, y- und z-Werte übergeben werden

Einsatz von achsenausgerichteten Bounding Boxen für die Verbesserung der Performance bei Kollisions- und Schnittpunkttests auf Dreieckbasis (3) Ermittlung der Eckpunkte der Box 3 Seiten Quelltext  Siehe Buch S. 204-208 (Aufruf der CAABB Kollisions- und Schnittpunkttests aus einer 3D Modellklasse heraus)

Kollision zweier 3D Modelle (1) Kollisionsprüfungen brauchen sehr viel Zeit (wurde schon sehr oft gesagt ) Dem entgegen wirken Boundingboxen (wurde auch schon oft gesagt ) Man hat die Wahl diese Boxen in einer einfachen Baumstruktur zu organisieren Hierarchisches Kollisionsmodell Oder als einen Satz gleichberechtigter Boxen zu definieren All-equal Kollisionsmodell Muss Modellgeometrie möglichst gut wiedergeben

Kollision zweier 3D Modelle (1) All-equal Kollisionsmodell Kommt mit wenigen Boxen aus und ist einfach zu implementieren Ohne weitere Optimierung ist die benötigte Rechenzeit für einen vollständigen Prüflauf an Dreieck-Dreieck Kollisionstests deutlich höher als bei einem hierarchischem Kollisionsmodell Bei nur 6 Boxen müssten schlimmstenfalls 36 Box-Box -Kollisionstests durchgeführt werden Bestenfalls nur ein Test

Kollision zweier 3D Modelle (2) Hierarchisches Kollisionsmodell: Jedes Dreieck soll von einer Bounding Box umschlossen werden Baumstruktur Sollte augeglichen sein Kommt in der Realität aber fast nie vor Findet eine Box-Box Kollision statt, wird noch ein Dreieck-Dreieck-Kollisionstest durchgeführt Zudem kann es vorkommen, dass die zu testende Box des einen Baumes mehrere Boxen eines anderen Baumes schneidet Dadurch müssen mehrere Testläufe in Kauf genommen werden Bounding-Box-Kollisionstests 3D Modelle unterliegen in der Spielerealität ständigen Veränderungen, weshalb der AABB-AABB Kollisionstest nicht angewendet werden kann Deshalb gibt es eine logische Erweiterung, den OBB-OBB Kollisionstest

Kollision zweier 3D Modelle (2) Der OBB-OBB Kollisionstest OB Boxen haben unendlich viele Orientierungsmöglichkeiten Es ergeben sich nicht weniger als 15 potentielle separierbare Achsen, die nacheinander geprüft werden müssen Siehe Beispiel S. 210-215 OBB-OBB Kollisionstest wird genau unter die Lupe genommen und Problemfälle erläutert

Kollision zweier 3D Modelle (2) AABB-OBB-Kollisionstest Etwas einfacher aufgebaut, da eine achsenausgerichtete BB eines untransformierten Objektes gegen eine orientierte BB eines transformierten Objektes getestet werden muss Orientierte BB des transf. Objektes müssen auf die Modellkoordinaten des untransformierten Objektes rücktransformiert werden Siehe S. 216-219

Kollision zweier 3D Modelle (3) Ein all-equal Modell im Einsatz Mit Hilfe einer Methode, aus C_OBB, Init_as_AABB() können achsenausgerichtete BB für die 3D Modelle erzeugt werden 1. Schritt eines Kollisionstests besteht also darin die BB des einen Objektes (pObject[jj]) auf die Modellkoordinaten des anderen Objektes (pObject[j]) rück zu transformieren Dafür stehen drei Rotationsmatrizen zur Verfügung:

Kollision zweier 3D Modelle (4) Im einfachsten Fall werden dann alle ausger. BB des untr. Objektes (pObject[j]) paarweise gegen alle OBB des tr. Obejktes (pObject[jj]) auf mögliche Kollision getestet