1 dreidimensionale spielewelten - die dritte dimension - themen: beschreibung der dreidimensionalen...

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

Upload: joachim-langenberg

Post on 06-Apr-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

11

Dreidimensionale Spielewelten Dreidimensionale Spielewelten - Die dritte Dimension -- Die dritte Dimension -

Themen:Themen:• Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen Spielewelt durch Vektoren• Dreidimensionale Wetltransformationen durch MatritzenDreidimensionale Wetltransformationen durch Matritzen• Schnelle QuadratwurzelberechnungSchnelle Quadratwurzelberechnung• Schnelle Berechnung von RotationsmatritzenSchnelle Berechnung von Rotationsmatritzen

Softwaretechnologie II - M. ThallerSoftwaretechnologie II - M. ThallerWintersemester 2005 / 2006Wintersemester 2005 / 2006

Referentin: Tanja LangeReferentin: Tanja Lange

Page 2: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

22

KoordinatensystemeKoordinatensysteme2 Arten 2 Arten der Erweiterung des zweidimensionalen Koordinatensystems in der Erweiterung des zweidimensionalen Koordinatensystems in die Dritte Dimension:die Dritte Dimension:Für DirectX-Programmierer: Für DirectX-Programmierer:

LinkssystemLinkssystem = positive z-Achse zeigt in Monitor = positive z-Achse zeigt in Monitor Rechtssystem = z-Achse zeigt in entgegengesetzte RichtungRechtssystem = z-Achse zeigt in entgegengesetzte Richtung

Page 3: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

33

Grundbegriffe: Definition Vektor Grundbegriffe: Definition Vektor ein Vektor ist eine Liste von Zahlen !ein Vektor ist eine Liste von Zahlen !ein Vektor ist eine gerichtete, orientierte Strecke im Raumein Vektor ist eine gerichtete, orientierte Strecke im RaumVektoren werden durch Pfeile repräsentiert.Vektoren werden durch Pfeile repräsentiert.Länge des Pfeils = Betrag des Vektors Länge des Pfeils = Betrag des Vektors In der Geometrie ist ein Vektor eine Klasse von Pfeilen In der Geometrie ist ein Vektor eine Klasse von Pfeilen gleicher Länge (Betrag), gleicher Richtung und gleicher gleicher Länge (Betrag), gleicher Richtung und gleicher Orientierung.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.

Page 4: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

44

Grundbegriffe:Grundbegriffe:Zeilenvektor: Bsp.: (3,-2,4)Zeilenvektor: Bsp.: (3,-2,4)33Spaltenvektor: Bsp.: -2Spaltenvektor: Bsp.: -244ein Punkt P wird durch Komponenten (Aein Punkt P wird durch Komponenten (Axx, A, Ayy, A, Azz) beschrieben) beschriebenBasisvektoren = senkrecht aufeinander stehende (orthogonale) Basisvektoren = senkrecht aufeinander stehende (orthogonale) Vektoren Vektoren Hilfestellung: Dreifinger-Regel !Hilfestellung: Dreifinger-Regel !Basisvektoren eines dreidimensionalen, Basisvektoren eines dreidimensionalen, rechtwinkligen Koordinatensystems:rechtwinkligen Koordinatensystems:

Basisvektor, der die x-Achse repräsentiert: i = (1 0 0)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 y-Achse repräsentiert: j = (0 1 0)Basisvektor, der die z-Achse repräsentiert: k = (0 0 1)Basisvektor, der die z-Achse repräsentiert: k = (0 0 1)

Ortsvektor = gebundener Vektor Ortsvektor = gebundener Vektor hat Ursprung bzw. hat Ursprung bzw. AusgangspunktAusgangspunktEinheitsvektor = Vektor mit Betrag 1 = normiertEinheitsvektor = Vektor mit Betrag 1 = normiertBezeichnung: eBezeichnung: exx, e, eyy, e, ezz

Page 5: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

55

