Computergrafik

Matrizen Rechnen

Matrizen APIs | | Matrizen Spezielle Matrizen

Zum Rechnen mit Matrizen wie üblich das Framework includen, außerdem zum Debuggen iostream:

#include <glvertex_qt_glui.h>
#include <iostream>
using namespace std;

Gleiche Datentypen und ähnliche Nutzung wie später in Shadern:

  • float
  • vec3
  • vec4
  • mat4 (oder mat4×4)
  • vec3, vec4
    Entsprechen C-Array (3 bzw. 4 floats)
  • mat4
    Entspricht 2-dimensionalen 4×4 Array (16 floats)
    Achtung: Entgegen normaler Gewohnheit in column-major Ordnung, d.h. Zugriff auf einzelne Elemente Ăźber matrix[spalte][zeile] (nicht anders herum, wie gewohnt)!
    Nochmal Achtung: Bei einer direkten Initialisierung ist das besonders spannend:
    double vals[] = {
            0,  1,  2,  3,
            4,  5,  6,  7,
            8,  9, 10, 11,
            12, 13, 14, 15 };
    mat4 matrix;
    matrix.fromOpenGL(vals);
    erzeugt 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)$

Weitere Initialisierungs-Beispiele (Vollständig, oder nur ein Wert):

mat4 unity (1);
vec4 vertex ( 1, 0, 2, 1 ), nocheinvertex ( 0, 1, 1, 0 ), eins (1);
vec4 result;
vec4 other = { 1, 2, 3, 4 };
float skalar;

Addition:

result = vertex + nocheinvertex;  // ditto: Subtraktion -

Multiplikation:

result = 2.0 * vertex;         // Achtung: alle(!) Komponenten, auch w
skalar = dot (vertex, nocheinvertex);
vec3 res3 = cross (vec3 (vertex), vec3 (nocheinvertex));
mat4 res4 = unity * matrix;    // Matrix-Matrix Multiplikation - nicht kommutativ!
result = matrix * vertex;      // Matrix-Vektor Multiplikation

Länge, Normierung, Inverse:

skalar = length (vertex);      // Auch: vertex.length() etc.
result = normalize (vertex);
res4   = inverse (matrix);
res4   = transpose (matrix);

Matrizen APIs | | Matrizen Spezielle Matrizen

Options: