common lisp library providing common math functions used in games
Common Lisp
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docs
matrices
polar-coords
projection
quaternions
regions
spherical-coords
vari
vectors
.editorconfig
.gitignore
.travis.yml
LICENSE.txt
README.md
base-maths.lisp
deftypes.lisp
docs.lisp
package.lisp
rtg-math.asd
rtg-math.vari.asd
sampling.lisp
staple.ext.lisp
types-docs.lisp
utils.lisp

README.md

rtg-math

This system provides a selection of the math routines most commonly needed for making realtime graphics in lisp.

Feature Shortlist

The library provides:

  • 2, 3 & 4 component vectors (vec2, vec3, vec4), including support for:

    • unit, zero & equality predicates
    • addition, subtraction, multiplication & divising of vectors against each other
    • addition, subtraction, multiplication & divising of scalars against vectors
    • length, length-squared, distance, distance-squared
    • dot, absolute-dot & cross products
    • normalize
    • lerp, bezier & spline
    • Consing and non-consing apis
    • Optional generic API
  • 3x3 & 4x4 matrices (mat3, mat4), including support for:

    • identity, zero & equality predicates
    • component-wise addition & subtraction of matrices
    • multiplication of matrices with matrices and matrices with vectors
    • transpose, adjoint, determinate, trace
    • construction from angle (seperately or as a vec3), axis-angle, scale, or individual components
    • inverse & affine-inverse
    • extraction of rows or columns as vectors
    • Consing and non-consing apis
    • Optional generic API
  • Quaternions

    • addition, subtraction, multiplication & divising of quaternions against each other
    • conversion from & to 3x3 matrices, axis-angle pairs, look-at position & more
    • magnitude, norm, normalize, conjugate, inverse
    • lerp & slerp
  • Basic support for spherical and polar coordinates

And more for all categories.

Documentation

Reference docs can be found here

All the symbols with documentation in the above reference docs als ohave identical doc-strings and so this can be easily queried from your editor.

CHANGELOG

2018-04-18

  • WARNING: Fixes to from-direction, projection & look-at matrices. Will have import of projects using this lib

2018-03-28

  • Ported all the API (except regions for now) to Vari so rtg-math works on the GPU.

2017-09-09

  • WARNING: Fix to perspective matrix, will have impact on project using this lib.

2017-04-28

  • all lerp functions are stable, stable-lerp is deprecated & will be removed in a future release

2017-04-11

  • Fixes to the projection matrices. Are also now typed

2017-02-13

  • Add non-consing functions for matrix3 & matrix4

2017-02-12

  • Started Changelog. Sorry we havent had this before.
  • Most of vector, matrix, quaternion API is now typed
  • Where possible the optimization for the public is set at (speed 3) (safety 1) (debug 1)
  • I have started adding a non-consing version of the apis. The nicknames for these packages is the regular nickname with -n on the end. Therefore:
  • rtg-math.vector2.non-consing has the nickname v2-n
  • rtg-math.vector3.non-consing has the nickname v3-n
  • rtg-math.vector4.non-consing has the nickname v4-n
  • rtg-math.matrix2.non-consing has the nickname m2-n
  • rtg-math.matrix3.non-consing has the nickname m3-n
  • rtg-math.quaternions.non-consing has the nickname q-n
  • q:qconjugate is now deprecated in favor q:conjugate.
  • directory structure normalized a bit. Now vectors/matrices/quaternions
  • fixed spelling mistake in m3: determinate -> determinant
  • added the regions api support lines, rays, line-segments & axis-aligned boxes in ℝ3