CARL
      VON
OSSIETZKY
            Transformationen

            Johannes Diemke

            ¨
            Ubung im Modul OpenGL mit Java
            Wintersemester 2010/2011
Motivation


Transformationen
   Sind Grundlage vieler Verfahren der Computergrafik
         Model- und View-Transformation
         Projektionstransformation
   Einsatz in vielen weiteren Verfahren
         Bump Mapping
         Shadow Mapping
         Billboarding
         ...
   Mathematische Grundlage sind lineare und affine Abbildungen
   mittels Matrizen




   Johannes Diemke            OpenGL mit Java      WiSe 2010 / 2011   2/26
Grundlagen


Matrix
   Rechteckige Anordnung von Elementen
   Schl¨sselkonzept der linearen Algebra
       u
   In der Computergrafik von elementarer Bedeutung:
         Lineare und affine Abbildungen
         Beschreiben Transformationen zwischen Koordinatensystemen
Notation
   Aneinanderreihung der Elemente in Zeilen und Spalten
   Durch fettgedruckte Großbuchstaben bezeichnet




   Johannes Diemke             OpenGL mit Java          WiSe 2010 / 2011   3/26
Grundlagen


Transponieren einer Matrix
   Die transponierte Matrix AT einer r×c-Matrix A ergibt sich durch
   Vertauschen der Zeilen mit den Spalten
   Das Ergebnis ist eine c×r-Matrix




   Transponieren als Involution

          (M T )T = M




    Johannes Diemke          OpenGL mit Java        WiSe 2010 / 2011   4/26
Grundlagen


Multiplikation mit einem Skalar
   Eine m×n-Matrix M kann mit einem Skalar k multipliziert werden
   Ergebnis ist wieder eine m×n-Matrix kM
   Jedes Element wird mit k multipliziert




    Johannes Diemke          OpenGL mit Java       WiSe 2010 / 2011   5/26
Grundlagen


Matrixmultiplikation
   Eine r×n-Matrix A kann mit einer n×c-Matrix B multipliziert werden
   Das Ergebnis ist eine r×c-Matrix




    Johannes Diemke          OpenGL mit Java        WiSe 2010 / 2011   6/26
Grundlagen


Matrixmultiplikation (Forts.)
    Die Elemente cij der r×c-Matrix C = AB ergeben sich zu




    Johannes Diemke          OpenGL mit Java        WiSe 2010 / 2011   7/26
Grundlagen


Rechenregeln f¨r Matrizen
              u
   Nicht kommutativ

         AB = BA

   Assoziativ

         (AB)C = A(BC )

   Inverse eines Produktes

         (AB)−1 = B −1 A−1

   Transponieren eines Produkts

         (AB)T = B T AT

   Johannes Diemke           OpenGL mit Java   WiSe 2010 / 2011   8/26
Grundlagen


Die Einheitsmatrix
   Spezielle Diagonalmatrix
   Hat nur Einsen auf der Diagonalen




   Neutrales Element bzgl. Multiplikation

          IA = AI = A




    Johannes Diemke           OpenGL mit Java   WiSe 2010 / 2011   9/26
Grundlagen


Vektoren als Matrizen
   Vektoren der Dimension n k¨nnen als Matrizen aufgefasst werden
                             o
          1×n-Matrix (Zeilenvektor)
          n×1-Matrix (Spaltenvektor)




   Aus geometrischer Sicht sind beide Notationen identisch
   Unterscheidung bei Matrixmultiplikation aber wichtig




    Johannes Diemke             OpenGL mit Java     WiSe 2010 / 2011   10/26
Grundlagen


Vektor-Matrix-Multiplikation
   M¨glich, da Vektoren als Matrizen aufgefasst werden k¨nnen
    o                                                   o
   Es gelten die gleichen Regeln




    Johannes Diemke          OpenGL mit Java       WiSe 2010 / 2011   11/26
Lineare Transformationen


Geometrische Interpretation
   Eine quadratische Matrix kann jede lineare Transformation
   beschreiben
          Gerade und parallele Geraden bleiben erhalten
          Der Urspung bewegt sich nicht
          L¨ngen, Winkel, Fl¨chen und Volumen k¨nnen sich aber ¨ndern
           a                a                     o            a
   Lineare Transformationen
          Rotation
          Skalierung
          Reflexion
          Scherung
          Orthographische Projektion




    Johannes Diemke             OpenGL mit Java         WiSe 2010 / 2011   12/26
