Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Game Engine Architechture 3D Maths for Games

Ähnliche Präsentationen


Präsentation zum Thema: "Game Engine Architechture 3D Maths for Games"—  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 = (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 Länge des Kreuzprodukts: |a x b| = |a||b| sin(ѳ)
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= sy = sz , Objekte behalten Form 4x4 Matrizen haben immer ein [ ] Vektor; er wird weggelassen, wegen Speicherplatz

10 Konvertierungsmatrix: MC->P jC 0 Vektoren entspr. auf
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 i, j, k – unit basis Konvertierungsmatrix: MC->P jC 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 Quaternions q = [ 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 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 2250 Xorshift: schneller als Mother, Qualität zwischen Mersene & Mother


Herunterladen ppt "Game Engine Architechture 3D Maths for Games"

Ähnliche Präsentationen


Google-Anzeigen