Linmath-Beispiele
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);