Grundbegriffe:Grundbegriffe:Nullvektor = Vektor mit Betrag 0 Nullvektor = Vektor mit Betrag 0 Ursprung Ursprung Gegenvektor = gleicher Betrag, - Richtung, andere OrientierungGegenvektor = gleicher Betrag, - Richtung, andere OrientierungTranslation = Verschiebung Translation = Verschiebung VerschiebungsvektorVerschiebungsvektorVerbindungsvektor = zw. 2 Punkten P (=Schaft) und Q (=Spitze)Verbindungsvektor = zw. 2 Punkten P (=Schaft) und Q (=Spitze)Skalare = Beträge von Vektoren = gerichtete Größe Skalare = Beträge von Vektoren = gerichtete Größe kollinear = Parallel, Schreibweise: a || b, Antiparallel = kollinear = Parallel, Schreibweise: a || b, Antiparallel = entgegengesetztentgegengesetztLinearkombination = Summe vom Vielfachen von VektorenLinearkombination = Summe vom Vielfachen von VektorenDeterminante = in der linearen Algebra eine spezielle Funktion, die Determinante = in der linearen Algebra eine spezielle Funktion, die jeder quadratischen Matrix eine Zahl zuordnet. jeder quadratischen Matrix eine Zahl zuordnet. Matrix = stellt Anordnung von Elementen in mehreren Richtungen darMatrix = stellt Anordnung von Elementen in mehreren Richtungen dar

In der Informatik entspricht eine Matrix einem In der Informatik entspricht eine Matrix einem nn-dimensionalen Feld-dimensionalen FeldIn der linearen Algebra ist eine Matrix (Plural: Matrizen) eine Anordnung von In der linearen Algebra ist eine Matrix (Plural: Matrizen) eine Anordnung von Zahlenwerten (oder Operatoren) in Tabellenform. Man spricht von den Spalten Zahlenwerten (oder Operatoren) in Tabellenform. Man spricht von den Spalten und Zeilen der Matrix, und bezeichnet selbige auch als Vektoren (d.h. und Zeilen der Matrix, und bezeichnet selbige auch als Vektoren (d.h. Zeilenvektoren und Spaltenvektoren). Die Objekte, die in der Matrix angeordnet Zeilenvektoren und Spaltenvektoren). Die Objekte, die in der Matrix angeordnet sind, nennt man Komponenten oder Elemente der Matrix. sind, nennt man Komponenten oder Elemente der Matrix.

Page 6: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

66

Vektorprodukt (Kreuzprodukt)Vektorprodukt (Kreuzprodukt)ein weiteres Produkt (Vektor c) zweier Vektoren a und bein weiteres Produkt (Vektor c) zweier Vektoren a und bsteht senkrecht auf a und b steht senkrecht auf a und b c = a c = a •• b b c = 0 fürc = 0 für a || ba || b

! Nicht verwechseln: !! Nicht verwechseln: !Skalarprodukt (Punkt-):Skalarprodukt (Punkt-): a a •• b = |a| b = |a| • • |b| |b| • • coscosαα a a •• b = 0 für b = 0 für a a ┴ ┴ bb a a •• b = |a| b = |a| •• |b| für a || |b| für a || bb

Betrag Vektor c = Flächeninhalt A Betrag Vektor c = Flächeninhalt A |c| = |a| |c| = |a| •• |b| |b| •• sin sinαα |c| = |a| |c| = |a| •• |b| für |b| für a a ┴ ┴ b, weiter gilt: b, weiter gilt: c c ┴ ┴ a, ba, bFläche A ist vorzeichenbehaftet: Winkel > 180° Fläche A ist vorzeichenbehaftet: Winkel > 180° negatives negatives Vorzeichen, c entgegengesetzte RichtungVorzeichen, c entgegengesetzte RichtungBeim arbeiten mit negativem Winkel wird Reihenfolge der Beim arbeiten mit negativem Winkel wird Reihenfolge der Multiplikation der Vektoren a und b festgelegtMultiplikation der Vektoren a und b festgelegt

Da Vektoren c1 und Da Vektoren c1 und c2 antiparallel sind c2 antiparallel sind

Page 7: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

77

Berechnung des VektorproduktsBerechnung des Vektorproduktsmit Hilfe von Determinanten, Bsp.: eine 3x3 Determinante:mit Hilfe von Determinanten, Bsp.: eine 3x3 Determinante:Zur Berechnung wird Determinante mit Hilfe von Laplaceschen Zur Berechnung wird Determinante mit Hilfe von Laplaceschen Entwicklungssatz zerlegt:Entwicklungssatz zerlegt:

Hilfsmethode zur Berechnung der Komponenten:Hilfsmethode zur Berechnung der Komponenten:

