Computergrafik
Transformationsbeispiel
← Skalierung | ● | OpenGL Komponenten →
Wir drücken die folgenden 2D Transformationen durch eine entsprechende homogene 3×3 Matrix aus:
- Rotation R um 90 Grad entgegen dem Uhrzeigersinn
- Translation T um den Vektor $(1,0)^T$
$ R = \left( \begin{array}{c c c} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array} \right) $
$ T = \left( \begin{array}{c c c} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) $
Wir berechnen die zusammengesetzte affine Transformationsmatrix:
$M = TR = $
$ = \left( \begin{array}{c c c} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array} \right) \cdot \left( \begin{array}{c c c} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array} \right) $
$ = \left( \begin{array}{c c c} 0 & -1 & 1 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array} \right) $
Und abschließend transformieren wir den Punkt $p = (2,0)^T$ mit der zusammengesetzten Matrix M:
$p' = M \cdot p$
Wir überprüfen zeichnerisch, dass der resultierende Punkt $p' = (1,2)^T$ ist (und nicht $(0,3)^T$)!
Wir überprüfen das Ergebis programmiertechnisch mit GLM bzw. GLSLmath (für 4×4 Matrizen):
mat4 M = mat4::translate(1,0,0) * mat4::rotate(90, 0,0,1);
glslmath::print(M);
vec4 p(2,0,0,1);
vec4 pt = M*p;
glslmath::print(pt);
glslmath::print(M);
vec4 p(2,0,0,1);
vec4 pt = M*p;
glslmath::print(pt);
Live Demo
← Skalierung | ● | OpenGL Komponenten →