Computergrafik
Linmath-Daten Rechnen
← GLM | ● | Linmath-Spezielle Matrizen →
linmath.h ist eine Alternative zu GLM, die mit reinem C Code auskommt (statt C++). Dementsprechend ist die Syntax weniger nah an den Mathematischen Ausdrücken und an GLSL ‘dran.
Gleiche Datentypen wie in Shadern:
- float
- vec3
- vec4
- mat4×4
Aber deutlich andere Nutzung (C, nicht GLSL…)
- vec3, vec4
Entsprechen C-Array (3 bzw. 4 floats) - mat4×4
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:mat4x4 m = { { 0, 1, 2, 3 },
{ 4, 5, 6, 7 },
{ 8, 9, 10, 11 },
{ 12, 13, 14, 15 } };
Initialisierung:
vec4 vertex = { 1, 0, 2, 1 }, nocheinvertex = { 0, 1, 1, 0 };
vec4 result;
float skalar;
vec4 result;
float skalar;
Addition:
vec4_add (result, vertex, nocheinvertex); // ditto: _sub()
Multiplikation:
vec4_scale (result, vertex, 2.0); // Achtung: alle(!) Komponenten, auch w
skalar = vec4_mul_inner (vertex, nocheinvertex);
vec4_mul_cross (result, vertex, nocheinvertex);
skalar = vec4_mul_inner (vertex, nocheinvertex);
vec4_mul_cross (result, vertex, nocheinvertex);
Länge, Normierung:
skalar = vec4_len (vertex);
vec4_norm (result, vertex);
vec4_norm (result, vertex);
Matrizen:
mat4x4 m_left, m_right, m_res;
mat4x4_identity (m_left);
mat4x4_dup (m_right, m_left);
mat4x4_add (m_res, m_left, m_right); // ditto: _sub
mat4x4_scale (m_res, m_left, 2.0); // Achtung: alle(!) Komponenten
mat4x4_mul (m_res, m_left, m_right);
mat4x4_invert (m_res, m_left);
mat4x4_identity (m_left);
mat4x4_dup (m_right, m_left);
mat4x4_add (m_res, m_left, m_right); // ditto: _sub
mat4x4_scale (m_res, m_left, 2.0); // Achtung: alle(!) Komponenten
mat4x4_mul (m_res, m_left, m_right);
mat4x4_invert (m_res, m_left);
Matrix-Vektor-Multiplikation:
mat4x4_mul_vec4 (result, m_left, vertex);
← GLM | ● | Linmath-Spezielle Matrizen →