1. Zeile: Basisvektoren1. Zeile: Basisvektoren2. Zeile: Komponenten des Vektors a2. Zeile: Komponenten des Vektors a3. Zeile: Komponenten des Vektors b3. Zeile: Komponenten des Vektors b

1 4 2 1 4 21 4 2 1 4 2d.h.: d.h.: -1 5 6 -1 5 6 = (1 -1 5 6 -1 5 6 = (1 · 5 · 5 · 3) · 3) ++ (4 · 6 · 2) (4 · 6 · 2) ++ (2 · (-1) · (-8)) (2 · (-1) · (-8)) –– (1 · 6 · (-8)) (1 · 6 · (-8)) –– (4 · (-1) · 3) (4 · (-1) · 3) –– (2 · 5 · 2) = 119 (2 · 5 · 2) = 119

2 -8 3 2 -8 32 -8 3 2 -8 3

In Spaltenform:In Spaltenform:

DirectX-Funktion: DirectX-Funktion: D3DXVector3* D3DXVec3Cross( )

Page 8: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

88

Polarkoordinaten Polarkoordinaten (Kugelkoordinaten)(Kugelkoordinaten)für Konstruktion von 3D-Szenarien einer Weltraumsimulation für Konstruktion von 3D-Szenarien einer Weltraumsimulation Bsp.: Bsp.: 3030° nach rechts drehen; 40° nach oben drehen; 0,5 aU geradeaus fliegen° nach rechts drehen; 40° nach oben drehen; 0,5 aU geradeaus fliegen

leichter zu interpretieren als kartesische Koordinaten leichter zu interpretieren als kartesische Koordinaten (x-, y-, z-)(x-, y-, z-)

Für eine dreidimensionale Polarkoordinatendarstellung benötigt Für eine dreidimensionale Polarkoordinatendarstellung benötigt man zwei Winkel sowie die Länge des Ortsvektorsman zwei Winkel sowie die Länge des Ortsvektors

x = Entfernung * cos(Vertikalwinkel) * sin(Horizontalwinkel)x = Entfernung * cos(Vertikalwinkel) * sin(Horizontalwinkel)y = Entfernung * sin(Vertikalwinkel)y = Entfernung * sin(Vertikalwinkel)z = Entfernung * cos(Vertikalwinkel) * cos(Horizontalwinkel)z = Entfernung * cos(Vertikalwinkel) * cos(Horizontalwinkel)

Horizontalwinkel = Horizontalwinkel = Drehung nach rechts (positiver Wert) oderDrehung nach rechts (positiver Wert) oder

links (negativer Wert)links (negativer Wert)

Vertikalwinkel = Vertikalwinkel = Drehung nach oben (positiver Wert) oder Drehung nach oben (positiver Wert) oder

unten (negativer Wert)unten (negativer Wert)

Page 9: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

99

QuadratwurzelberechnungQuadratwurzelberechnunghäufige Rechenoperation in einem Spiel im Zusammenhang mit häufige Rechenoperation in einem Spiel im Zusammenhang mit der Normierung und Längenberechnung von Vektorender Normierung und Längenberechnung von VektorenEntwicklung eigener, schneller Quadratwurzel-Routinen Entwicklung eigener, schneller Quadratwurzel-Routinen Prozessorleistung Prozessorleistung 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;

temp1Wurzel *= 1.5f-temp1Wurzel*temp1Wurzel*halfValue;

return Value*temp1Wurzel;}

Da Zeiger Da Zeiger ptrptr vom Typ vom Typ unsigned longunsigned long*, werden *, werden Bits als die einer Ganzzahl interpretiertBits als die einer Ganzzahl interpretiert

Prüfen, ob Wurzel von Null berechnet werden soll Prüfen, ob Wurzel von Null berechnet werden soll (da bei Division durch Null evtl. Programmabsturz)(da bei Division durch Null evtl. Programmabsturz)

Prüfen, ob Zahl zur QWB positiv istPrüfen, ob Zahl zur QWB positiv ist

Divisionen durch Multiplikation ersetzen !Divisionen durch Multiplikation ersetzen !

Näherungsverfahren durch Näherungsverfahren durch Iterationsverfahren nach dem Iterationsverfahren nach dem alten Heron:alten Heron:

Page 10: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1010

