Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Game Engine Architechture 3D Maths for Games Softwaretechnologoe II Dozent: Prof. Dr. Manfred Thaller Referentin: N. Steinert.

Ähnliche Präsentationen


Präsentation zum Thema: "Game Engine Architechture 3D Maths for Games Softwaretechnologoe II Dozent: Prof. Dr. Manfred Thaller Referentin: N. Steinert."—  Präsentation transkript:

1 Game Engine Architechture 3D Maths for Games Softwaretechnologoe II Dozent: Prof. Dr. Manfred Thaller Referentin: N. Steinert

2 Punkte und Vektoren Matrizen Quaternion Vergleich von Rotationalen Repräsentationen Andere nützliche mathematische Objekte Hardware- Accelerated SIMD Mathe Zufallszahl Generator

3 Punkte und Vektoren Ein Punkt ist eine Lokation in n-Dimensionalen Raum Arten von koordinaten Systemen –Cartesisches : P (Px, Py, Pz) Left-Handed Right-Handed –Zylindrisches : P (Ph, Pr, P ѳ ) –Sphärisches : P (Pr, P ϕ, P ѳ )

4 Vektoren haben Größe und Richtung –Positionsvektor – Anfang immer im Ursprung des Koordinaten Systems Vektoren und Punkte können durch drei Skalarwerte vorgestellt werden Cartesische Basisvektoren( rechtwinklig zu einander und mit Länge eins – entsprächen die drei Axen): i,j,k Punkte und Vektoren als Summe von Skalaren, multipliziert mit den Basisvektoren: (5,3,-2) = 5i+3j-2k

5 Operationen mit Vektoren Multiplikation mit Skalar: sa = (sa x, sa y, sa z ) ;ändert die Größe des Vektors, negatives s ändert die Richtung Hadamard Produkt/ Nonuniformes Skalieren – Multiplikation von zwei Vektoren: sa = (s x a x,s y a y,s z a z ) Addition: a + b = [ (a x + b x ), ( a y + b y ),( a z + b z ) ] Subtraktion: a + (-b) = [ (a x - b x ), (a y - b y ), (a z - b z )] Distanz zwischen Sphären finden, berechnen von Positionen in der nächsten Frame Unitvektor – mit der Länge eins Normalisation: u = v/ |v| = 1/v. v -> umwandeln von einem Vektor in Unitvektor

6 Normal Vektor – rechtwinklig zu einer Fläche, meistens mit Unitlänge ( Definition von Ebenen, Lichtberechnungen) Punktprodukt: a.b = a x b x + a y b y + a z b z = d (Skalar) oder a.b = |a| |b| cos( ѳ ) Vektorreihenfolge irrelevant Punktprodukttests: prüfen, ob Vektoren kollinear (a.b=|a||b|=ab ; a.b =-ab) o. perpendikular (a.b = 0) sind Testen, ob ein Punkt sich unter o. über eine Ebene befindet; ein Feind hinter o. vor einem Player Lineare Interpolation: findet Zwischenpunkte zwischen zwei Punkte

7 Kreuzprodukt: Vektor, perpendikular zu den multiplizierten Vektoren a x b = [(a y b z –a z b y ), (a z b x -a x b z ), (a x b y -a y b x )] Länge des Kreuzprodukts: |a x b| = |a||b| sin( ѳ ) Richtung : abhängig von Koordinaten System(LH o. RH) Eigenschaften: –a x b b x a aber a x b = -b x a –a x (b + c) = (a x b)+ (a x c) –(sa) x b = a x (sb) = s (a x b) Einsatz: –Finden von Unitvektor, normal zu einer Oberfläche –Physiksimulationen

8 Matrizen Matrizen werden für Transformationen benutzt, können multipliziert werden, nicht kommutativ (AB BA) Punkte und Vektoren können als Matrizen dargestellt werden Identitätsmatrix : multipliziert mit andere Matrix, ergibt immer dieselbe Matrix Inversion: die inverse Matrix von A tut das Gegenteil v. A AA ˉ ¹ = Identitätsmatrix Transposition M T : Reihen werden Spalten und umgekehrt

9 Translation: Punkt durch Vektor t verschieben: r + t = [r 1] I 0 = [(r+t) 1] t 1 Rotation: [r 1] R 0 = [rR 1] 0 1 Skalieren: [ r 1] S 3x3 0 = [ rS 3x3 1]; uniformes Skalieren s x = 0 1 s y = s z, Objekte behalten Form 4x4 Matrizen haben immer ein [ ] Vektor; er wird weggelassen, wegen Speicherplatz

10 Coordinate Space: die Koordinate eines Punktes werden anhand verschiedener Axen-Sets angegeben Model Space: Cartesisches Koordinaten System meistens in der Mitte des Models [F (ront), U (p), L (eft)] World Space: Zentrum ist willkürlich ausgewählt View( Camera) Space: im zentralen Punkt der Kamera Change of Basis: konvertieren von Objekten ín ein anderes KS i C 0 i, j, k – unit basis Konvertierungsmatrix: M C->P j C 0 Vektoren entspr. auf k C 0 der Child x,y,z-Achsen t C 0 in Parent-Koor t – Translation der Child-KS rel. zu Parent-KS Die unit Basis Vektoren können von einer beliebigen Transformationsmatrix extrahiert werden

11 Punkte und Vektoren werden durch Matrix M A->B transformiert Transformieren von Normale Vektoren durch die inverse Transpositionsmatrix (Mˉ¹ A->B ) T - Perpendikularität bleibt erhalten Matrizen im Speicher : in C/C++ als zweidimensionale Arrays: float M [4][4] Vektoren können in Zeilen oder Spalten gespeichert werden ( bei den meisten Engines in Zeilen)

