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;
#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 Ăźbermatrix[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);
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;
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
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);
result = normalize (vertex);
res4 = inverse (matrix);
res4 = transpose (matrix);