Längenberechnung & Normierung Längenberechnung & Normierung von Vektorenvon Vektoren

Funktion für die Berechnung des Vektorbetrags Funktion für die Berechnung des Vektorbetrags (unter Verwendung der (unter Verwendung der FastWurzelExact( )FastWurzelExact( ) – Funktion): – Funktion):

// Quadratische Länge des Vektors mittels // Quadratische Länge des Vektors mittels // // DirectX-Funktion D3DXVec3LengthSq( )DirectX-Funktion D3DXVec3LengthSq( ) // berechnet// berechnet

inline float Calculate3DVectorLength(D3DXVec3* pVectorIn){

if(*pVectorIn == NullVector){

return 0.0f;}

tempNorm = D3DXVec3LengthSq(pVectorIn);tempNorm = FastWurzelExact(tempNorm);

return tempNorm;}

Normierung eines Vektors: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

}

Page 11: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1111

Manipulation der 3D-WeltManipulation der 3D-WeltTransformation von Vektoren mit Hilfe von MatrizenTransformation von Vektoren mit Hilfe von Matrizen

Durch DirectX keine einzelnen Transformationen mehr notwendigDurch DirectX keine einzelnen Transformationen mehr notwendigNur Adresse der Transformationsmatrix an Nur Adresse der Transformationsmatrix an DirectX-Funktion DirectX-Funktion SetTransform( )SetTransform( ) mit Hinweis auf Weltkoordinatensystem mit Hinweis auf Weltkoordinatensystem (Welttransformation) übergeben(Welttransformation) übergeben die grafische Darstellung (Renderprozess) des Objekts erfolgt die grafische Darstellung (Renderprozess) des Objekts erfolgt dann in korrekter Größe (Skalierung), Ausrichtung und Verschiebung !dann in korrekter Größe (Skalierung), Ausrichtung und Verschiebung !

DirectX-Funktion: DirectX-Funktion: D3DXVector3* D3DXVec3TransformCoord( )

Page 12: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1212

Manipulation der 3D-WeltManipulation der 3D-Welt

SkalierungsmatrixSkalierungsmatrixSkalierungsmatrix S lässt sich ohne Skalierungsmatrix S lässt sich ohne Probleme um eine Dimension erweitern:Probleme um eine Dimension erweitern:

EinheitsmatrixEinheitsmatrixAlle Transformationsmatritzen werden Alle Transformationsmatritzen werden stets als Einheitsmatrix initialisiert:stets als Einheitsmatrix initialisiert:

DirectX-Funktion: DirectX-Funktion: D3DXMatrix* D3DXMatrixIdentity( )

DirectX-Funktion: DirectX-Funktion: D3DXMatrix* D3DXMatrixScaling( )

Translationsmatrix für die Bewegung im RaumTranslationsmatrix für die Bewegung im RaumErweiterung der Translationsmatrix TErweiterung der Translationsmatrix Tfür die Bewegung im Raum:für die Bewegung im Raum:

DirectX-Funktion: DirectX-Funktion: D3DXMatrix* D3DXMatrixTranslation( )

Page 13: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1313

Rotationsmatrizen für DrehungRotationsmatrizen für DrehungIm dreidimensionalen Raum kann sich ein Objekt um eine Im dreidimensionalen Raum kann sich ein Objekt um eine beliebig orientierte Achse drehenbeliebig orientierte Achse drehenRotation eines Vektors um Rotation eines Vektors um x-Achsex-Achse lässt sich durch drei lässt sich durch drei Gleichungen beschreiben:Gleichungen beschreiben: xxneuneu = x = x

yyneuneu = ycos = ycosαα - zsin - zsinααzzneuneu = ysin = ysinαα + zcos + zcosαα

Zugehörige Matrix Zugehörige Matrix RxRx hat folgenden Aufbau: hat folgenden Aufbau:

-y

-z

α2α1

