Features offered by the CML include:

  • Classes for vectors, matrices, and quaternions
  • Vectors and matrices of arbitrary size (fixed or dynamically resizable)
  • Choice of element type for each class
  • Choice of row- or column-major matrix layout
  • Support for both row- and column-vector notation
  • Choice of standard or ‘reverse’ quaternion multiplication order
  • Conversions between quaternions, matrices, axis-angle pairs, and Euler angles
  • Support for all Euler angle orders (xyz, xyx, etc.)
  • Conversions between polar, cylindrical, spherical, and Cartesian coordinates
  • Frustum plane extraction
  • Frustum corner computation for debug rendering
  • Projection and ‘unprojection’ of points
  • Support for picking using rays, volumes, and drag-enclosed volumes
  • Support for various types of billboarding, including viewplane-aligned and axial
  • A large library of functions for the construction and manipulation of transforms in 2D and 3D
  • A variety of useful utility functions

For more information see the full documentation.