Welcome to cglm’s documentation!

cglm is optimized 3D math library written in C99 (compatible with C89). It is similar to original glm library except this is mainly for C

This library stores matrices as column-major order but in the future row-major is considered to be supported as optional.

Also currently only float type is supported for most operations.


  • general purpose matrix operations (mat4, mat3)
  • chain matrix multiplication (square only)
  • general purpose vector operations (cross, dot, rotate, proj, angle…)
  • affine transforms
  • matrix decomposition (extract rotation, scaling factor)
  • optimized affine transform matrices (mul, rigid-body inverse)
  • camera (lookat)
  • projections (ortho, perspective)
  • quaternions
  • euler angles / yaw-pitch-roll to matrix
  • extract euler angles
  • inline or pre-compiled function call
  • frustum (extract view frustum planes, corners…)
  • bounding box (AABB in Frustum (culling), crop, merge…)

Indices and tables