Bsp. anhand dreier Winkel (0°, 90°, 180°)Bsp. anhand dreier Winkel (0°, 90°, 180°)Gleichung 1:Gleichung 1: Rotation um x-Achse beeinflußt x-Komponenten des Vektors nicht Rotation um x-Achse beeinflußt x-Komponenten des Vektors nichtGleichung 2:Gleichung 2: Drehung um 0° überführt alte y-Komponente in neue y- 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 90° überführt negative z-Komponente in neue y-Komponente, Drehung um 180° überführt y-Komponente in negative y-Komponente, Drehung um 180° überführt y-Komponente in negative y-KomponenteKomponenteGleichung 3:Gleichung 3: Drehung um 0° überführt alte z-Komponente in neue z- Drehung um 0° überführt alte z-Komponente in neue z-Komponente, Drehung um 90° überführt y-Komponente in neue z-Komponente, Komponente, Drehung um 90° überführt y-Komponente in neue z-Komponente, Drehung um 180° überführt z-Komponente in negative z-KomponenteDrehung um 180° überführt z-Komponente in negative z-Komponente

Page 14: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1414

Rotationsmatrizen für DrehungRotationsmatrizen für DrehungRotation eines Vektors um Rotation eines Vektors um y-Achse:y-Achse: xxneuneu = xcos = xcosαα + zsin + zsinααyyneuneu = y = yzzneuneu = -xsin = -xsinαα + zcos + zcosααZugehörige Matrix Zugehörige Matrix RyRy::

Rotation eines Vektors um Rotation eines Vektors um z-Achsez-Achse:: xxneuneu = xcos = xcosαα - ysin - ysinααyyneuneu = = xsinxsinαα + ycos + ycosααzzneuneu = z = zZugehörige Matrix Zugehörige Matrix RzRz::

DirectX-Funktion: DirectX-Funktion: D3DXMatrix* D3DXMatrixRotationX( )/…Y( )/…Z( )

Page 15: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1515

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

Rotationsmatrix für eine Drehung um beliebige Achse:Rotationsmatrix für eine Drehung um beliebige Achse:x, y, z = Komponenten der x, y, z = Komponenten der

normierten normierten RotationsachseRotationsachse

DirectX-Funktion: DirectX-Funktion: D3DXMatrix* D3DXMatrixInverse( )

DirectX-Funktion: DirectX-Funktion: D3DXMatrix* D3DXMatrixRotationAxis( )

Page 16: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1616

Frame-Rotationsmatrizen & Frame-Rotationsmatrizen & GesamtrotationsmatrizenGesamtrotationsmatrizen

Zwei Typen von Rotationsmatrizen:Zwei Typen von Rotationsmatrizen:Gesamtrotationsmatrix:Gesamtrotationsmatrix: verantwortlich für endgültige Ausrichtung verantwortlich für endgültige Ausrichtung eines Objekts aus dessen Anfangsorientierungeines Objekts aus dessen AnfangsorientierungFrame-Rotationsmatrix:Frame-Rotationsmatrix: beschreibt nur Drehung während des beschreibt nur Drehung während des aktuellen Framesaktuellen Frames neue Gesamtrotationsmatrix nach Framedrehung durch Multiplikation Frame-neue Gesamtrotationsmatrix nach Framedrehung durch Multiplikation Frame-Rotationsmatrix mit Gesamtrotationsmatrix des vorangegangenen Frames Rotationsmatrix mit Gesamtrotationsmatrix des vorangegangenen Frames (Multiplikationsreihenfolge abhängig von gegebenem Problem!)(Multiplikationsreihenfolge abhängig von gegebenem Problem!) Für Rotation von Planeten, Wolken und Asteroiden folgende Für Rotation von Planeten, Wolken und Asteroiden folgende

Multiplikation: Multiplikation: R(neue Rotationsmatrix) = R(alte Rotationsmatrix) * R(für Drehung pro Frame) R(neue Rotationsmatrix) = R(alte Rotationsmatrix) * R(für Drehung pro Frame)

Gesamtrotationsmatrix R muß zu Beginn des Spiels als Gesamtrotationsmatrix R muß zu Beginn des Spiels als Einheitsmatrix initialisiert werden Einheitsmatrix initialisiert werden D3DXMatrixIdentity( )

Zur Kurvenbewegung eines Raumschiffs wird Zur Kurvenbewegung eines Raumschiffs wird Multiplikationsreihenfolge umgedreht: Multiplikationsreihenfolge umgedreht:

R(neue Rotationsmatrix) = R(für Drehung pro Frame) * R(alte Rotationsmatrix)R(neue Rotationsmatrix) = R(für Drehung pro Frame) * R(alte Rotationsmatrix)

Page 17: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1717

Simulation von BewegungSimulation von BewegungBsp. für den Gebrauch (Simulation der Bewegung eines Bsp. für den Gebrauch (Simulation der Bewegung eines Asteroiden durch den Weltraum): Asteroiden durch den Weltraum):

Variablen zur Beschreibung der Bewegung:Variablen zur Beschreibung der Bewegung:D3DXVector3 Ortsvektor, Eigenverschiebung, Rotationsachse; float RotationsgeschwindigkeitD3DXVector3 Ortsvektor, Eigenverschiebung, Rotationsachse; float Rotationsgeschwindigkeit

Matrizen zur Transformation:Matrizen zur Transformation:D3DXMatrix Transformationsmatrix, Scalematrix, Rotationsmatrix, FrameRotationsmatrix, D3DXMatrix Transformationsmatrix, Scalematrix, Rotationsmatrix, FrameRotationsmatrix, TranslationsmatrixTranslationsmatrixals Einheitsmatrizen initialisieren: als Einheitsmatrizen initialisieren: D3DXMatrixIdentity( )D3DXMatrixIdentity( )Skalierungsmatrix erzeugen: Skalierungsmatrix erzeugen: Scalematrix._11 = scaleX, …Scalematrix._11 = scaleX, …Rotationsachse und –geschwindigkeit festlegenRotationsachse und –geschwindigkeit festlegenRotationsmatrix für Rotation von Frame zu Frame: Rotationsmatrix für Rotation von Frame zu Frame: D3DXMatrixRotationAxis( )D3DXMatrixRotationAxis( )

aktueller Ortsvektor: aktueller Ortsvektor: Ortsvektor = Ortsvektor + EigenverschiebungOrtsvektor = Ortsvektor + Eigenverschiebungaktuelle Translationsmatrix mit Hilfe von Ortsvektor erzeugen: aktuelle Translationsmatrix mit Hilfe von Ortsvektor erzeugen: Translationsmatrix._41 = Ortsvektor.x, …Translationsmatrix._41 = Ortsvektor.x, …aktuelle Rotationsmatrix: aktuelle Rotationsmatrix: Rotationsmatrix = Rotationsmatrix * FrameRotationsmatrixRotationsmatrix = Rotationsmatrix * FrameRotationsmatrix

Gesamttransformationsmatrix zur korrekten Darstellung im Raum: Gesamttransformationsmatrix zur korrekten Darstellung im Raum: Transformationsmatrix = Scalematrix * Rotationsmatrix * TranslationsmatrixTransformationsmatrix = Scalematrix * Rotationsmatrix * Translationsmatrix

Page 18: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1818

Schnelle Berechnung von Schnelle Berechnung von RotationsmatrizenRotationsmatrizen

Mehrere Funktionen zur Erzeugung von Rotationsmatrizen Mehrere Funktionen zur Erzeugung von Rotationsmatrizen Problem: bei Berechnung der Sinus- und Kosinuswerte relativ langsame API-FunktionProblem: bei Berechnung der Sinus- und Kosinuswerte relativ langsame API-FunktionComputer werden immer schneller, trotzdem keine unnötige Rechenzeit verschwenden !Computer werden immer schneller, trotzdem keine unnötige Rechenzeit verschwenden !

Rotationsmatrizen mitRotationsmatrizen mit Look-up-Tabellen Look-up-Tabellen erzeugen erzeugen Problem: Drehungen finden in zwei Richtungen statt Problem: Drehungen finden in zwei Richtungen statt

(Drehwinkel positiv oder negativ) (Drehwinkel positiv oder negativ) Speicherverschwendung (für Bereich -360° bis +360°) Speicherverschwendung (für Bereich -360° bis +360°) negative in positive Winkel umwandeln! negative in positive Winkel umwandeln! Winkel -10° = 350° (360° + (-10°)) Winkel -10° = 350° (360° + (-10°)) merke folgende Regel: 360° + neg. Winkel = pos. Winkelmerke folgende Regel: 360° + neg. Winkel = pos. Winkel

Rotationsmatrizen mitRotationsmatrizen mit gleichbleibendem Rotationswinkel gleichbleibendem Rotationswinkel falls diese ständig benötigt werden falls diese ständig benötigt werden einmal erzeugen und einmal erzeugen und