Lineare Transformationen


Wie transformiert eine Matrix einen Vektor?
   Ein Vektor kann als Linearkombination von Basisvektoren aufgefasst
   werden




   Bezeichnen wir die Basisvektoren mit e1 , e2 und e3 erhalten wir

          v = xe1 + y e2 + ze3

   Der Vektor v kann durch einen Basiswechsel auf v abgebildet
   werden

          v = xa1 + y a2 + za3

    Johannes Diemke              OpenGL mit Java      WiSe 2010 / 2011   13/26
Lineare Transformationen


Wie transformiert eine Matrix einen Vektor? (Forts.)
   v hat im neuen System immer noch dieselben Komponenten wie v
   Bzgl. des [e1 , e2 , e3 ]-Systems haben sie sich aber ge¨ndert
                                                           a




    Johannes Diemke        OpenGL mit Java        WiSe 2010 / 2011   14/26
Lineare Transformationen


Wie transformiert eine Matrix einen Vektor? (Forts.)
   Die Komponente des Vektors v im [e1 , e2 , e3 ]-Systems ergeben sich
   zu

          v = xa1 + y a2 + za3

   Das l¨ßt sich aber pr¨gnanter durch eine Matrixmultiplikation
        a               a
   ausdr¨cken
        u

                                
                a1x   a2x   a3x     x
          v =  a1y   a2y   a3y   y  = Av
                a1z   a2z   a3z     z



    Johannes Diemke              OpenGL mit Java     WiSe 2010 / 2011   15/26
Lineare Transformationen


Zusammenfassung
   Die Spalten einer Matrix k¨nnen als Basisvektoren aufgefasst werden
                             o
   Multiplikation mit einer Matrix M
         F¨hrt zu Basiswechsel
          u
         Transformation von einem Koordinatensystem in ein anderes
         Gibt an wie v nach Basiswechsel im alten Koordinatensystem aussieht
   Konkatenation von Transformationen durch Matrixmultiplikation

         v = (A4 (A3 (A2 (A1 v )))) = (A4 A3 A2 A1 )v

   Lineare Transformationen erm¨glichen keine Translation
                               o

         v = A0 = 0


   Johannes Diemke              OpenGL mit Java          WiSe 2010 / 2011   16/26
Lineare Transformationen


Visualisieren einer Transformationsmatrix
   Jede Spalte der Matrix stellt einen Basisvektor nach der
   Transformation dar
          a1 = Ae1
          a2 = Ae2
          a3 = Ae3
   a1 , a2 und a3 stellen die Achsen nach der Transformation dar
   Aus dieser Einsicht folgt
          Konstruktion einer Matrix f¨r gegebene Transformation ist einfach
                                     u
          Wie wirkt sich die Transformation auf die Basisvektoren aus?
          Transformierte Basisvektoren bilden dann die Matrix




    Johannes Diemke              OpenGL mit Java           WiSe 2010 / 2011   17/26
Lineare Transformationen


Visualisieren einer Transformationsmatrix (Forts.)
    Darstellung der Basisvektoren einer Transformation




    Johannes Diemke           OpenGL mit Java            WiSe 2010 / 2011   18/26
Lineare Transformationen


Skalierung
   Die Skalierung ist eine lineare Abbildung
   Vegr¨ßert oder verkleinert
        o                           Vektoren
                                           
                             kx      0 0
        S(kx , ky , kz ) =  0      ky 0 
                             0       0 kz
   Inverse

          S −1 (kx , ky , kz ) = S(1/kx , 1/ky , 1/kz )




    Johannes Diemke                 OpenGL mit Java       WiSe 2010 / 2011   19/26
Lineare Transformationen


Rotation
   Die Rotation ist eine lineare Abbildung
   Rotiert Vektoren
                                   
                   cos θ − sin θ 0
        Rz (θ) =  sin θ cos θ 0 
                     0      0     1
   Rotations-Matrizen sind orthogonal
           AAT = I
         A−1 = AT
   Inverse
          −1                 T
         Rz (θ) = Rz (−θ) = Rz (θ)


   Johannes Diemke           OpenGL mit Java   WiSe 2010 / 2011   20/26
Lineare Transformationen


Rotation (Forts.)
   Rotation um die x-Achse
                                       
                   1     0    0
        Rx (θ) =  0 cos θ − sin θ      
                   0 sin θ cos θ
   Rotation umd die y-Achse
                                       
                    cos θ 0 sin θ
        Ry (θ) =     0    1   0        
                   − sin θ 0 cos θ
   Inverse
           −1                 T
          Rx (θ) = Rx (−θ) = Rx (θ)
           −1                 T
          Ry (θ) = Ry (−θ) = Ry (θ)


    Johannes Diemke          OpenGL mit Java   WiSe 2010 / 2011   21/26
Affine Transformationen


Affine Transformationen
   Sind ein wichtiges Hilfsmittel in der Computergrafik
         Erm¨glichen Orientierung und Bewegung
             o
         Lineare Abbildung plus Translation


   x = Ax + p
Problem
   Transformationen nicht mehr uber reine Matrixmultiplikation
                               ¨
   m¨glich
     o
   Konkatenation auch nicht
   L¨sung: Homogene Koordinaten
    o



   Johannes Diemke            OpenGL mit Java        WiSe 2010 / 2011   22/26
Affine Transformationen


Homogene Koordinaten
   Eine affine Abbildung x = Ax + p kann in eine Matrixmultiplikation
   uberf¨hrt werden
   ¨    u

         x = Mx

   Dazu ist M folgendermaßen zu w¨hlen
                                  a
                                 
                a1,1 a1,2 a1,3 p1
              a     a    a    p 
        M =  2,1 2,2 2,3 2 
              a3,1 a3,2 a3,3 p3 
                  0    0    0   1
   x ist dann in homogene Koordinaten x zu uberf¨hren
                                           ¨    u

         (x1 , x2 , x3 ) → (x1 , x2 , x3 , 1)

   Johannes Diemke                    OpenGL mit Java   WiSe 2010 / 2011   23/26
Affine Transformationen


Homogene Koordinaten (Forts.)
   M kann uber eine Matrixdekomposition zerlegt werden
          ¨
         Linearer Anteil R
         Affiner Anteil T
                                                           
                    1        0   0 p1     a1,1 a1,2 a1,3    0
                   0        1   0 p2   a2,1 a2,2 a2,3    0 
         M = TR = 
                   0
                                                            
                             0   1 p3   a3,1 a3,2 a3,3    0 
                    0        0   0 1       0    0    0      1
Vorteile homogener Koordinaten
   Einheitliche Behandlung aller Transformationen
   Konkatenation von Transformationen durch Matrixmultiplikation
   Komplexe Transformationen durch Gesamttransformationsmatrix

   Johannes Diemke               OpenGL mit Java      WiSe 2010 / 2011   24/26
Literatur


 Dave Shreiner
 OpenGL Programming Guide
 http://www.opengl-redbook.com/
 Richard S. Wright, Benjamin Lipchak und Nicholas Haemel
 OpenGL SuperBibel
 http://www.starstonesoftware.com/OpenGL/
 Randi J. Rost
 OpenGL Shading Language
 http://www.3dshaders.com/
 Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman
                o
 Real-Time Rendering
 http://www.realtimerendering.com/

   Johannes Diemke           OpenGL mit Java      WiSe 2010 / 2011   25/26
Literatur


 Edward Angel
 Interactive Computer Graphics
 http://www.cs.unm.edu/˜angel/
 Gerald Farin und Dianne Hansford
 Practical Linear Algebra
 http://www.farinhansford.com/books/pla/
 Fletcher Dunn und Ian Parberry
 3D Math Primer for Graphics and Game Development
 www.gamemath.com/




   Johannes Diemke          OpenGL mit Java   WiSe 2010 / 2011   26/26

2010-JOGL-05-Transformationen

  • 1.
    CARL VON OSSIETZKY Transformationen Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  • 2.
    Motivation Transformationen Sind Grundlage vieler Verfahren der Computergrafik Model- und View-Transformation Projektionstransformation Einsatz in vielen weiteren Verfahren Bump Mapping Shadow Mapping Billboarding ... Mathematische Grundlage sind lineare und affine Abbildungen mittels Matrizen Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/26
  • 3.
    Grundlagen Matrix Rechteckige Anordnung von Elementen Schl¨sselkonzept der linearen Algebra u In der Computergrafik von elementarer Bedeutung: Lineare und affine Abbildungen Beschreiben Transformationen zwischen Koordinatensystemen Notation Aneinanderreihung der Elemente in Zeilen und Spalten Durch fettgedruckte Großbuchstaben bezeichnet Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/26
  • 4.
    Grundlagen Transponieren einer Matrix Die transponierte Matrix AT einer r×c-Matrix A ergibt sich durch Vertauschen der Zeilen mit den Spalten Das Ergebnis ist eine c×r-Matrix Transponieren als Involution (M T )T = M Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/26
  • 5.
    Grundlagen Multiplikation mit einemSkalar Eine m×n-Matrix M kann mit einem Skalar k multipliziert werden Ergebnis ist wieder eine m×n-Matrix kM Jedes Element wird mit k multipliziert Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/26
  • 6.
    Grundlagen Matrixmultiplikation Eine r×n-Matrix A kann mit einer n×c-Matrix B multipliziert werden Das Ergebnis ist eine r×c-Matrix Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/26
  • 7.
    Grundlagen Matrixmultiplikation (Forts.) Die Elemente cij der r×c-Matrix C = AB ergeben sich zu Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/26
  • 8.
    Grundlagen Rechenregeln f¨r Matrizen u Nicht kommutativ AB = BA Assoziativ (AB)C = A(BC ) Inverse eines Produktes (AB)−1 = B −1 A−1 Transponieren eines Produkts (AB)T = B T AT Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/26
  • 9.
    Grundlagen Die Einheitsmatrix Spezielle Diagonalmatrix Hat nur Einsen auf der Diagonalen Neutrales Element bzgl. Multiplikation IA = AI = A Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/26
  • 10.
    Grundlagen Vektoren als Matrizen Vektoren der Dimension n k¨nnen als Matrizen aufgefasst werden o 1×n-Matrix (Zeilenvektor) n×1-Matrix (Spaltenvektor) Aus geometrischer Sicht sind beide Notationen identisch Unterscheidung bei Matrixmultiplikation aber wichtig Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/26
  • 11.
    Grundlagen Vektor-Matrix-Multiplikation M¨glich, da Vektoren als Matrizen aufgefasst werden k¨nnen o o Es gelten die gleichen Regeln Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/26
  • 12.
    Lineare Transformationen Geometrische Interpretation Eine quadratische Matrix kann jede lineare Transformation beschreiben Gerade und parallele Geraden bleiben erhalten Der Urspung bewegt sich nicht L¨ngen, Winkel, Fl¨chen und Volumen k¨nnen sich aber ¨ndern a a o a Lineare Transformationen Rotation Skalierung Reflexion Scherung Orthographische Projektion Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/26
  • 13.
    Lineare Transformationen Wie transformierteine Matrix einen Vektor? Ein Vektor kann als Linearkombination von Basisvektoren aufgefasst werden Bezeichnen wir die Basisvektoren mit e1 , e2 und e3 erhalten wir v = xe1 + y e2 + ze3 Der Vektor v kann durch einen Basiswechsel auf v abgebildet werden v = xa1 + y a2 + za3 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/26
  • 14.
    Lineare Transformationen Wie transformierteine Matrix einen Vektor? (Forts.) v hat im neuen System immer noch dieselben Komponenten wie v Bzgl. des [e1 , e2 , e3 ]-Systems haben sie sich aber ge¨ndert a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/26
  • 15.
    Lineare Transformationen Wie transformierteine Matrix einen Vektor? (Forts.) Die Komponente des Vektors v im [e1 , e2 , e3 ]-Systems ergeben sich zu v = xa1 + y a2 + za3 Das l¨ßt sich aber pr¨gnanter durch eine Matrixmultiplikation a a ausdr¨cken u    a1x a2x a3x x v =  a1y a2y a3y   y  = Av a1z a2z a3z z Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/26
  • 16.
    Lineare Transformationen Zusammenfassung Die Spalten einer Matrix k¨nnen als Basisvektoren aufgefasst werden o Multiplikation mit einer Matrix M F¨hrt zu Basiswechsel u Transformation von einem Koordinatensystem in ein anderes Gibt an wie v nach Basiswechsel im alten Koordinatensystem aussieht Konkatenation von Transformationen durch Matrixmultiplikation v = (A4 (A3 (A2 (A1 v )))) = (A4 A3 A2 A1 )v Lineare Transformationen erm¨glichen keine Translation o v = A0 = 0 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/26
  • 17.
    Lineare Transformationen Visualisieren einerTransformationsmatrix Jede Spalte der Matrix stellt einen Basisvektor nach der Transformation dar a1 = Ae1 a2 = Ae2 a3 = Ae3 a1 , a2 und a3 stellen die Achsen nach der Transformation dar Aus dieser Einsicht folgt Konstruktion einer Matrix f¨r gegebene Transformation ist einfach u Wie wirkt sich die Transformation auf die Basisvektoren aus? Transformierte Basisvektoren bilden dann die Matrix Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/26
  • 18.
    Lineare Transformationen Visualisieren einerTransformationsmatrix (Forts.) Darstellung der Basisvektoren einer Transformation Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/26
  • 19.
    Lineare Transformationen Skalierung Die Skalierung ist eine lineare Abbildung Vegr¨ßert oder verkleinert o Vektoren   kx 0 0 S(kx , ky , kz ) =  0 ky 0  0 0 kz Inverse S −1 (kx , ky , kz ) = S(1/kx , 1/ky , 1/kz ) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 19/26
  • 20.
    Lineare Transformationen Rotation Die Rotation ist eine lineare Abbildung Rotiert Vektoren   cos θ − sin θ 0 Rz (θ) =  sin θ cos θ 0  0 0 1 Rotations-Matrizen sind orthogonal AAT = I A−1 = AT Inverse −1 T Rz (θ) = Rz (−θ) = Rz (θ) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 20/26
  • 21.
    Lineare Transformationen Rotation (Forts.) Rotation um die x-Achse   1 0 0 Rx (θ) =  0 cos θ − sin θ  0 sin θ cos θ Rotation umd die y-Achse   cos θ 0 sin θ Ry (θ) =  0 1 0  − sin θ 0 cos θ Inverse −1 T Rx (θ) = Rx (−θ) = Rx (θ) −1 T Ry (θ) = Ry (−θ) = Ry (θ) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/26
  • 22.
    Affine Transformationen Affine Transformationen Sind ein wichtiges Hilfsmittel in der Computergrafik Erm¨glichen Orientierung und Bewegung o Lineare Abbildung plus Translation x = Ax + p Problem Transformationen nicht mehr uber reine Matrixmultiplikation ¨ m¨glich o Konkatenation auch nicht L¨sung: Homogene Koordinaten o Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 22/26
  • 23.
    Affine Transformationen Homogene Koordinaten Eine affine Abbildung x = Ax + p kann in eine Matrixmultiplikation uberf¨hrt werden ¨ u x = Mx Dazu ist M folgendermaßen zu w¨hlen a   a1,1 a1,2 a1,3 p1  a a a p  M =  2,1 2,2 2,3 2   a3,1 a3,2 a3,3 p3  0 0 0 1 x ist dann in homogene Koordinaten x zu uberf¨hren ¨ u (x1 , x2 , x3 ) → (x1 , x2 , x3 , 1) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 23/26
  • 24.
    Affine Transformationen Homogene Koordinaten(Forts.) M kann uber eine Matrixdekomposition zerlegt werden ¨ Linearer Anteil R Affiner Anteil T    1 0 0 p1 a1,1 a1,2 a1,3 0  0 1 0 p2   a2,1 a2,2 a2,3 0  M = TR =   0   0 1 p3   a3,1 a3,2 a3,3 0  0 0 0 1 0 0 0 1 Vorteile homogener Koordinaten Einheitliche Behandlung aller Transformationen Konkatenation von Transformationen durch Matrixmultiplikation Komplexe Transformationen durch Gesamttransformationsmatrix Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 24/26
  • 25.
    Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Nicholas Haemel OpenGL SuperBibel http://www.starstonesoftware.com/OpenGL/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26
  • 26.
    Literatur Edward Angel Interactive Computer Graphics http://www.cs.unm.edu/˜angel/ Gerald Farin und Dianne Hansford Practical Linear Algebra http://www.farinhansford.com/books/pla/ Fletcher Dunn und Ian Parberry 3D Math Primer for Graphics and Game Development www.gamemath.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 26/26