4x4 Matrix
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.
Format: column-major, when typed out it looks like row-major
The matrices are being post multiplied.
- Source:
Methods
(static) add(out, a, b) → {mat4}
Adds two mat4's
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the first operand |
b |
ReadonlyMat4 | the second operand |
- Source:
Returns:
out
- Type
- mat4
(static) adjoint(out, a) → {mat4}
Calculates the adjugate of a mat4
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the source matrix |
- Source:
Returns:
out
- Type
- mat4
(static) clone(a) → {mat4}
Creates a new mat4 initialized with values from an existing matrix
Parameters:
Name | Type | Description |
---|---|---|
a |
ReadonlyMat4 | matrix to clone |
- Source:
Returns:
a new 4x4 matrix
- Type
- mat4
(static) copy(out, a) → {mat4}
Copy the values from one mat4 to another
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the source matrix |
- Source:
Returns:
out
- Type
- mat4
(static) create() → {mat4}
Creates a new identity mat4
- Source:
Returns:
a new 4x4 matrix
- Type
- mat4
(static) decompose(out_r, out_t, out_s, mat) → {quat}
Decomposes a transformation matrix into its rotation, translation
and scale components. Returns only the rotation component
Parameters:
Name | Type | Description |
---|---|---|
out_r |
quat | Quaternion to receive the rotation component |
out_t |
vec3 | Vector to receive the translation vector |
out_s |
vec3 | Vector to receive the scaling factor |
mat |
ReadonlyMat4 | Matrix to be decomposed (input) |
- Source:
Returns:
out_r
- Type
- quat
(static) determinant(a) → {Number}
Calculates the determinant of a mat4
Parameters:
Name | Type | Description |
---|---|---|
a |
ReadonlyMat4 | the source matrix |
- Source:
Returns:
determinant of a
- Type
- Number
(static) equals(a, b) → {Boolean}
Returns whether or not the matrices have approximately the same elements in the same position.
Parameters:
Name | Type | Description |
---|---|---|
a |
ReadonlyMat4 | The first matrix. |
b |
ReadonlyMat4 | The second matrix. |
- Source:
Returns:
True if the matrices are equal, false otherwise.
- Type
- Boolean
(static) exactEquals(a, b) → {Boolean}
Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
Parameters:
Name | Type | Description |
---|---|---|
a |
ReadonlyMat4 | The first matrix. |
b |
ReadonlyMat4 | The second matrix. |
- Source:
Returns:
True if the matrices are equal, false otherwise.
- Type
- Boolean
(static) frob(a) → {Number}
Returns Frobenius norm of a mat4
Parameters:
Name | Type | Description |
---|---|---|
a |
ReadonlyMat4 | the matrix to calculate Frobenius norm of |
- Source:
Returns:
Frobenius norm
- Type
- Number
(static) fromQuat(out, q) → {mat4}
Calculates a 4x4 matrix from the given quaternion
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
q |
ReadonlyQuat | Quaternion to create matrix from |
- Source:
Returns:
out
- Type
- mat4
(static) fromQuat2(out, a) → {mat4}
Creates a new mat4 from a dual quat.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | Matrix |
a |
ReadonlyQuat2 | Dual Quaternion |
- Source:
Returns:
mat4 receiving operation result
- Type
- mat4
(static) fromRotation(out, rad, axis) → {mat4}
Creates a matrix from a given angle around a given axis
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.rotate(dest, dest, rad, axis);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
rad |
Number | the angle to rotate the matrix by |
axis |
ReadonlyVec3 | the axis to rotate around |
- Source:
Returns:
out
- Type
- mat4
(static) fromRotationTranslation(out, q, v) → {mat4}
Creates a matrix from a quaternion rotation and vector translation
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.translate(dest, vec);
let quatMat = mat4.create();
quat4.toMat4(quat, quatMat);
mat4.multiply(dest, quatMat);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
q |
quat4 | Rotation quaternion |
v |
ReadonlyVec3 | Translation vector |
- Source:
Returns:
out
- Type
- mat4
(static) fromRotationTranslationScale(out, q, v, s) → {mat4}
Creates a matrix from a quaternion rotation, vector translation and vector scale
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.translate(dest, vec);
let quatMat = mat4.create();
quat4.toMat4(quat, quatMat);
mat4.multiply(dest, quatMat);
mat4.scale(dest, scale)
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
q |
quat4 | Rotation quaternion |
v |
ReadonlyVec3 | Translation vector |
s |
ReadonlyVec3 | Scaling vector |
- Source:
Returns:
out
- Type
- mat4
(static) fromRotationTranslationScaleOrigin(out, q, v, s, o) → {mat4}
Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.translate(dest, vec);
mat4.translate(dest, origin);
let quatMat = mat4.create();
quat4.toMat4(quat, quatMat);
mat4.multiply(dest, quatMat);
mat4.scale(dest, scale)
mat4.translate(dest, negativeOrigin);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
q |
quat4 | Rotation quaternion |
v |
ReadonlyVec3 | Translation vector |
s |
ReadonlyVec3 | Scaling vector |
o |
ReadonlyVec3 | The origin vector around which to scale and rotate |
- Source:
Returns:
out
- Type
- mat4
(static) fromScaling(out, v) → {mat4}
Creates a matrix from a vector scaling
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.scale(dest, dest, vec);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
v |
ReadonlyVec3 | Scaling vector |
- Source:
Returns:
out
- Type
- mat4
(static) fromTranslation(out, v) → {mat4}
Creates a matrix from a vector translation
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.translate(dest, dest, vec);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
v |
ReadonlyVec3 | Translation vector |
- Source:
Returns:
out
- Type
- mat4
(static) fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) → {mat4}
Create a new mat4 with the given values
Parameters:
Name | Type | Description |
---|---|---|
m00 |
Number | Component in column 0, row 0 position (index 0) |
m01 |
Number | Component in column 0, row 1 position (index 1) |
m02 |
Number | Component in column 0, row 2 position (index 2) |
m03 |
Number | Component in column 0, row 3 position (index 3) |
m10 |
Number | Component in column 1, row 0 position (index 4) |
m11 |
Number | Component in column 1, row 1 position (index 5) |
m12 |
Number | Component in column 1, row 2 position (index 6) |
m13 |
Number | Component in column 1, row 3 position (index 7) |
m20 |
Number | Component in column 2, row 0 position (index 8) |
m21 |
Number | Component in column 2, row 1 position (index 9) |
m22 |
Number | Component in column 2, row 2 position (index 10) |
m23 |
Number | Component in column 2, row 3 position (index 11) |
m30 |
Number | Component in column 3, row 0 position (index 12) |
m31 |
Number | Component in column 3, row 1 position (index 13) |
m32 |
Number | Component in column 3, row 2 position (index 14) |
m33 |
Number | Component in column 3, row 3 position (index 15) |
- Source:
Returns:
A new mat4
- Type
- mat4
(static) fromXRotation(out, rad) → {mat4}
Creates a matrix from the given angle around the X axis
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.rotateX(dest, dest, rad);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
rad |
Number | the angle to rotate the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) fromYRotation(out, rad) → {mat4}
Creates a matrix from the given angle around the Y axis
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.rotateY(dest, dest, rad);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
rad |
Number | the angle to rotate the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) fromZRotation(out, rad) → {mat4}
Creates a matrix from the given angle around the Z axis
This is equivalent to (but much faster than):
mat4.identity(dest);
mat4.rotateZ(dest, dest, rad);
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 receiving operation result |
rad |
Number | the angle to rotate the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) frustum(out, left, right, bottom, top, near, far) → {mat4}
Generates a frustum matrix with the given bounds
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
left |
Number | Left bound of the frustum |
right |
Number | Right bound of the frustum |
bottom |
Number | Bottom bound of the frustum |
top |
Number | Top bound of the frustum |
near |
Number | Near bound of the frustum |
far |
Number | Far bound of the frustum |
- Source:
Returns:
out
- Type
- mat4
(static) getRotation(out, mat) → {quat}
Returns a quaternion representing the rotational component
of a transformation matrix. If a matrix is built with
fromRotationTranslation, the returned quaternion will be the
same as the quaternion originally supplied.
Parameters:
Name | Type | Description |
---|---|---|
out |
quat | Quaternion to receive the rotation component |
mat |
ReadonlyMat4 | Matrix to be decomposed (input) |
- Source:
Returns:
out
- Type
- quat
(static) getScaling(out, mat) → {vec3}
Returns the scaling factor component of a transformation
matrix. If a matrix is built with fromRotationTranslationScale
with a normalized Quaternion paramter, the returned vector will be
the same as the scaling vector
originally supplied.
Parameters:
Name | Type | Description |
---|---|---|
out |
vec3 | Vector to receive scaling factor component |
mat |
ReadonlyMat4 | Matrix to be decomposed (input) |
- Source:
Returns:
out
- Type
- vec3
(static) getTranslation(out, mat) → {vec3}
Returns the translation vector component of a transformation
matrix. If a matrix is built with fromRotationTranslation,
the returned vector will be the same as the translation vector
originally supplied.
Parameters:
Name | Type | Description |
---|---|---|
out |
vec3 | Vector to receive translation component |
mat |
ReadonlyMat4 | Matrix to be decomposed (input) |
- Source:
Returns:
out
- Type
- vec3
(static) identity(out) → {mat4}
Set a mat4 to the identity matrix
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
- Source:
Returns:
out
- Type
- mat4
(static) invert(out, a) → {mat4}
Inverts a mat4
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the source matrix |
- Source:
Returns:
out
- Type
- mat4
(static) lookAt(out, eye, center, up) → {mat4}
Generates a look-at matrix with the given eye position, focal point, and up axis.
If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
eye |
ReadonlyVec3 | Position of the viewer |
center |
ReadonlyVec3 | Point the viewer is looking at |
up |
ReadonlyVec3 | vec3 pointing up |
- Source:
Returns:
out
- Type
- mat4
(static) mul()
Alias for mat4.multiply
- Source:
(static) multiply(out, a, b) → {mat4}
Multiplies two mat4s
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the first operand |
b |
ReadonlyMat4 | the second operand |
- Source:
Returns:
out
- Type
- mat4
(static) multiplyScalar(out, a, b) → {mat4}
Multiply each element of the matrix by a scalar.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to scale |
b |
Number | amount to scale the matrix's elements by |
- Source:
Returns:
out
- Type
- mat4
(static) multiplyScalarAndAdd(out, a, b, scale) → {mat4}
Adds two mat4's after multiplying each element of the second operand by a scalar value.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving vector |
a |
ReadonlyMat4 | the first operand |
b |
ReadonlyMat4 | the second operand |
scale |
Number | the amount to scale b's elements by before adding |
- Source:
Returns:
out
- Type
- mat4
(static) ortho()
Alias for mat4.orthoNO
- Source:
(static) orthoNO(out, left, right, bottom, top, near, far) → {mat4}
Generates a orthogonal projection matrix with the given bounds.
The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
which matches WebGL/OpenGL's clip volume.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
left |
number | Left bound of the frustum |
right |
number | Right bound of the frustum |
bottom |
number | Bottom bound of the frustum |
top |
number | Top bound of the frustum |
near |
number | Near bound of the frustum |
far |
number | Far bound of the frustum |
- Source:
Returns:
out
- Type
- mat4
(static) orthoZO(out, left, right, bottom, top, near, far) → {mat4}
Generates a orthogonal projection matrix with the given bounds.
The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
left |
number | Left bound of the frustum |
right |
number | Right bound of the frustum |
bottom |
number | Bottom bound of the frustum |
top |
number | Top bound of the frustum |
near |
number | Near bound of the frustum |
far |
number | Far bound of the frustum |
- Source:
Returns:
out
- Type
- mat4
(static) perspective()
Alias for mat4.perspectiveNO
- Source:
(static) perspectiveFromFieldOfView(out, fov, near, far) → {mat4}
Generates a perspective projection matrix with the given field of view.
This is primarily useful for generating projection matrices to be used
with the still experiemental WebVR API.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
fov |
Object | Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees |
near |
number | Near bound of the frustum |
far |
number | Far bound of the frustum |
- Source:
Returns:
out
- Type
- mat4
(static) perspectiveNO(out, fovy, aspect, near, far) → {mat4}
Generates a perspective projection matrix with the given bounds.
The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
which matches WebGL/OpenGL's clip volume.
Passing null/undefined/no value for far will generate infinite projection matrix.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
fovy |
number | Vertical field of view in radians |
aspect |
number | Aspect ratio. typically viewport width/height |
near |
number | Near bound of the frustum |
far |
number | Far bound of the frustum, can be null or Infinity |
- Source:
Returns:
out
- Type
- mat4
(static) perspectiveZO(out, fovy, aspect, near, far) → {mat4}
Generates a perspective projection matrix suitable for WebGPU with the given bounds.
The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
Passing null/undefined/no value for far will generate infinite projection matrix.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
fovy |
number | Vertical field of view in radians |
aspect |
number | Aspect ratio. typically viewport width/height |
near |
number | Near bound of the frustum |
far |
number | Far bound of the frustum, can be null or Infinity |
- Source:
Returns:
out
- Type
- mat4
(static) rotate(out, a, rad, axis) → {mat4}
Rotates a mat4 by the given angle around the given axis
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to rotate |
rad |
Number | the angle to rotate the matrix by |
axis |
ReadonlyVec3 | the axis to rotate around |
- Source:
Returns:
out
- Type
- mat4
(static) rotateX(out, a, rad) → {mat4}
Rotates a matrix by the given angle around the X axis
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to rotate |
rad |
Number | the angle to rotate the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) rotateY(out, a, rad) → {mat4}
Rotates a matrix by the given angle around the Y axis
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to rotate |
rad |
Number | the angle to rotate the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) rotateZ(out, a, rad) → {mat4}
Rotates a matrix by the given angle around the Z axis
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to rotate |
rad |
Number | the angle to rotate the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) scale(out, a, v) → {mat4}
Scales the mat4 by the dimensions in the given vec3 not using vectorization
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to scale |
v |
ReadonlyVec3 | the vec3 to scale the matrix by |
- Source:
Returns:
out
- Type
- mat4
(static) set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) → {mat4}
Set the components of a mat4 to the given values
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
m00 |
Number | Component in column 0, row 0 position (index 0) |
m01 |
Number | Component in column 0, row 1 position (index 1) |
m02 |
Number | Component in column 0, row 2 position (index 2) |
m03 |
Number | Component in column 0, row 3 position (index 3) |
m10 |
Number | Component in column 1, row 0 position (index 4) |
m11 |
Number | Component in column 1, row 1 position (index 5) |
m12 |
Number | Component in column 1, row 2 position (index 6) |
m13 |
Number | Component in column 1, row 3 position (index 7) |
m20 |
Number | Component in column 2, row 0 position (index 8) |
m21 |
Number | Component in column 2, row 1 position (index 9) |
m22 |
Number | Component in column 2, row 2 position (index 10) |
m23 |
Number | Component in column 2, row 3 position (index 11) |
m30 |
Number | Component in column 3, row 0 position (index 12) |
m31 |
Number | Component in column 3, row 1 position (index 13) |
m32 |
Number | Component in column 3, row 2 position (index 14) |
m33 |
Number | Component in column 3, row 3 position (index 15) |
- Source:
Returns:
out
- Type
- mat4
(static) str(a) → {String}
Returns a string representation of a mat4
Parameters:
Name | Type | Description |
---|---|---|
a |
ReadonlyMat4 | matrix to represent as a string |
- Source:
Returns:
string representation of the matrix
- Type
- String
(static) sub()
Alias for mat4.subtract
- Source:
(static) subtract(out, a, b) → {mat4}
Subtracts matrix b from matrix a
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the first operand |
b |
ReadonlyMat4 | the second operand |
- Source:
Returns:
out
- Type
- mat4
(static) targetTo(out, eye, center, up) → {mat4}
Generates a matrix that makes something look at something else.
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | mat4 frustum matrix will be written into |
eye |
ReadonlyVec3 | Position of the viewer |
center |
ReadonlyVec3 | Point the viewer is looking at |
up |
ReadonlyVec3 | vec3 pointing up |
- Source:
Returns:
out
- Type
- mat4
(static) translate(out, a, v) → {mat4}
Translate a mat4 by the given vector
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the matrix to translate |
v |
ReadonlyVec3 | vector to translate by |
- Source:
Returns:
out
- Type
- mat4
(static) transpose(out, a) → {mat4}
Transpose the values of a mat4
Parameters:
Name | Type | Description |
---|---|---|
out |
mat4 | the receiving matrix |
a |
ReadonlyMat4 | the source matrix |
- Source:
Returns:
out
- Type
- mat4