immer wieder verwenden (einfache Optimierungsmethode, die immer wieder verwenden (einfache Optimierungsmethode, die oft vergessen wird)oft vergessen wird)

Page 19: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

1919

Schnelle Berechnung von Schnelle Berechnung von RotationsmatrizenRotationsmatrizen

Rotationsmatrizen mit Hilfe von Rotationsmatrizen mit Hilfe von vorberechneten Sinus- und vorberechneten Sinus- und KosinuswertenKosinuswerten erzeugen erzeugen statt Winkel vorberechnete Sinus- und Kosinuswerte an statt Winkel vorberechnete Sinus- und Kosinuswerte an

entsprechende Funktion übergeben entsprechende Funktion übergeben (Richtung beachten! für z.B. -10° einfach neg. Wert übergeben)(Richtung beachten! für z.B. -10° einfach neg. Wert übergeben)

inline void CreateRotMatrix( )Rotationsmatrizen für Rotationsmatrizen für kleine Winkelkleine WinkelObjekte drehen sich in einem Frame nur um kleine Winkel Objekte drehen sich in einem Frame nur um kleine Winkel Frame-Rotationsmatrizen mit Sinus- und Kosinusnäherungen für Frame-Rotationsmatrizen mit Sinus- und Kosinusnäherungen für

kleine Drehwinkel berechenkleine Drehwinkel berechen SinuswertSinuswert für kleine Winkel (bis 10°) mittels Geradengleichung für kleine Winkel (bis 10°) mittels Geradengleichung

sin (sin (αα) ) ~~ αα (Näherung (Approximation) ist Winkel im Bogenmaß!) (Näherung (Approximation) ist Winkel im Bogenmaß!) KosinusfunktionKosinusfunktion für kleine Winkel mittels Parabelfunktion für kleine Winkel mittels Parabelfunktion

cos (cos (αα) ) ~~ 1 – 1.5 1 – 1.5··αα² (Näherung ist Winkel im Bogenmaß!)² (Näherung ist Winkel im Bogenmaß!)inline void CalcRotXMatrixS( )inline void CalcRotAxisMatrixS( ) { NormalizeVektor_If_Necessary( ) }

Page 20: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

2020

Schnelle Berechnung von Schnelle Berechnung von RotationsmatrizenRotationsmatrizen

Rotationsmatrizen für Rotationsmatrizen für beliebige Winkelbeliebige Winkel Berechnung der Sinus- und Kosinuswerte muß um paar Glieder Berechnung der Sinus- und Kosinuswerte muß um paar Glieder

erweitert werdenerweitert werdenfür Winkel im Bereich -180° bis +180° für Winkel im Bereich -180° bis +180° positive Winkel > 180° positive Winkel > 180° müssen wegen müssen wegen Rechengenauigkeit in negative Rechengenauigkeit in negative umgerechnet werden (Winkel – 360°), umgerechnet werden (Winkel – 360°), negative < 180° umgekehrt negative < 180° umgekehrt (360° + Winkel)(360° + Winkel)

Hinweis: bei der praktischen Anwendung Division durch Multiplikation Hinweis: bei der praktischen Anwendung Division durch Multiplikation ersetzen !ersetzen !inline void CalcRotXMatrix( )inline void CalcRotAxisMatrix( ) { NormalizeVektor_If_Necessary( ) }

Page 21: 1 Dreidimensionale Spielewelten - Die dritte Dimension - Themen: Beschreibung der dreidimensionalen Spielewelt durch VektorenBeschreibung der dreidimensionalen

2121

LiteraturLiteraturBÜCHER:BÜCHER:3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander Rodolph, 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander Rodolph, Markt + Technik Verlag, München, 2003Markt + Technik Verlag, München, 2003

INTERNET:INTERNET:https://https://www.htw-saarland.dewww.htw-saarland.de//fb-gisfb-gis//laborelabore//strahlenschutzstrahlenschutz/ folder.2005-06-14.6092569165/physkriptEtechnikteil1.pdf/ folder.2005-06-14.6092569165/physkriptEtechnikteil1.pdfiva.uni-ulm.de/physik/repetitorium/MATHEMATIK/10/10.html-4kiva.uni-ulm.de/physik/repetitorium/MATHEMATIK/10/10.html-4kde.wikipedia.org/wiki/Vektor - 41k de.wikipedia.org/wiki/Vektor - 41k