Oyun Namdag Am 08.11.2007 WS 07/08 Proseminar Numerik: Mathematics for 3D game programming & computer graphics Dozenten: Prof. Dr. V. Schulz, C. Schillings Universität Trier Kapitel 3 Transformationen
3.1 Lineare Transformationen 3.2 Scaling Transformationen 3.3 Rotationstransformationen 3.4 Homogene Koordinatensysteme 3.5 Normal Vektor Transformationen 3.6 Quaternionen
3.1 Lineare Transformationen C C' P=(x, y, z) (x, y, z )
Lineare Transformation C auf C x '( xyz,, ) = Ux+ Vy+ Wz+ T 1 1 1 1 y'( x, y, z) = U x+ V y+ W z+ T 2 2 2 2 z '( xyz,, ) = Ux+ Vy+ Wz+ T 3 3 3 3 Vektor T: Translationsvektor vom Ursprung von C zum Ursprung C Matrix M: zeigt wie die Orientierung der Koordinatenachse verändert wird
In Matrixform x ' U1 V1 W1 x T1 y' = U V W y + T 2 2 2 2 z ' U3 V3 W 3 z T 3 Lineare Transformationen sind invertierbar: 1 x U1 V1 W1 x' T1 y = U V W y' T 2 2 2 2 z U3 V3 W 3 z' T 3
3.1.1 Orthogonale Matrizen Definition 3.1 Eine invertierbare nxn Matrix M wird orthogonal genannt, wenn und nur wenn Theorem 3.2-1 T M =M gilt. Wenn die Vektoren V, V,..., V eine orthonormale Menge 1 2 n bilden, dann ist die nxn Matrix, die konstruiert wird, indem die j-te Spalte gleich V j gesetzt wird, für alle 1 j n orthogonal. Beweis: Die Vektoren V 1, V 2,...,Vn sollen eine orthogonale Menge bilden und M sei eine nxn Matrix, deren Spalten von den V j s gegeben werden. Da die V j s orthonormal sind, gilt Vi V j =δij. T Weil der (i, j)-te Eintrag des MatrixproduktsMM gleich dem T Skalarprodukt Vi Vj ist, haben wir MM=I -1 T Deshalb ist M =M
Orthogonale Matrizen besitzen die Eigenschaften Längen und Winkel beizubehalten. P,P für alle Vektoren 1 2 MP = P (MP )(MP ) = P P 1 2 1 2
Rechthändiges Koordinatensystem 3.1.2 Handedness 1 2 3 Linkshändiges Koordinatensystem (V V ) V < 0 (V V ) V > 0 1 2 3
3.2 Scaling Transformationen Um einen Vektor P durch einen Faktor von a zu skalieren, rechnen wir einfach P ' = ap. a 0 0 Px P' = 0 a 0 P y 0 0 a P z Dies wird einheitliche Skalierung (uniform scale) genannt.
Wenn wir einen Vektor durch verschiedene Beträge entlang der x-, y-, und z-achsen skalieren möchten, benutzen wir P' a 0 0 Px = 0 b 0 P y 0 0 c P z
3.3 Rotationstransformationen y y, x xy, x
y Q = P, P y x P cosθ P θ Q sinθ P = P, P x y x
P resultiert aus der Rotation des Vektor P durch einen Winkel θ. Für die Komponenten von P : P' = Pcosθ + Qsin P ' = P cosθ P sinθ x x y P ' = P cosθ + P sinθ y y x Wir können dies in Matrixform umschreiben. θ P' cosθ sinθ = sinθ cos θ P
Diese 2D Rotationsmatrix kann zu einer Rotation um die z-, x-, und y-achse in 3D erweitert werden. R R R z x y cosθ sinθ 0 θ = sinθ cosθ 0 0 0 1 ( ) 1 0 0 θ = 0 cosθ sinθ 0 sinθ cosθ ( ) ( θ ) cosθ 0 sinθ = 0 1 0 sinθ 0 cosθ
3.3.1 Rotation um eine beliebige A Achse P sin α P A ist ein Einheitsvektor (A P)A proj P= A P A A ( ) perpa P=P- A P A ( ) α P- (A P)A
Wir können jetzt die Rotation auf durch eine Winkel θ als ( ) cosθ + ( ) P- A P A A P formulieren. Addiert man projap dazu, bekommen wir die Rotation des Vektors P um die A-Achse. ( ) Ersetzt man AxP und A(A P) durch perp P sinθ P' = Pcosθ + A P sin θ + A(A P) (1 cos θ) A A P 0 Az A y Px = Az 0 A x P y, Ay Ax 0 P z
A(A P) A AA AA P 2 = x x y x z x 1 2 A 2 x Ay Ay AyA z P y A 2 Ax Az AyAz A z P z dann bekommen wir 1 0 0 0 Az A y P' = 0 1 0 P cosθ + Az 0 AxP sinθ 0 0 1 Ay Ax 0 2 Ax AxAy AxA z 2 + AA x y Ay AA y zp(1 cos θ ) 2 AA x z AA y z A z
Setzt man c=cosθ und s= sinθ, dann bekommen wir die folgende Formel für die Matrix R A ( θ ), die einen Vektor durch einen Winkel θ um die A-Achse rotiert. R A c+ c A c A A sa c A A + sa ( θ ) = (1 caa ) + sa c+ (1 ca ) (1 caa ) sa (1 caa ) sa (1 caa ) + sa c+ (1 ca ) (1 ) 2 x (1 ) x y z (1 ) x z y 2 x y z y y z x 2 x z y y z x z
3.4 Homogene Koordinaten Eine wichtige Transformation ist die Translationsoperation. Diese kann nicht in Form einer 3x3 Matrix ausgedrückt werden. P' = MP + T M: 3x3 invertierbare Matrix T: ein 3D Translationsvektor Für zwei Operationen: P'=M 2(M1P+T)+T 1 2 =(M2M 1)P+M2T 1 +T2
3.4.1 Vierdimensionale Transformationen Wir erweitern unsere Vektoren zu 4D homogenen Koordinaten und verwenden 4x4 Matrizen, um sie zu transformieren. Ein 3D Punkt P wird zu vier Dimensionen erweitert, indem man seine vierte Koordinate, welche wir w-koordinate nennen, gleich 1 setzt. Wobei F: 4x4 Transformationsmatrix T: 3D Translation M: 3x3 Matrix F= M 0 T 1 M11 M12 M3 T M M M T 21 22 23 y = M 31 M32 M33 Tz 0 0 0 1 x
3.5 Normalen-Vektor Transformationen Transformation des Normalen-Vektors mit einer nicht orthogonalen Matrix M MN N
Finde eine Matrix G, mit der der Vektor N transformiert werden soll. Ein wenig algebraische Umordnug führt zu Da ist, gilt, wenn ist. daraus folgt T' = MT N' T' = (GN) (MT) =0 T T T (GN) (MT) = (GN) (MT) = N G MT T T T NT= 0 NGMT= 0-1 T G=(M ) T GM=I Die Vektoren werden contravariant vectors genannt.
3.6 Quaternionen - Rotationen darstellen - Benötigen wenig Speicherplatz - Verknüpfungen von Quaternionen benötigen weniger arithmetische Operationen als die Rotationsmatrizen Ring of Hamiltonian Quaternions q = ( wxyz,,, ) = w+ xi+ yj+ zk
in der Form eines Skalarvektors: q = s + v wobei s-skalar, v-vektor, der den x-, y-, und z-komponenten von q entspricht Die Rechenregeln: 2 2 2 i = j = k = i j k = 1 i j = k j k = i k i = j j i = k k j = i i k = j
Multiplikation ist nicht Kommutativ! Es seien q = w + xi+ y j+ zk und 2 2 2 2 2 1 1 1 1 1 q = w + x i+ y j+ zk qq = ( ww xx y y zz ) 1 2 1 2 1 2 1 2 1 2 ( 1 2 1 2 1 2 1 2) ( 1 2 1 2 1 2 1 2) ( ) + wx + xw + yz zy i + wx xw + yz + zy j + wx + xw yz + zy k 1 2 1 2 1 2 1 2 Wenn q = + v 2 2 2 1 s 1 1, q = s + v sind qq = ss v v + sv + sv + v v 1 2 1 2 1 2 1 2 2 1 1 2
Die Konjugation einer Quaternion q = s v qq = qq = q q = q 2 2 = q Theorem 3.5 Die Inverse einer nonzero Quaternion q bezeichnet man als 1 q, ist gegeben durch q 1 = q q 2 Einheitsquaternion: q w x y z = + i+ j+ k q q q q q, q 0
3.6.2 Rotation mit Quaternionen Die Rotation durch einen Winkel von θ um die Einheitsachse A ist gegeben durch θ θ q= cos + Asin 2 2 Die Rotationsmatrix, die der Quaternion q entspricht, ist gegeben durch: R q 2 2 1 2y 2z 2xy 2wz 2xz + 2wy 2 2 = 2xy + 2wz 1 2x 2z 2yz 2wx 2xz 2wy 2yz+ 2wx 1 2x 2y 2 2
Vielen Dank für Ihre Aufmerksamkeit!