Computergrafik

Linmath-Beispiele

Linmath-Spezielle Matrizen | | WebGL Shader

Was stellt man jetzt mit den Funktionen an?

Transformation eines Vertex

Erinnerung: Die entgültige Transformation eines Vektors geschieht über die Multiplikation an eine Model-View-Projektion-Matrix: $ v' = M_{MVP} \cdot v $

Berechnen der MVP-Matrix

Model-View-Projektion-Matrix: $ M_{MVP} = M_P \cdot M_V \cdot M_M $

Man fängt typischerweise links an zu rechnen, und multipliziert neue Matrizen rechts an die bereits berechnete heran. Vorteil: entspricht der inneren Logik (zuerst überlegen, wie man alles projiziert, dann wie die Kamera steht, dann wo die Objekte stehen, dann erst kümmert man sich um die Objekte selber).

Orthographische Projektion:
mat4x4_ortho     (mvp, -5, 5, -5, 5, -5, 5);
Perspektivische Projektion:
mat4x4 tmp;
vec3   eye = { 0, 10, 0 }, center = { 0, 0, 0 }, up = { 0, 0, 1 };

mat4x4_perspective (mvp, M_PI * .3, 1, 1, 100);
mat4x4_look_at     (tmp, eye, center, up);
mat4x4_mul         (mvp, mvp, tmp);

Achtung! Die Projektions-Matrix wird GESETZT und nicht rechts an die Matrix multipliziert, da sie in der Praxis oft getrennt an den Shader übergeben wird. Deshalb ist das mat4×4_mul() nötig.

Modelierung: Verschieben des Objekts (z.B. Teapot) auf eine vernünftige Position:
mat4x4_trans       (mvp, mvp, 0, 0, -1.5);
Modelierung: Bevor irgendetwas passiert, Rotieren des Objekts:
mat4x4_rotate_X    (mvp, mvp, M_PI * -.2);


Linmath-Spezielle Matrizen | | WebGL Shader

Options: