Kapitel 5: Transformationen
Affine Transformationen (Translation, Rotation, Skalierung), ihre Verkettung als nicht-kommutative Matrixmultiplikation, homogene Koordinaten und der Szenegraph. Grundlage für die Positionierung aller Objekte in der Szene.
Überblick
Geometrische Objekte werden zuerst im lokalen Koordinatensystem (local / object coordinate system) modelliert und dann per Transformation ins gemeinsame Weltkoordinatensystem (world coordinate system) eingeordnet. Bewegt werden dabei nur die Vertices (Eckpunkte), geschrieben als Spaltenvektoren.
Roter Faden:
- Translation = Vektoraddition, Rotation/Skalierung = Matrixmultiplikation.
- Rotation und Skalierung wirken immer relativ zum Ursprung.
- Um additive und multiplikative Anteile in einer Matrix zu vereinen, braucht man homogene Koordinaten (4. Koordinate).
- Verkettungen sind nicht kommutativ: die Reihenfolge entscheidet.
Affine Transformationen
Affine Transformation (affine transformation) ist der Oberbegriff für Translation, Rotation und Skalierung. Eigenschaften:
- Was parallel ist, bleibt parallel.
- Teilverhältnisse (Länge, Fläche, Volumen) bleiben konstant.
Ein Punkt ist ein Spaltenvektor:
Translation (Verschiebung)
Reine Vektoraddition eines Translationsvektors . Neutrales Element: der Nullvektor.
Beispiel: Punkt , Translation :
Skalierung (Größenänderung)
Komponentenweise Multiplikation mit den Faktoren (neutrales Element: Faktor 1):
Wichtig (typische Falle): Skalierung ist nur gegenüber dem Nullpunkt invariant. Liegt ein Objekt nicht im Ursprung, wird sein Abstand zum Ursprung mitskaliert, also ändert sich neben der Größe auch die Position. Beispiel: ein Rechteck von bis wird mit zu einem Rechteck von bis .
Rotation (Drehung)
Drehung um einen Winkel , immer relativ zum Ursprung. Rotation um die Z-Achse:
Herleitung (2D): Die Spalten der Rotationsmatrix sind die Bilder der Einheitsvektoren. wird auf abgebildet (1. Spalte), auf (2. Spalte).
Beispiel: um Z (), Punkt :
Drehen/Skalieren um einen Referenzpunkt
Da Rotation und Skalierung nur um den Ursprung wirken, braucht man für einen beliebigen Referenzpunkt (reference point) einen dreistufigen Algorithmus:
- Referenzpunkt in den Ursprung verschieben:
- Transformation anwenden (z.B. )
- Zurückverschieben:
Im Code wird die Kette in umgekehrter Reihenfolge notiert:
Matrix4f m = new Matrix4f();
m.translate( 0.5, 0.7, 0.); // 3. Ruecktransformation (MT2)
m.rotate( 60., 0., 0., 1.); // 2. Rotation um Z (MR)
m.translate(-0.5,-0.7, 0.); // 1. in den Ursprung (MT1)
Reihenfolge: Nicht-Kommutativität
Matrixmultiplikation ist nicht kommutativ: . Bei Spaltenvektoren steht die zuerst anzuwendende Transformation ganz rechts (direkt an ).
Mit , Rotation (um Z) und Translation :
Hinweis (mögliche Unstimmigkeit in den Folien): Die konkreten Zahlenwerte hängen von der genauen Rotationsmatrix ab und lassen sich mit einer sauberen nicht exakt reproduzieren. Rechnet man mit R_z(90°)=\begin{psmallmatrix}0&-1&0\\1&0&0\\0&0&1\end{psmallmatrix} (nur die -Ebene), erhält man und . Die Kernaussage bleibt in jedem Fall dieselbe: , die Reihenfolge ist entscheidend.
Merksatz: "Die Geometrie wandert rückwärts durch das Programm und sammelt die Transformationen ein."
Wegen der Assoziativität sind beide Rechenwege äquivalent:
Rechts steht die akkumulierte Matrix : OpenGL multipliziert alle Transformationen zu einer Matrix zusammen und wendet sie dann einmal auf jeden Vertex an (schneller, weniger Rundungsfehler).
Homogene Koordinaten
Eine reine -Matrix kann keine Translation ausdrücken (Translation ist Addition, nicht Multiplikation). Lösung: eine zusätzliche 4. Koordinate (in 2D die 3.), also Abbildung von in den projektiven Raum :
Die Homogenisierung (perspective divide) kehrt in den euklidischen Raum zurück, indem man durch teilt ():
In der homogenen Matrix ist der obere linke Block der multiplikative Teil (Rotation/Skalierung), die letzte Spalte der additive Teil (Translation).
Die fünf 4x4-Transformationsmatrizen (prüfungsrelevant)
Vorzeichen-Merkhilfe: Bei steht oben rechts und unten links (spiegelverkehrt zu und ).
Szenegraph (scene graph)
Baumförmige Struktur zur Organisation einer Szene. Kind-Objekte erben die Transformationen ihrer Eltern. Für ein Blatt (Geometrie ) wird die Kette von der Wurzel zum Blatt multipliziert; die Wurzel-Transformation steht ganz links (wirkt als letzte, äußerste Transformation):
Beispiel Miniatursonnensystem: Wurzel = Rotation um die Y-Achse der Sonne.
- Sonne: (mit = Skalierung / "Pumpen")
- Erde: (mit = Translation weg von der Sonne + Rotation um eigene Y-Achse)
So umkreist die Erde die Sonne (geerbte ) und dreht sich zugleich um sich selbst.
Prüfungsrelevanz
- Die fünf 4x4-Matrizen aufstellen können (besonders das -Vorzeichenmuster).
- Konkrete Zahlenbeispiele nachrechnen (Translation, Skalierung, -Rotation).
- Warum homogene Koordinaten nötig sind und wie die Homogenisierung funktioniert.
- Nicht-Kommutativität und die umgekehrte Code-Reihenfolge.
- Referenzpunkt-Algorithmus .
- Szenegraph: Vererbung und die akkumulierte Kette für ein Blatt.
Typische Fehler
- Reihenfolge der Matrizen verwechseln (nicht kommutativ). Zuerst angewandte Transformation steht rechts.
- Vergessen, dass Rotation und Skalierung nur um den Ursprung wirken (nicht im Ursprung liegende Objekte verschieben sich mit).
- Falsches -Vorzeichen, vor allem bei .
- Homogenisierung (Division durch ) vergessen bzw. nicht ausschließen.
- Elterntransformation im Szenegraph als erste statt als letzte (äußerste) anwenden.
Glossar
| Deutsch | English |
|---|---|
| Vertex / Eckpunkt | vertex |
| Spaltenvektor | column vector |
| lokales / Weltkoordinatensystem | local / world coordinate system |
| affine Transformation | affine transformation |
| Translation / Rotation / Skalierung | translation / rotation / scaling |
| neutrales Element | identity element |
| nicht kommutativ | non-commutative |
| Referenzpunkt | reference point |
| akkumulierte Matrix | accumulated matrix |
| homogene Koordinaten | homogeneous coordinates |
| Homogenisierung | homogenization / perspective divide |
| Szenegraph | scene graph |
| Vererbung | inheritance |