Dreidimensionale Spielewelten

Slides:



Advertisements
Ähnliche Präsentationen
3. 3D-Betrachtungstransformationen
Advertisements

Elementare Grundlagen der Vektorrechnung
Schnelle Matrizenoperationen von Christian Büttner
13. Transformationen mit Matrizen
Mechanik Mathematische Grundlagen und Begriffe: Formel? Funktion
Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten.
2D-Objekte in der 3D-Welt
Dreidimensionale Spielewelten
Softwaretechnologie II Christian Daum
Grundlagen der Geometrie
3.2 und 3.2.1: Räumliches Sehen und Koordinaten und Vektoren
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.
Lösung von linearen Gleichungssystemen - Grundlagen
Die Geometrie der Ebene
Kapitel 4 Geometrische Abbildungen
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Koordinatensysteme und Transformationen
Beispiele für Gleichungssysteme
Geometrie. Geometrie 6. Ebene Geometrie Ein Punkt ist, was keinen Teil hat. Euklid ( ) Gerade analytisch: y = mx + c y(0) = c y(1)
Klausur „Diskrete Mathematik II“
„Flächenanlegungen“ Einfache Flächenanlegung, gr. parabolé: eine gegebene Fläche F an eine gegebene Strecke a anlegen (d.h. ein Rechteck mit Seite a.
Transformationen 09-Transformationen.
Quaternionen Eugenia Schwamberger.
erstellt von Petra Bader
Folie 1 § 30 Erste Anwendungen (30.2) Rangberechnung: Zur Rangberechnung wird man häufig die elementaren Umformungen verwenden. (30.1) Cramersche Regel:
§11 Skalarprodukt. Euklidische Räume
§8 Gruppen und Körper (8.1) Definition: Eine Gruppe G ist eine Menge zusammen mit einer Verknüpfung, die jedem Paar (a,b) von Elementen aus G ein weiteres.
Folie 1 § 29 Determinanten: Eigenschaften und Berechnung (29.1) Definition: Eine Determinantenfunktion auf K nxn ist eine Abbildung (im Falle char(K) ungleich.
Tutorium
Starrkörpereigenschaften
Matrix-Algebra Grundlagen 1. Matrizen und Vektoren
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
§24 Affine Koordinatensysteme
Beispiel: Arbeit, Skalarprodukt zwischen Kraft- und Weg-Vektor
Computergrafik - Inhalt
Vektoren Grundbegriffe für das Information Retrieval
Skalare, Vektoren.
Summe von Vektoren.
Lineare Algebra Komplizierte technologische Abläufe können übersichtlich mit Matrizen dargestellt werden. Prof. Dr. E. Larek
Folie 1 Kapitel IV. Matrizen Inhalt: Matrizen als eigenständige mathematische Objekte Zusammenhang zwischen Matrizen und linearen Abbildungen Produkt von.
§23 Basiswechsel und allgemeine lineare Gruppe
§3 Allgemeine lineare Gleichungssysteme
Einführung in die Matrizenrechnung
Polynome und schnelle Fourier-Transformation
Skalare, Vektoren.
Mechanische Arbeit Arbeit bei unterschiedlicher Richtung von Kraft- und Weg am Beispiel der Hub-Arbeit.
Bewegung auf der Kreisbahn: Die Zentripetalbeschleunigung
Vektorrechnung in der Schule
Summe von Vektoren.
Lineare Algebra, Teil 2 Abbildungen
Lineare Algebra Außerdem bieten Determinanten
Lineare Funktionen und ihre Schaubilder, die Geraden
Multivariate Statistische Verfahren
Drehung im Raum – Kreiseltheorie
Scaffold 29S: Komplexe Zahlen
Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung
Folie 1 §21 Das Produkt von Matrizen (21.1) Definition: Für eine (m,n)-Matrix A und eine (n,s)-Matrix B ist das (Matrizen-) Produkt AB definiert als (21.2)
Grundlagen der Geometrie
Prof. Dr. Walter Kiel Fachhochschule Ansbach
6. Thema: Arbeiten mit Feldern
Didaktik der Geometrie (11) Vorlesung im Sommersemester 2004 Prof. Dr. Kristina Reiss Lehrstuhl für Didaktik der Mathematik Universität Augsburg.
Graphische Datenverarbeitung
Beugung an Streuzentren
8. Vektoren. 8. Vektoren Ortsvektor oder Polarvektor.
PCA Principal Component Analysis. Gliederung PCA – Warum eigentlich? PCA – Was ist zu tun? Was passiert eigentlich? Anwendungen Zusammenfassung.
Satellitengeodäsie Kugelfunktionen Torsten Mayer-Gürr
Vektorgeometrie im Raum
Kapitel I. Vorspann zum Begriff Vektorraum
 Präsentation transkript:

Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch Vektoren Dreidimensionale Wetltransformationen durch Matritzen Schnelle Quadratwurzelberechnung Schnelle Berechnung von Rotationsmatritzen Softwaretechnologie II - M. Thaller Wintersemester 2005 / 2006 Referentin: Tanja Lange

Koordinatensysteme 2 Arten der Erweiterung des zweidimensionalen Koordinatensystems in die Dritte Dimension: Für DirectX-Programmierer:  Linkssystem = positive z-Achse zeigt in Monitor Rechtssystem = z-Achse zeigt in entgegengesetzte Richtung

Grundbegriffe: Definition Vektor ein Vektor ist eine Liste von Zahlen ! ein Vektor ist eine gerichtete, orientierte Strecke im Raum Vektoren werden durch Pfeile repräsentiert. Länge des Pfeils = Betrag des Vektors  In der Geometrie ist ein Vektor eine Klasse von Pfeilen gleicher Länge (Betrag), gleicher Richtung und gleicher Orientierung. Um beispielsweise das Dreieck ABC in der Figur an die Position A'B'C' zu verschieben, muss jeder Punkt um 7 Einheiten nach rechts und 3 nach oben verschoben werden. Da diese Pfeile in Länge, Richtung und Orientierung alle übereinstimmen, fasst man sie zu einer Klasse (Vektorklasse) zusammen. Man beschreibt die Klasse durch die Verschiebung, die ihre Pfeile bewirken, im Beispiel: im dreidimensionalen Raum entsprechend mit 3 Koordinaten.

Grundbegriffe: Zeilenvektor: Bsp.: (3,-2,4) 3 Spaltenvektor: Bsp.: -2 ein Punkt P wird durch Komponenten (Ax, Ay, Az) beschrieben Basisvektoren = senkrecht aufeinander stehende (orthogonale) Vektoren  Hilfestellung: Dreifinger-Regel ! Basisvektoren eines dreidimensionalen, rechtwinkligen Koordinatensystems: Basisvektor, der die x-Achse repräsentiert: i = (1 0 0) Basisvektor, der die y-Achse repräsentiert: j = (0 1 0) Basisvektor, der die z-Achse repräsentiert: k = (0 0 1) Ortsvektor = gebundener Vektor  hat Ursprung bzw. Ausgangspunkt Einheitsvektor = Vektor mit Betrag 1 = normiert Bezeichnung: ex, ey, ez

Grundbegriffe: Nullvektor = Vektor mit Betrag 0  Ursprung Gegenvektor = gleicher Betrag, - Richtung, andere Orientierung Translation = Verschiebung  Verschiebungsvektor Verbindungsvektor = zw. 2 Punkten P (=Schaft) und Q (=Spitze) Skalare = Beträge von Vektoren = gerichtete Größe kollinear = Parallel, Schreibweise: a || b, Antiparallel = entgegengesetzt Linearkombination = Summe vom Vielfachen von Vektoren Determinante = in der linearen Algebra eine spezielle Funktion, die jeder quadratischen Matrix eine Zahl zuordnet. Matrix = stellt Anordnung von Elementen in mehreren Richtungen dar In der Informatik entspricht eine Matrix einem n-dimensionalen Feld In der linearen Algebra ist eine Matrix (Plural: Matrizen) eine Anordnung von Zahlenwerten (oder Operatoren) in Tabellenform. Man spricht von den Spalten und Zeilen der Matrix, und bezeichnet selbige auch als Vektoren (d.h. Zeilenvektoren und Spaltenvektoren). Die Objekte, die in der Matrix angeordnet sind, nennt man Komponenten oder Elemente der Matrix.

Vektorprodukt (Kreuzprodukt) ein weiteres Produkt (Vektor c) zweier Vektoren a und b steht senkrecht auf a und b  c = a • b  c = 0 für a || b ! Nicht verwechseln: ! Skalarprodukt (Punkt-): a • b = |a| • |b| • cosα  a • b = 0 für a ┴ b  a • b = |a| • |b| für a || b Betrag Vektor c = Flächeninhalt A  |c| = |a| • |b| • sinα  |c| = |a| • |b| für a ┴ b, weiter gilt: c ┴ a, b Fläche A ist vorzeichenbehaftet: Winkel > 180°  negatives Vorzeichen, c entgegengesetzte Richtung Beim arbeiten mit negativem Winkel wird Reihenfolge der Multiplikation der Vektoren a und b festgelegt Da Vektoren c1 und c2 antiparallel sind 

Berechnung des Vektorprodukts mit Hilfe von Determinanten, Bsp.: eine 3x3 Determinante: Zur Berechnung wird Determinante mit Hilfe von Laplaceschen Entwicklungssatz zerlegt: Hilfsmethode zur Berechnung der Komponenten: 1. Zeile: Basisvektoren 2. Zeile: Komponenten des Vektors a 3. Zeile: Komponenten des Vektors b In Spaltenform:  DirectX-Funktion: D3DXVector3* D3DXVec3Cross( ) 1 4 2 1 4 2 d.h.: -1 5 6 -1 5 6 = (1 · 5 · 3) + (4 · 6 · 2) + (2 · (-1) · (-8)) – (1 · 6 · (-8)) – (4 · (-1) · 3) – (2 · 5 · 2) = 119 2 -8 3 2 -8 3

Polarkoordinaten (Kugelkoordinaten) für Konstruktion von 3D-Szenarien einer Weltraumsimulation Bsp.: 30° nach rechts drehen; 40° nach oben drehen; 0,5 aU geradeaus fliegen  leichter zu interpretieren als kartesische Koordinaten (x-, y-, z-) Für eine dreidimensionale Polarkoordinatendarstellung benötigt man zwei Winkel sowie die Länge des Ortsvektors x = Entfernung * cos(Vertikalwinkel) * sin(Horizontalwinkel) y = Entfernung * sin(Vertikalwinkel) z = Entfernung * cos(Vertikalwinkel) * cos(Horizontalwinkel) Horizontalwinkel = Drehung nach rechts (positiver Wert) oder links (negativer Wert) Vertikalwinkel = Drehung nach oben (positiver Wert) oder unten (negativer Wert)

Quadratwurzelberechnung häufige Rechenoperation in einem Spiel im Zusammenhang mit der Normierung und Längenberechnung von Vektoren Entwicklung eigener, schneller Quadratwurzel-Routinen  Prozessorleistung Näherungsverfahren durch Iterationsverfahren nach dem alten Heron: unsigned long *ptr = NULL; float Value; inline float FastWurzelExact(float r) { if(r==0.0f) return 0.0f; if(r<0.0f) r = -r; Value = r; halfValue = 0.5f*r; ptr = (unsigned long*)&r; *ptr = (0xbe6f0000-*ptr)>>1; temp1Wurzel = r; temp1Wurzel *= 1.5f-temp1Wurzel*temp1Wurzel*halfValue; return Value*temp1Wurzel; }  Da Zeiger ptr vom Typ unsigned long*, werden Bits als die einer Ganzzahl interpretiert  Prüfen, ob Wurzel von Null berechnet werden soll (da bei Division durch Null evtl. Programmabsturz)  Prüfen, ob Zahl zur QWB positiv ist  Divisionen durch Multiplikation ersetzen !

Längenberechnung & Normierung von Vektoren Funktion für die Berechnung des Vektorbetrags (unter Verwendung der FastWurzelExact( ) – Funktion): inline float Calculate3DVectorLength(D3DXVec3* pVectorIn) { if(*pVectorIn == NullVector) return 0.0f; } tempNorm = D3DXVec3LengthSq(pVectorIn); tempNorm = FastWurzelExact(tempNorm); return tempNorm; // Quadratische Länge des Vektors mittels // DirectX-Funktion D3DXVec3LengthSq( ) // berechnet Normierung eines Vektors: inline float NormalizeVector( ) { If (tempNorm != 1.0f) // prüfen, ob Vektor überhaupt normiert werden muß tempNorm = FastWurzel(tempNorm); // es ist nicht immer erforderlich } // Vektor exakt zu normieren }

Manipulation der 3D-Welt Transformation von Vektoren mit Hilfe von Matrizen Durch DirectX keine einzelnen Transformationen mehr notwendig Nur Adresse der Transformationsmatrix an DirectX-Funktion SetTransform( ) mit Hinweis auf Weltkoordinatensystem (Welttransformation) übergeben  die grafische Darstellung (Renderprozess) des Objekts erfolgt dann in korrekter Größe (Skalierung), Ausrichtung und Verschiebung !  DirectX-Funktion: D3DXVector3* D3DXVec3TransformCoord( )

Manipulation der 3D-Welt Translationsmatrix für die Bewegung im Raum Erweiterung der Translationsmatrix T für die Bewegung im Raum:  DirectX-Funktion: D3DXMatrix* D3DXMatrixTranslation( ) Skalierungsmatrix Skalierungsmatrix S lässt sich ohne Probleme um eine Dimension erweitern:  DirectX-Funktion: D3DXMatrix* D3DXMatrixScaling( ) Einheitsmatrix Alle Transformationsmatritzen werden stets als Einheitsmatrix initialisiert:  DirectX-Funktion: D3DXMatrix* D3DXMatrixIdentity( )

Rotationsmatrizen für Drehung Im dreidimensionalen Raum kann sich ein Objekt um eine beliebig orientierte Achse drehen Rotation eines Vektors um x-Achse lässt sich durch drei Gleichungen beschreiben: xneu = x yneu = ycosα - zsinα zneu = ysinα + zcosα Zugehörige Matrix Rx hat folgenden Aufbau: -y -z α2 α1  Bsp. anhand dreier Winkel (0°, 90°, 180°) Gleichung 1: Rotation um x-Achse beeinflußt x-Komponenten des Vektors nicht Gleichung 2: Drehung um 0° überführt alte y-Komponente in neue y-Komponente, Drehung um 90° überführt negative z-Komponente in neue y-Komponente, Drehung um 180° überführt y-Komponente in negative y-Komponente Gleichung 3: Drehung um 0° überführt alte z-Komponente in neue z-Komponente, Drehung um 90° überführt y-Komponente in neue z-Komponente, Drehung um 180° überführt z-Komponente in negative z-Komponente

Rotationsmatrizen für Drehung Rotation eines Vektors um y-Achse: xneu = xcosα + zsinα yneu = y zneu = -xsinα + zcosα Zugehörige Matrix Ry: Rotation eines Vektors um z-Achse: xneu = xcosα - ysinα yneu = xsinα + ycosα zneu = z Zugehörige Matrix Rz:  DirectX-Funktion: D3DXMatrix* D3DXMatrixRotationX( )/…Y( )/…Z( )

Rotationsmatrizen für Drehung Rotation um beliebige Achse: Trick zur Aufstellung der Matrixgleichung: Rotationsachse auf eine bekannte Achse (z.B. z-Achse) transformieren (Drehung wird so zur Drehung um z-Achse mit gleichem Winkel), Rücktransformation in die ursprüngliche Rotationsachse mit inverser x- und y-Achsen-Rotationsmatritzen (= rückgängig machen der Transformation einer Matrix, d.h. Rotationsmatrix Drehung von 10° um x-Achse  inverse Rotationsmatrix Drehung von -10° um x-Achse) Rotationsmatrix für eine Drehung um beliebige Achse: x, y, z = Komponenten der normierten Rotationsachse  DirectX-Funktion: D3DXMatrix* D3DXMatrixInverse( )  DirectX-Funktion: D3DXMatrix* D3DXMatrixRotationAxis( )

Frame-Rotationsmatrizen & Gesamtrotationsmatrizen Zwei Typen von Rotationsmatrizen: Gesamtrotationsmatrix: verantwortlich für endgültige Ausrichtung eines Objekts aus dessen Anfangsorientierung Frame-Rotationsmatrix: beschreibt nur Drehung während des aktuellen Frames  neue Gesamtrotationsmatrix nach Framedrehung durch Multiplikation Frame-Rotationsmatrix mit Gesamtrotationsmatrix des vorangegangenen Frames (Multiplikationsreihenfolge abhängig von gegebenem Problem!) Für Rotation von Planeten, Wolken und Asteroiden folgende Multiplikation: R(neue Rotationsmatrix) = R(alte Rotationsmatrix) * R(für Drehung pro Frame) Gesamtrotationsmatrix R muß zu Beginn des Spiels als Einheitsmatrix initialisiert werden D3DXMatrixIdentity( ) Zur Kurvenbewegung eines Raumschiffs wird Multiplikationsreihenfolge umgedreht: R(neue Rotationsmatrix) = R(für Drehung pro Frame) * R(alte Rotationsmatrix)

Simulation von Bewegung Bsp. für den Gebrauch (Simulation der Bewegung eines Asteroiden durch den Weltraum): Variablen zur Beschreibung der Bewegung: D3DXVector3 Ortsvektor, Eigenverschiebung, Rotationsachse; float Rotationsgeschwindigkeit Matrizen zur Transformation: D3DXMatrix Transformationsmatrix, Scalematrix, Rotationsmatrix, FrameRotationsmatrix, Translationsmatrix als Einheitsmatrizen initialisieren: D3DXMatrixIdentity( ) Skalierungsmatrix erzeugen: Scalematrix._11 = scaleX, … Rotationsachse und –geschwindigkeit festlegen Rotationsmatrix für Rotation von Frame zu Frame: D3DXMatrixRotationAxis( ) aktueller Ortsvektor: Ortsvektor = Ortsvektor + Eigenverschiebung aktuelle Translationsmatrix mit Hilfe von Ortsvektor erzeugen: Translationsmatrix._41 = Ortsvektor.x, … aktuelle Rotationsmatrix: Rotationsmatrix = Rotationsmatrix * FrameRotationsmatrix Gesamttransformationsmatrix zur korrekten Darstellung im Raum: Transformationsmatrix = Scalematrix * Rotationsmatrix * Translationsmatrix

Schnelle Berechnung von Rotationsmatrizen Mehrere Funktionen zur Erzeugung von Rotationsmatrizen Problem: bei Berechnung der Sinus- und Kosinuswerte relativ langsame API-Funktion Computer werden immer schneller, trotzdem keine unnötige Rechenzeit verschwenden ! Rotationsmatrizen mit Look-up-Tabellen erzeugen Problem: Drehungen finden in zwei Richtungen statt (Drehwinkel positiv oder negativ) Speicherverschwendung (für Bereich -360° bis +360°) negative in positive Winkel umwandeln! Winkel -10° = 350° (360° + (-10°)) merke folgende Regel: 360° + neg. Winkel = pos. Winkel Rotationsmatrizen mit gleichbleibendem Rotationswinkel falls diese ständig benötigt werden  einmal erzeugen und immer wieder verwenden (einfache Optimierungsmethode, die oft vergessen wird)

Schnelle Berechnung von Rotationsmatrizen Rotationsmatrizen mit Hilfe von vorberechneten Sinus- und Kosinuswerten erzeugen statt Winkel vorberechnete Sinus- und Kosinuswerte an entsprechende Funktion übergeben (Richtung beachten! für z.B. -10° einfach neg. Wert übergeben) inline void CreateRotMatrix( ) Rotationsmatrizen für kleine Winkel Objekte drehen sich in einem Frame nur um kleine Winkel Frame-Rotationsmatrizen mit Sinus- und Kosinusnäherungen für kleine Drehwinkel berechen Sinuswert für kleine Winkel (bis 10°) mittels Geradengleichung sin (α) ~ α (Näherung (Approximation) ist Winkel im Bogenmaß!) Kosinusfunktion für kleine Winkel mittels Parabelfunktion cos (α) ~ 1 – 1.5·α² (Näherung ist Winkel im Bogenmaß!) inline void CalcRotXMatrixS( ) inline void CalcRotAxisMatrixS( ) { NormalizeVektor_If_Necessary( ) }

Schnelle Berechnung von Rotationsmatrizen Rotationsmatrizen für beliebige Winkel Berechnung der Sinus- und Kosinuswerte muß um paar Glieder erweitert werden für Winkel im Bereich -180° bis +180° positive Winkel > 180° müssen wegen Rechengenauigkeit in negative umgerechnet werden (Winkel – 360°), negative < 180° umgekehrt (360° + Winkel) Hinweis: bei der praktischen Anwendung Division durch Multiplikation ersetzen ! inline void CalcRotXMatrix( ) inline void CalcRotAxisMatrix( ) { NormalizeVektor_If_Necessary( ) }

Literatur BÜCHER: 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander Rodolph, Markt + Technik Verlag, München, 2003 INTERNET: https://www.htw-saarland.de/fb-gis/labore/strahlenschutz/ folder.2005-06-14.6092569165/physkriptEtechnikteil1.pdf iva.uni-ulm.de/physik/repetitorium/MATHEMATIK/10/10.html-4k de.wikipedia.org/wiki/Vektor - 41k