200 likes | 298 Views
Game Engine Architechture 3D Maths for Games. Softwaretechnologoe II Dozent: Prof. Dr. Manfred Thaller Referentin: N. Steinert. Punkte und Vektoren Matrizen Quaternion Vergleich von Rotationalen Repräsentationen Andere nützliche mathematische Objekte Hardware- Accelerated SIMD Mathe
E N D
Game Engine Architechture3D Maths for Games Softwaretechnologoe II Dozent: Prof. Dr. Manfred Thaller Referentin: N. Steinert
Punkte und Vektoren • Matrizen • Quaternion • Vergleich von Rotationalen Repräsentationen • Andere nützliche mathematische Objekte • Hardware- Accelerated SIMD Mathe • Zufallszahl Generator
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ѳ )
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
Operationen mit Vektoren • Multiplikation mit Skalar: sa = (sax, say, saz) ;ändert die Größe des Vektors, negatives s ändert die Richtung • Hadamard Produkt/ Nonuniformes Skalieren – Multiplikation von zwei Vektoren: sa = (sx ax ,sy ay ,szaz) • Addition: a + b = [ (ax + bx), ( ay + by ),( az + bz ) ] • Subtraktion: a + (-b) = [ (ax - bx), (ay - by), (az - bz )] • 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
Normal Vektor – rechtwinklig zu einer Fläche, meistens mit Unitlänge ( Definition von Ebenen, Lichtberechnungen) • Punktprodukt: a.b = axbx + ayby + azbz = 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
Kreuzprodukt: Vektor, perpendikular zu den multiplizierten Vektoren a x b = [(aybz –azby), (azbx-axbz), (axby-aybx)] • 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
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 MT : Reihen werden Spalten und umgekehrt
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] S3x3 0 = [ rS3x3 1]; uniformes Skalieren sx= 0 1 sy = sz , Objekte behalten Form • 4x4 Matrizen haben immer ein [0 0 0 1] Vektor; er wird weggelassen, wegen Speicherplatz
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 iC 0 i, j, k – unit basis • Konvertierungsmatrix: MC->P jC 0 Vektoren entspr. auf kC 0 der Child x,y,z-Achsen tC 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
Punkte und Vektoren werden durch Matrix MA->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)
Quaternionsq = [ qx qy qz qw ] • Ein Quaternion von unit Länge (qx² + qy² + qz² + qw² = 1) repräsentiert dteidimensionale Rotation; kann betrachtet werden als 3D Vektor und Skalar ( qv qs ) • 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 q1, q2, q3 nacheinander ausf.; qnet = q3q2q1
Matrizen können in Quaternions konvertiert werden und umgekehrt (q = [ qv qs] = [x y z w] ) • Rotational Linear Interpolation: findet Rotationen ,die sich zwischen zwei bekannte Rotationspunkte befinden : qLERP = LERP(qA, qB, β); 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
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
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
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 [ Cx Cy Cz 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
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
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
Kodieren mit SSE ‚intrinsics‘ : Funktionen die direkt in Assembler übersetzt werden; #include <xmmintrin.h> 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
Zufallszahlen Generatordeterministische 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 219937-1 • 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 2250 • Xorshift: schneller als Mother, Qualität zwischen Mersene & Mother