3D Affine Transforms (common)

Common transform functions.

Table of contents (click to go):

Functions:

  1. glm_translate_make()

  2. glm_scale_to()

  3. glm_scale_make()

  4. glm_scale()

  5. glm_scale_uni()

  6. glm_rotate_make()

  7. glm_rotate_atm()

  8. glm_decompose_scalev()

  9. glm_uniscaled()

  10. glm_decompose_rs()

  11. glm_decompose()

Functions documentation

void glm_translate_make(mat4 m, vec3 v)

creates NEW translate transform matrix by v vector.

Parameters:
[in, out] m affine transform
[in] v translate vector [x, y, z]
void glm_scale_to(mat4 m, vec3 v, mat4 dest)

scale existing transform matrix by v vector and store result in dest

Parameters:
[in] m affine transform
[in] v scale vector [x, y, z]
[out] dest scaled matrix
void glm_scale_make(mat4 m, vec3 v)

creates NEW scale matrix by v vector

Parameters:
[out] m affine transform
[in] v scale vector [x, y, z]
void glm_scale(mat4 m, vec3 v)

scales existing transform matrix by v vector and stores result in same matrix

Parameters:
[in, out] m affine transform
[in] v scale vector [x, y, z]
void glm_scale_uni(mat4 m, float s)

applies uniform scale to existing transform matrix v = [s, s, s] and stores result in same matrix

Parameters:
[in, out] m affine transform
[in] v scale factor
void glm_rotate_make(mat4 m, float angle, vec3 axis)

creates NEW rotation matrix by angle and axis, axis will be normalized so you don’t need to normalize it

Parameters:
[out] m affine transform
[in] axis angle (radians)
[in] axis axis
void glm_rotate_atm(mat4 m, vec3 pivot, float angle, vec3 axis)
creates NEW rotation matrix by angle and axis at given point
this creates rotation matrix, it assumes you don’t have a matrix
this should work faster than glm_rotate_at because it reduces one glm_translate.
Parameters:
[in, out] m affine transform
[in] pivot pivot, anchor point, rotation center
[in] angle angle (radians)
[in] axis axis
void glm_decompose_scalev(mat4 m, vec3 s)

decompose scale vector

Parameters:
[in] m affine transform
[out] s scale vector (Sx, Sy, Sz)
bool glm_uniscaled(mat4 m)

returns true if matrix is uniform scaled. This is helpful for creating normal matrix.

Parameters:
[in] m matrix
void glm_decompose_rs(mat4 m, mat4 r, vec3 s)

decompose rotation matrix (mat4) and scale vector [Sx, Sy, Sz] DON’T pass projected matrix here

Parameters:
[in] m affine transform
[out] r rotation matrix
[out] s scale matrix
void glm_decompose(mat4 m, vec4 t, mat4 r, vec3 s)

decompose affine transform, TODO: extract shear factors. DON’T pass projected matrix here

Parameters:
[in] m affine transform
[out] t translation vector
[out] r rotation matrix (mat4)
[out] s scaling vector [X, Y, Z]