justgook/alt-linear-algebra/1.0.0

NOTE: the latest version is 2.0.0

AltMath.Matrix4

This library uses the convention that the prefix make is creating a new array,as without the prefix, you are applying some transform to an existing matrix.

Create

type alias Mat4 =
Mat4

4x4 matrix type

identity : Mat4

A matrix with all 0s, except 1s on the diagonal.

Operations

inverse : Mat4 -> Maybe Mat4

Computes the inverse of any matrix. This is somewhat computationally intensive. If the matrix is not invertible, Nothing is returned.

inverseOrthonormal : Mat4 -> Mat4

Computes the inverse of the given matrix, assuming that the matrix is orthonormal. This algorithm is more efficient than general matrix inversion, and has no possibility of failing.

mul : Mat4 -> Mat4 -> Mat4

Matrix multiplcation: a * b

mulAffine : Mat4 -> Mat4 -> Mat4

Matrix multiplication, assuming a and b are affine: a * b

transpose : Mat4 -> Mat4

"Flip" the matrix across the diagonal by swapping row index and column index.

makeBasis : Vec3 -> Vec3 -> Vec3 -> Mat4

Creates a transform from a basis consisting of 3 linearly independent vectors.

transform : Mat4 -> Vec3 -> Vec3

Multiply a vector by a 4x4 matrix: m * v

Projections

makeFrustum : Float -> Float -> Float -> Float -> Float -> Float -> Mat4

Creates a matrix for a projection frustum with the given parameters.

Parameters:

  • left - the left coordinate of the frustum
  • right- the right coordinate of the frustum
  • bottom - the bottom coordinate of the frustum
  • top - the top coordinate of the frustum
  • znear - the near z distance of the frustum
  • zfar - the far z distance of the frustum
makePerspective : Float -> Float -> Float -> Float -> Mat4

Creates a matrix for a perspective projection with the given parameters.

Parameters:

  • fovy - field of view in the y axis, in degrees
  • aspect - aspect ratio
  • znear - the near z distance of the projection
  • zfar - the far z distance of the projection
makeOrtho : Float -> Float -> Float -> Float -> Float -> Float -> Mat4

Creates a matrix for an orthogonal frustum projection with the given parameters.

Parameters:

  • left - the left coordinate of the frustum
  • right- the right coordinate of the frustum
  • bottom - the bottom coordinate of the frustum
  • top - the top coordinate of the frustum
  • znear - the near z distance of the frustum
  • zfar - the far z distance of the frustum
makeOrtho2D : Float -> Float -> Float -> Float -> Mat4

Creates a matrix for a 2D orthogonal frustum projection with the given parameters. znear and zfar are assumed to be -1 and 1, respectively.

Parameters:

  • left - the left coordinate of the frustum
  • right- the right coordinate of the frustum
  • bottom - the bottom coordinate of the frustum
  • top - the top coordinate of the frustum
makeLookAt : Vec3 -> Vec3 -> Vec3 -> Mat4

Creates a transformation matrix for a camera.

Parameters:

  • eye - The location of the camera
  • center - The location of the focused object
  • up - The "up" direction according to the camera

Apply Transformations

rotate : Float -> Vec3 -> Mat4 -> Mat4

Concatenates a rotation in radians about an axis to the given matrix.

scale : Vec3 -> Mat4 -> Mat4

Concatenates a scaling to the given matrix.

scale3 : Float -> Float -> Float -> Mat4 -> Mat4

Concatenates a scaling to the given matrix.

translate : Vec3 -> Mat4 -> Mat4

Concatenates a translation to the given matrix.

translate3 : Float -> Float -> Float -> Mat4 -> Mat4

Concatenates a translation to the given matrix.

Create Transformations

makeRotate : Float -> Vec3 -> Mat4

Creates a transformation matrix for rotation in radians about the 3-element vector axis.

makeScale : Vec3 -> Mat4

Creates a transformation matrix for scaling each of the x, y, and z axes by the amount given in the corresponding element of the 3-element vector.

makeScale3 : Float -> Float -> Float -> Mat4

Creates a transformation matrix for scaling by 3 scalar values, one for each of the x, y, and z directions.

makeTranslate : Vec3 -> Mat4

Creates a transformation matrix for translating each of the x, y, and z axes by the amount given in the corresponding element of the 3-element vector.

makeTranslate3 : Float -> Float -> Float -> Mat4

Creates a transformation matrix for translating by 3 scalar values, one for each of the x, y, and z directions.

Conversions

toRecord : Mat4 -> Matrix4Record

Convert a matrix to a record. Elements are given by their row and column indices, starting at 1, so m23 means the element in the second row, third column.

fromRecord : Matrix4Record -> Mat4

Convert a record to a matrix.

type alias Matrix4Record =
{ m11 : Float
, m21 : Float
, m31 : Float
, m41 : Float
, m12 : Float
, m22 : Float
, m32 : Float
, m42 : Float
, m13 : Float
, m23 : Float
, m33 : Float
, m43 : Float
, m14 : Float
, m24 : Float
, m34 : Float
, m44 : Float
}

Just type alias for matrix record