Computergrafik

Matrizen Spezielle Matrizen

Matrizen Rechnen | | MatrizenBeispiele

Entsprechende alte hier angegebene OpenGL-Befehle googlen, die man-Pages enthalten eine Menge nützlicher Informationen!

float skalar;
vec3  v3;
vec4  v4;

Transformationen / Modellierung

Die meisten Funktionen können nicht nur die Matrix erstellen, sondern multiplizieren diese an eine bereits bestehende Matrix (Standard-Anwendungsfall). Das kann ggf. schneller sein, und saubereren Code erzeugen.

  • Translation:
    Beispiel: Erstelle die Translationsmatrix um (1,2,3):
    mat4 m = mat4::translate (vec3 (1,2,3));
    mat4 m = mat4::translate (1,2,3);            // alternativ ohne Vektor
    Multipliziert wird eine Translationsmatrix rechts an m_left mit
    mat4 m = m_left * mat4::translate (v3);
    mat4 m = translate (m_left, v3);             // alternative Schreibweise
    Siehe auch glTranslate()
  • Rotation:
    Beispiel: Rotation um 90 Grad um die X-Achse:
      mat4 m = mat4::rotate (90, vec3 (1,0,0));
    Multipliziert wird eine Rotation-Matrix um Vektor v3 rechts an m_left mit
    mat4 m = m_left * mat4::rotate (winkel, v3);
    mat4 m = rotate (m_left, winkel, v3);        // alternativ
    Winkel in Grad
    Siehe auch glRotate()
  • Skalierung:
    Beispiel: Skalierung umd den Faktor 2:
      mat4 m = mat4::scale (2,2,2);
    Multipliziert wird eine Skalierungsmatrix rechts an m_left mit
    mat4 m = m_left * mat4::scale (v3);
    mat4 m = scale (m_left, v3);                // alternativ
    (Achtung: einfach 2.0 * m_left zu schreiben multipliziert ALLE Elemente der Matrix… Auch w!)
    Siehe auch glScale()

View-Transformation

  • Kamera-Transformation:
    Erstellt eine View-Transformation (kein Multiplizieren an bereits bestehende Matrix!)
    Siehe auch gluLookAt()
    mat4 view = mat4::lookat (vec3 eye, vec3 center, vec3 up);

Projektionen

  • Frustum für eine orthographische Projektion (ohne perspektivische Verkürzung):
    Siehe auch glOrtho()
    mat4 proj = mat4::ortho (l, r, b, t, n, f);
  • Frustum gemäß Projektionsmatrix:
    Siehe auch glFrustum()
    mat4 proj = mat4::frustum (l, r, b, t, n, f); // not yet
  • Frustum entsprechend den alternativen Parametern (beschrieben in ViewKamera):
    Siehe auch gluPerspective()
    mat4 proj = mat4::perspective (fovy, aspect, n, f);

Hilfsfunktionen / Daten

  • Matrix-Ausgabe:
    cout << m_res;

    Die Matrix $\left( \begin{array}{cccc}0 & 4 & 8 & 12 \\1 & 5 & 9 & 13 \\2 & 6 & 10 & 14 \\3 & 7 & 11 & 15 \end{array} \right)$ wird (zeilenweise) so ausgegeben:
    ((0, 4, 8, 12), (1, 5, 9, 13), (2, 6, 10, 14), (3, 7, 11, 15))
    


Matrizen Rechnen | | MatrizenBeispiele

Options: