Download
game engine architechture 3d maths for games n.
Skip this Video
Loading SlideShow in 5 Seconds..
Game Engine Architechture 3D Maths for Games PowerPoint Presentation
Download Presentation
Game Engine Architechture 3D Maths for Games

Game Engine Architechture 3D Maths for Games

85 Vues Download Presentation
Télécharger la présentation

Game Engine Architechture 3D Maths for Games

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Game Engine Architechture3D 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 = (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

  6. 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

  7. 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

  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 MT : 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] 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

  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 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

  11. 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)

  12. 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

  13. 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

  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 [ 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

  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 <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

  20. 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