12 Quaternions q = [ q x q y q z q w ] Ein Quaternion von unit Länge (q x ² + q y ² + q z ² + q w ² = 1) repräsentiert dteidimensionale Rotation; kann betrachtet werden als 3D Vektor und Skalar ( q v q s ) Operationen mit Quaternions: –Mltiplikation: representiert zusammengesetzte Rotationen nach einander –Inverse qˉ¹; zur errechnung conjugate q* = [-qv qs ] gebraucht: qˉ¹ = q*/|q|²; Rotieren von Vektoren: in Quaternionform bringen: v = [v 0] ; v = rotate(q,v) = qvqˉ¹ o. qvq* (quaternion immer unit Länge) q verknüpfen : Rotationen q 1, q 2, q 3 nacheinander ausf.; q net = q 3 q 2 q 1

13 Matrizen können in Quaternions konvertiert werden und umgekehrt (q = [ q v q s ] = [x y z w] ) Rotational Linear Interpolation: findet Rotationen,die sich zwischen zwei bekannte Rotationspunkte befinden : q LERP = LERP(q A, q B, β); resultierendes q normalisieren Spherical Linear Interpolation: berücksichtig,dass q Punkte auf eine 4D Hypersphere sind; benutzt als Gewichte die sin von den Winkel zwischen den q

14 Vergleich von Rotationalen Repräsntationen Eulersche Winkel: Roll-Nick-Gier-Winkel –intuitiv, einfach, kleine Größe, leicht zu interpolieren bei Rotation um eine Achse; Interpolation schwer um eine willkürliche Achse, bei 90° Drehung um z.B. x-Achse, y-Achse verschwindet in z-Achse 3x3 Matrizen: beliebige Rotation, auch von Punkten und Vektoren, Reversion durch inverse Matrize ; nicht intuitiv, keine leichte Interpolation, viel Speicherplatz Quaternions: Rotationen werden leicht verkettet und auf Vektoren und Punkte angewendet, leichte Interpolation, wenig Speicherplatz

15 SQT ( Skalar, Quaternion, Translationvektor) Transformation – alternativ zu 4x4 Matrize: sehr wenig Speicherplatz Doppelte Quaternoins: vier doppelte Komponente, benutzt für Transformationen; jedes doppelte Komponent kann durch zwei reale Zahlen repräsentiert werden

16 Andere nützliche Mathematische Objekte Linie: kann durch Punkt und Unitvektor dargestellt werden Strahl: Linie, die geht unendlich in nur eine Richtung Sphären : definiert durch Zentrum C und Radius r; passt gut in 4-Element-Vektor [ C x C y C z r] Ebenen: definiert durch einen Punkt und ein Normalvektor; können als Vektor gespeichert werden- L = [ n d] = [a b c d] d- Distanz zum Ursprung und werden mit inverse transposite Matrize (Mˉ¹ A->B ) transformiert

17 Achsenausgerichtet bounding Boxes: dargestellt als 6- Element-Vektor mit den min und max Punkt auf jeder Achse; benutzt um Kollisionen auszuschließen Gerichtete bounding Boxes: ausgerichtet auf die Achsen des dazugehörigen Objekts;Punkt wird in Objekt- Koordinate umgewandelt und geprüft, ob er drinliegt Stümpfe: benutz für die Kamere-Sicht, bestehen aus 6 Ebenen; prüfen, ob Punkt in alle 6 Ebenen drin liegt Convexe polyhedrale Regione: definiert durch beliebige Anzahl Ebenen; Punktprüfung wie bei Stümpfe

18 Hardware-Accelerated SIMD Math SIMD- single instruction multiple data: parallele Anwendung eines Befehls auf mehrere Daten SSE Registers:128-bit SSE haben vier 32-bit floats [x y z w]; Daten so lange wie möglich in SSE lassen, um die Kosten für Datentrasfer zwischen Speicher und Register zu minimieren _m128 Datentyp in C/C++ mit MVS für Deklaration von globale Variablen, class, struct; werden vom compiler im SSE Register gespeichert; Programmierer muss die _m128-Typelemente an 16-Byte Adressgrenze anpassen

19 Kodieren mit SSE intrinsics : Funktionen die direkt in Assembler übersetzt werden; #include um sie zu benutzen Vektor-Matrix- Multipikation mit SSE: r = vM,Vektor und Matrixreihen in SSE Register speichern, Vektorkomponente mit _mm_shuffle_ps in separate Register speichern, und mit den Matrixreihen multiplizieren, so wird das gesuchte Vektor in ein SSE Register gespeichert

20 Zufallszahlen Generator deterministische predefinierte Sequenzen von Zahlen Linear Congruential(übereinstimmend) Generator: benutzt in C Library rand(); Zufallsreihen schlecht; entsprechen nicht der Kriterien von Zufallstests Mersene Twister –Hat Periode von –Besteht viele Zufallstests auch Diehard –Ist schnell Mother-of-All und Xorshift von George Marsaglia ( Diehard Test) –Mother-of-All: 32-Bit Zufallszahlen mit Nichtwiederholungsperiode von –Xorshift: schneller als Mother, Qualität zwischen Mersene & Mother


Herunterladen ppt "Game Engine Architechture 3D Maths for Games Softwaretechnologoe II Dozent: Prof. Dr. Manfred Thaller Referentin: N. Steinert."

Ähnliche Präsentationen


Google-Anzeigen