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 z.B. nicht $(0,3)^T$!

Wir überprüfen das Ergebis programmiertechnisch mit GLM bzw. GLSLmath (für 4×4 Matrizen):

#include <glslmath.h>

int main()
{
  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);

  return(0);
}

Live Demo

Skalierung | | OpenGL Komponenten

Options: