public interface Matrix4fc
| Modifier and Type | Field and Description |
|---|---|
static int |
CORNER_NXNYNZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (-1, -1, -1) when using the identity matrix. |
static int |
CORNER_NXNYPZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (-1, -1, 1) when using the identity matrix. |
static int |
CORNER_NXPYNZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (-1, 1, -1) when using the identity matrix. |
static int |
CORNER_NXPYPZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (-1, 1, 1) when using the identity matrix. |
static int |
CORNER_PXNYNZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (1, -1, -1) when using the identity matrix. |
static int |
CORNER_PXNYPZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (1, -1, 1) when using the identity matrix. |
static int |
CORNER_PXPYNZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (1, 1, -1) when using the identity matrix. |
static int |
CORNER_PXPYPZ
Argument to the first parameter of
frustumCorner(int, Vector3f)
identifying the corner (1, 1, 1) when using the identity matrix. |
static int |
PLANE_NX
Argument to the first parameter of
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation x=-1 when using the identity matrix. |
static int |
PLANE_NY
Argument to the first parameter of
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation y=-1 when using the identity matrix. |
static int |
PLANE_NZ
Argument to the first parameter of
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation z=-1 when using the identity matrix. |
static int |
PLANE_PX
Argument to the first parameter of
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation x=1 when using the identity matrix. |
static int |
PLANE_PY
Argument to the first parameter of
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation y=1 when using the identity matrix. |
static int |
PLANE_PZ
Argument to the first parameter of
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation z=1 when using the identity matrix. |
static byte |
PROPERTY_AFFINE
Bit returned by
properties() to indicate that the matrix represents an affine transformation. |
static byte |
PROPERTY_IDENTITY
Bit returned by
properties() to indicate that the matrix represents the identity transformation. |
static byte |
PROPERTY_ORTHONORMAL
Bit returned by
properties() to indicate that the upper-left 3x3 submatrix represents an orthogonal
matrix (i.e. |
static byte |
PROPERTY_PERSPECTIVE
Bit returned by
properties() to indicate that the matrix represents a perspective transformation. |
static byte |
PROPERTY_TRANSLATION
Bit returned by
properties() to indicate that the matrix represents a pure translation transformation. |
| Modifier and Type | Method and Description |
|---|---|
Matrix4f |
add(Matrix4fc other,
Matrix4f dest)
Component-wise add
this and other and store the result in dest. |
Matrix4f |
add4x3(Matrix4fc other,
Matrix4f dest)
Component-wise add the upper 4x3 submatrices of
this and other
and store the result in dest. |
Matrix4f |
arcball(float radius,
float centerX,
float centerY,
float centerZ,
float angleX,
float angleY,
Matrix4f dest)
Apply an arcball view transformation to this matrix with the given
radius and center (centerX, centerY, centerZ)
position of the arcball and the specified X and Y rotation angles, and store the result in dest. |
Matrix4f |
arcball(float radius,
Vector3fc center,
float angleX,
float angleY,
Matrix4f dest)
Apply an arcball view transformation to this matrix with the given
radius and center
position of the arcball and the specified X and Y rotation angles, and store the result in dest. |
float |
determinant()
Return the determinant of this matrix.
|
float |
determinant3x3()
Return the determinant of the upper left 3x3 submatrix of this matrix.
|
float |
determinantAffine()
Return the determinant of this matrix by assuming that it represents an
affine transformation and thus
its last row is equal to (0, 0, 0, 1). |
boolean |
equals(Matrix4fc m,
float delta)
Compare the matrix elements of
this matrix with the given matrix using the given delta
and return whether all of them are equal within a maximum difference of delta. |
Matrix4f |
fma4x3(Matrix4fc other,
float otherFactor,
Matrix4f dest)
Component-wise add the upper 4x3 submatrices of
this and other
by first multiplying each component of other's 4x3 submatrix by otherFactor,
adding that to this and storing the final result in dest. |
Matrix4f |
frustum(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply an arbitrary perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
frustum(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
Matrix4f dest)
Apply an arbitrary perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Matrix4f |
frustumAabb(Vector3f min,
Vector3f max)
Compute the axis-aligned bounding box of the frustum described by
this matrix and store the minimum corner
coordinates in the given min and the maximum corner coordinates in the given max vector. |
Vector3f |
frustumCorner(int corner,
Vector3f point)
Compute the corner coordinates of the frustum defined by
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given point. |
Matrix4f |
frustumLH(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply an arbitrary perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
frustumLH(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
Matrix4f dest)
Apply an arbitrary perspective projection frustum transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Planef |
frustumPlane(int which,
Planef plane)
Calculate a frustum plane of
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given plane. |
Vector4f |
frustumPlane(int plane,
Vector4f planeEquation)
Calculate a frustum plane of
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given planeEquation. |
Vector3f |
frustumRayDir(float x,
float y,
Vector3f dir)
Obtain the direction of a ray starting at the center of the coordinate system and going
through the near frustum plane.
|
ByteBuffer |
get(ByteBuffer buffer)
Store this matrix in column-major order into the supplied
ByteBuffer at the current
buffer position. |
float[] |
get(float[] arr)
Store this matrix into the supplied float array in column-major order.
|
float[] |
get(float[] arr,
int offset)
Store this matrix into the supplied float array in column-major order at the given offset.
|
FloatBuffer |
get(FloatBuffer buffer)
Store this matrix in column-major order into the supplied
FloatBuffer at the current
buffer position. |
ByteBuffer |
get(int index,
ByteBuffer buffer)
Store this matrix in column-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
get(int index,
FloatBuffer buffer)
Store this matrix in column-major order into the supplied
FloatBuffer starting at the specified
absolute buffer position/index. |
Matrix4d |
get(Matrix4d dest)
Get the current values of
this matrix and store them into
dest. |
Matrix4f |
get(Matrix4f dest)
Get the current values of
this matrix and store them into
dest. |
Matrix3d |
get3x3(Matrix3d dest)
Get the current values of the upper left 3x3 submatrix of
this matrix and store them into
dest. |
Matrix3f |
get3x3(Matrix3f dest)
Get the current values of the upper left 3x3 submatrix of
this matrix and store them into
dest. |
ByteBuffer |
get4x3(ByteBuffer buffer)
Store the upper 4x3 submatrix in column-major order into the supplied
ByteBuffer at the current
buffer position. |
FloatBuffer |
get4x3(FloatBuffer buffer)
Store the upper 4x3 submatrix in column-major order into the supplied
FloatBuffer at the current
buffer position. |
ByteBuffer |
get4x3(int index,
ByteBuffer buffer)
Store the upper 4x3 submatrix in column-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
get4x3(int index,
FloatBuffer buffer)
Store the upper 4x3 submatrix in column-major order into the supplied
FloatBuffer starting at the specified
absolute buffer position/index. |
Matrix4x3f |
get4x3(Matrix4x3f dest)
Get the current values of the upper 4x3 submatrix of
this matrix and store them into
dest. |
ByteBuffer |
get4x3Transposed(ByteBuffer buffer)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied ByteBuffer at the current
buffer position. |
FloatBuffer |
get4x3Transposed(FloatBuffer buffer)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied FloatBuffer at the current
buffer position. |
ByteBuffer |
get4x3Transposed(int index,
ByteBuffer buffer)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied ByteBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
get4x3Transposed(int index,
FloatBuffer buffer)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied FloatBuffer starting at the specified
absolute buffer position/index. |
Vector3f |
getColumn(int column,
Vector3f dest)
Get the first three components of the column at the given
column index, starting with 0. |
Vector4f |
getColumn(int column,
Vector4f dest)
Get the column at the given
column index, starting with 0. |
Vector3f |
getEulerAnglesZYX(Vector3f dest)
Extract the Euler angles from the rotation represented by the upper left 3x3 submatrix of
this
and store the extracted Euler angles in dest. |
Quaterniond |
getNormalizedRotation(Quaterniond dest)
Get the current values of
this matrix and store the represented rotation
into the given Quaterniond. |
Quaternionf |
getNormalizedRotation(Quaternionf dest)
Get the current values of
this matrix and store the represented rotation
into the given Quaternionf. |
AxisAngle4d |
getRotation(AxisAngle4d dest)
Get the rotational component of
this matrix and store the represented rotation
into the given AxisAngle4d. |
AxisAngle4f |
getRotation(AxisAngle4f dest)
Get the rotational component of
this matrix and store the represented rotation
into the given AxisAngle4f. |
Vector3f |
getRow(int row,
Vector3f dest)
Get the first three components of the row at the given
row index, starting with 0. |
Vector4f |
getRow(int row,
Vector4f dest)
Get the row at the given
row index, starting with 0. |
Vector3f |
getScale(Vector3f dest)
Get the scaling factors of
this matrix for the three base axes. |
Vector3f |
getTranslation(Vector3f dest)
Get only the translation components
(m30, m31, m32) of this matrix and store them in the given vector xyz. |
ByteBuffer |
getTransposed(ByteBuffer buffer)
Store the transpose of this matrix in column-major order into the supplied
ByteBuffer at the current
buffer position. |
FloatBuffer |
getTransposed(FloatBuffer buffer)
Store the transpose of this matrix in column-major order into the supplied
FloatBuffer at the current
buffer position. |
ByteBuffer |
getTransposed(int index,
ByteBuffer buffer)
Store the transpose of this matrix in column-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
getTransposed(int index,
FloatBuffer buffer)
Store the transpose of this matrix in column-major order into the supplied
FloatBuffer starting at the specified
absolute buffer position/index. |
Quaterniond |
getUnnormalizedRotation(Quaterniond dest)
Get the current values of
this matrix and store the represented rotation
into the given Quaterniond. |
Quaternionf |
getUnnormalizedRotation(Quaternionf dest)
Get the current values of
this matrix and store the represented rotation
into the given Quaternionf. |
Matrix4f |
invert(Matrix4f dest)
Invert this matrix and write the result into
dest. |
Matrix4f |
invertAffine(Matrix4f dest)
Invert this matrix by assuming that it is an
affine transformation (i.e. |
Matrix4f |
invertFrustum(Matrix4f dest)
If
this is an arbitrary perspective projection matrix obtained via one of the frustum() methods,
then this method builds the inverse of this and stores it into the given dest. |
Matrix4f |
invertOrtho(Matrix4f dest)
Invert
this orthographic projection matrix and store the result into the given dest. |
Matrix4f |
invertPerspective(Matrix4f dest)
If
this is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation,
then this method builds the inverse of this and stores it into the given dest. |
Matrix4f |
invertPerspectiveView(Matrix4fc view,
Matrix4f dest)
If
this is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation
and the given view matrix is affine and has unit scaling (for example by being obtained via lookAt()),
then this method builds the inverse of this * view and stores it into the given dest. |
Matrix4f |
invertPerspectiveView(Matrix4x3fc view,
Matrix4f dest)
If
this is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation
and the given view matrix has unit scaling,
then this method builds the inverse of this * view and stores it into the given dest. |
boolean |
isAffine()
Determine whether this matrix describes an affine transformation.
|
Matrix4f |
lerp(Matrix4fc other,
float t,
Matrix4f dest)
Linearly interpolate
this and other using the given interpolation factor t
and store the result in dest. |
Matrix4f |
lookAlong(float dirX,
float dirY,
float dirZ,
float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a rotation transformation to this matrix to make
-z point along dir
and store the result in dest. |
Matrix4f |
lookAlong(Vector3fc dir,
Vector3fc up,
Matrix4f dest)
Apply a rotation transformation to this matrix to make
-z point along dir
and store the result in dest. |
Matrix4f |
lookAt(float eyeX,
float eyeY,
float eyeZ,
float centerX,
float centerY,
float centerZ,
float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a "lookat" transformation to this matrix for a right-handed coordinate system,
that aligns
-z with center - eye and store the result in dest. |
Matrix4f |
lookAt(Vector3fc eye,
Vector3fc center,
Vector3fc up,
Matrix4f dest)
Apply a "lookat" transformation to this matrix for a right-handed coordinate system,
that aligns
-z with center - eye and store the result in dest. |
Matrix4f |
lookAtLH(float eyeX,
float eyeY,
float eyeZ,
float centerX,
float centerY,
float centerZ,
float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a "lookat" transformation to this matrix for a left-handed coordinate system,
that aligns
+z with center - eye and store the result in dest. |
Matrix4f |
lookAtLH(Vector3fc eye,
Vector3fc center,
Vector3fc up,
Matrix4f dest)
Apply a "lookat" transformation to this matrix for a left-handed coordinate system,
that aligns
+z with center - eye and store the result in dest. |
Matrix4f |
lookAtPerspective(float eyeX,
float eyeY,
float eyeZ,
float centerX,
float centerY,
float centerZ,
float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a "lookat" transformation to this matrix for a right-handed coordinate system,
that aligns
-z with center - eye and store the result in dest. |
Matrix4f |
lookAtPerspectiveLH(float eyeX,
float eyeY,
float eyeZ,
float centerX,
float centerY,
float centerZ,
float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a "lookat" transformation to this matrix for a left-handed coordinate system,
that aligns
+z with center - eye and store the result in dest. |
float |
m00()
Return the value of the matrix element at column 0 and row 0.
|
float |
m01()
Return the value of the matrix element at column 0 and row 1.
|
float |
m02()
Return the value of the matrix element at column 0 and row 2.
|
float |
m03()
Return the value of the matrix element at column 0 and row 3.
|
float |
m10()
Return the value of the matrix element at column 1 and row 0.
|
float |
m11()
Return the value of the matrix element at column 1 and row 1.
|
float |
m12()
Return the value of the matrix element at column 1 and row 2.
|
float |
m13()
Return the value of the matrix element at column 1 and row 3.
|
float |
m20()
Return the value of the matrix element at column 2 and row 0.
|
float |
m21()
Return the value of the matrix element at column 2 and row 1.
|
float |
m22()
Return the value of the matrix element at column 2 and row 2.
|
float |
m23()
Return the value of the matrix element at column 2 and row 3.
|
float |
m30()
Return the value of the matrix element at column 3 and row 0.
|
float |
m31()
Return the value of the matrix element at column 3 and row 1.
|
float |
m32()
Return the value of the matrix element at column 3 and row 2.
|
float |
m33()
Return the value of the matrix element at column 3 and row 3.
|
Matrix4f |
mul(Matrix3x2fc right,
Matrix4f dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4f |
mul(Matrix4fc right,
Matrix4f dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4f |
mul(Matrix4x3fc right,
Matrix4f dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4f |
mul4x3ComponentWise(Matrix4fc other,
Matrix4f dest)
Component-wise multiply the upper 4x3 submatrices of
this by other
and store the result in dest. |
Matrix4f |
mulAffine(Matrix4fc right,
Matrix4f dest)
Multiply this matrix by the supplied
right matrix, both of which are assumed to be affine, and store the result in dest. |
Matrix4f |
mulAffineR(Matrix4fc right,
Matrix4f dest)
Multiply this matrix by the supplied
right matrix, which is assumed to be affine, and store the result in dest. |
Matrix4f |
mulComponentWise(Matrix4fc other,
Matrix4f dest)
Component-wise multiply
this by other and store the result in dest. |
Matrix4f |
mulLocal(Matrix4fc left,
Matrix4f dest)
Pre-multiply this matrix by the supplied
left matrix and store the result in dest. |
Matrix4f |
mulLocalAffine(Matrix4fc left,
Matrix4f dest)
Pre-multiply this matrix by the supplied
left matrix, both of which are assumed to be affine, and store the result in dest. |
Matrix4f |
mulOrthoAffine(Matrix4fc view,
Matrix4f dest)
Multiply
this orthographic projection matrix by the supplied affine view matrix
and store the result in dest. |
Matrix4f |
mulPerspectiveAffine(Matrix4fc view,
Matrix4f dest)
Multiply
this symmetric perspective projection matrix by the supplied affine view matrix and store the result in dest. |
Matrix4f |
mulPerspectiveAffine(Matrix4x3fc view,
Matrix4f dest)
Multiply
this symmetric perspective projection matrix by the supplied view matrix and store the result in dest. |
Matrix4f |
mulTranslationAffine(Matrix4fc right,
Matrix4f dest)
Multiply this matrix, which is assumed to only contain a translation, by the supplied
right matrix, which is assumed to be affine, and store the result in dest. |
Matrix3f |
normal(Matrix3f dest)
Compute a normal matrix from the upper left 3x3 submatrix of
this
and store it into dest. |
Matrix4f |
normal(Matrix4f dest)
Compute a normal matrix from the upper left 3x3 submatrix of
this
and store it into the upper left 3x3 submatrix of dest. |
Matrix3f |
normalize3x3(Matrix3f dest)
Normalize the upper left 3x3 submatrix of this matrix and store the result in
dest. |
Matrix4f |
normalize3x3(Matrix4f dest)
Normalize the upper left 3x3 submatrix of this matrix and store the result in
dest. |
Vector3f |
normalizedPositiveX(Vector3f dir)
Obtain the direction of
+X before the transformation represented by this orthogonal matrix is applied. |
Vector3f |
normalizedPositiveY(Vector3f dir)
Obtain the direction of
+Y before the transformation represented by this orthogonal matrix is applied. |
Vector3f |
normalizedPositiveZ(Vector3f dir)
Obtain the direction of
+Z before the transformation represented by this orthogonal matrix is applied. |
Matrix4f |
obliqueZ(float a,
float b,
Matrix4f dest)
Apply an oblique projection transformation to this matrix with the given values for
a and
b and store the result in dest. |
Vector3f |
origin(Vector3f origin)
Obtain the position that gets transformed to the origin by
this matrix. |
Vector3f |
originAffine(Vector3f origin)
Obtain the position that gets transformed to the origin by
this affine matrix. |
Matrix4f |
ortho(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply an orthographic projection transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
ortho(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
Matrix4f dest)
Apply an orthographic projection transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Matrix4f |
ortho2D(float left,
float right,
float bottom,
float top,
Matrix4f dest)
Apply an orthographic projection transformation for a right-handed coordinate system to this matrix
and store the result in
dest. |
Matrix4f |
ortho2DLH(float left,
float right,
float bottom,
float top,
Matrix4f dest)
Apply an orthographic projection transformation for a left-handed coordinate system to this matrix and store the result in
dest. |
Matrix4f |
orthoCrop(Matrix4fc view,
Matrix4f dest)
Build an ortographic projection transformation that fits the view-projection transformation represented by
this
into the given affine view transformation. |
Matrix4f |
orthoLH(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply an orthographic projection transformation for a left-handed coordiante system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
orthoLH(float left,
float right,
float bottom,
float top,
float zNear,
float zFar,
Matrix4f dest)
Apply an orthographic projection transformation for a left-handed coordiante system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Matrix4f |
orthoSymmetric(float width,
float height,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply a symmetric orthographic projection transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
orthoSymmetric(float width,
float height,
float zNear,
float zFar,
Matrix4f dest)
Apply a symmetric orthographic projection transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Matrix4f |
orthoSymmetricLH(float width,
float height,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply a symmetric orthographic projection transformation for a left-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
orthoSymmetricLH(float width,
float height,
float zNear,
float zFar,
Matrix4f dest)
Apply a symmetric orthographic projection transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Matrix4f |
perspective(float fovy,
float aspect,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply a symmetric perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
perspective(float fovy,
float aspect,
float zNear,
float zFar,
Matrix4f dest)
Apply a symmetric perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
float |
perspectiveFar()
Extract the far clip plane distance from
this perspective projection matrix. |
float |
perspectiveFov()
Return the vertical field-of-view angle in radians of this perspective transformation matrix.
|
Matrix4f |
perspectiveFrustumSlice(float near,
float far,
Matrix4f dest)
Change the near and far clip plane distances of
this perspective frustum transformation matrix
and store the result in dest. |
Matrix4f |
perspectiveLH(float fovy,
float aspect,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply a symmetric perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
perspectiveLH(float fovy,
float aspect,
float zNear,
float zFar,
Matrix4f dest)
Apply a symmetric perspective projection frustum transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
float |
perspectiveNear()
Extract the near clip plane distance from
this perspective projection matrix. |
Matrix4f |
perspectiveOffCenter(float fovy,
float offAngleX,
float offAngleY,
float aspect,
float zNear,
float zFar)
Apply an asymmetric off-center perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4f |
perspectiveOffCenter(float fovy,
float offAngleX,
float offAngleY,
float aspect,
float zNear,
float zFar,
boolean zZeroToOne)
Apply an asymmetric off-center perspective projection frustum transformation using for a right-handed coordinate system
the given NDC z range to this matrix.
|
Matrix4f |
perspectiveOffCenter(float fovy,
float offAngleX,
float offAngleY,
float aspect,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply an asymmetric off-center perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
perspectiveOffCenter(float fovy,
float offAngleX,
float offAngleY,
float aspect,
float zNear,
float zFar,
Matrix4f dest)
Apply an asymmetric off-center perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Vector3f |
perspectiveOrigin(Vector3f origin)
Compute the eye/origin of the perspective frustum transformation defined by
this matrix,
which can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given origin. |
Matrix4f |
perspectiveRect(float width,
float height,
float zNear,
float zFar)
Apply a symmetric perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4f |
perspectiveRect(float width,
float height,
float zNear,
float zFar,
boolean zZeroToOne)
Apply a symmetric perspective projection frustum transformation using for a right-handed coordinate system
the given NDC z range to this matrix.
|
Matrix4f |
perspectiveRect(float width,
float height,
float zNear,
float zFar,
boolean zZeroToOne,
Matrix4f dest)
Apply a symmetric perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4f |
perspectiveRect(float width,
float height,
float zNear,
float zFar,
Matrix4f dest)
Apply a symmetric perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Matrix4f |
pick(float x,
float y,
float width,
float height,
int[] viewport,
Matrix4f dest)
Apply a picking transformation to this matrix using the given window coordinates
(x, y) as the pick center
and the given (width, height) as the size of the picking region in window coordinates, and store the result
in dest. |
Vector3f |
positiveX(Vector3f dir)
Obtain the direction of
+X before the transformation represented by this matrix is applied. |
Vector3f |
positiveY(Vector3f dir)
Obtain the direction of
+Y before the transformation represented by this matrix is applied. |
Vector3f |
positiveZ(Vector3f dir)
Obtain the direction of
+Z before the transformation represented by this matrix is applied. |
Vector3f |
project(float x,
float y,
float z,
int[] viewport,
Vector3f winCoordsDest)
Project the given
(x, y, z) position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest. |
Vector4f |
project(float x,
float y,
float z,
int[] viewport,
Vector4f winCoordsDest)
Project the given
(x, y, z) position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest. |
Vector3f |
project(Vector3fc position,
int[] viewport,
Vector3f winCoordsDest)
Project the given
position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest. |
Vector4f |
project(Vector3fc position,
int[] viewport,
Vector4f winCoordsDest)
Project the given
position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest. |
Matrix4f |
projectedGridRange(Matrix4fc projector,
float sLower,
float sUpper,
Matrix4f dest)
Compute the range matrix for the Projected Grid transformation as described in chapter "2.4.2 Creating the range conversion matrix"
of the paper Real-time water rendering - Introducing the projected grid concept
based on the inverse of the view-projection matrix which is assumed to be
this, and store that range matrix into dest. |
int |
properties()
Return the assumed properties of this matrix.
|
Matrix4f |
reflect(float nx,
float ny,
float nz,
float px,
float py,
float pz,
Matrix4f dest)
Apply a mirror/reflection transformation to this matrix that reflects about the given plane
specified via the plane normal and a point on the plane, and store the result in
dest. |
Matrix4f |
reflect(float a,
float b,
float c,
float d,
Matrix4f dest)
Apply a mirror/reflection transformation to this matrix that reflects about the given plane
specified via the equation
x*a + y*b + z*c + d = 0 and store the result in dest. |
Matrix4f |
reflect(Quaternionfc orientation,
Vector3fc point,
Matrix4f dest)
Apply a mirror/reflection transformation to this matrix that reflects about a plane
specified via the plane orientation and a point on the plane, and store the result in
dest. |
Matrix4f |
reflect(Vector3fc normal,
Vector3fc point,
Matrix4f dest)
Apply a mirror/reflection transformation to this matrix that reflects about the given plane
specified via the plane normal and a point on the plane, and store the result in
dest. |
Matrix4f |
rotate(AxisAngle4f axisAngle,
Matrix4f dest)
Apply a rotation transformation, rotating about the given
AxisAngle4f and store the result in dest. |
Matrix4f |
rotate(float ang,
float x,
float y,
float z,
Matrix4f dest)
Apply rotation to this matrix by rotating the given amount of radians
about the specified
(x, y, z) axis and store the result in dest. |
Matrix4f |
rotate(float angle,
Vector3fc axis,
Matrix4f dest)
Apply a rotation transformation, rotating the given radians about the specified axis and store the result in
dest. |
Matrix4f |
rotate(Quaternionfc quat,
Matrix4f dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix and store
the result in dest. |
Matrix4f |
rotateAffine(float ang,
float x,
float y,
float z,
Matrix4f dest)
Apply rotation to this
affine matrix by rotating the given amount of radians
about the specified (x, y, z) axis and store the result in dest. |
Matrix4f |
rotateAffine(Quaternionfc quat,
Matrix4f dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this affine matrix and store
the result in dest. |
Matrix4f |
rotateAffineXYZ(float angleX,
float angleY,
float angleZ,
Matrix4f dest)
Apply rotation of
angleX radians about the X axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest. |
Matrix4f |
rotateAffineYXZ(float angleY,
float angleX,
float angleZ,
Matrix4f dest)
Apply rotation of
angleY radians about the Y axis, followed by a rotation of angleX radians about the X axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest. |
Matrix4f |
rotateAffineZYX(float angleZ,
float angleY,
float angleX,
Matrix4f dest)
Apply rotation of
angleZ radians about the Z axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleX radians about the X axis and store the result in dest. |
Matrix4f |
rotateAround(Quaternionfc quat,
float ox,
float oy,
float oz,
Matrix4f dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix while using (ox, oy, oz) as the rotation origin,
and store the result in dest. |
Matrix4f |
rotateAroundAffine(Quaternionfc quat,
float ox,
float oy,
float oz,
Matrix4f dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this affine
matrix while using (ox, oy, oz) as the rotation origin, and store the result in dest. |
Matrix4f |
rotateAroundLocal(Quaternionfc quat,
float ox,
float oy,
float oz,
Matrix4f dest)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix while using (ox, oy, oz)
as the rotation origin, and store the result in dest. |
Matrix4f |
rotateLocal(float ang,
float x,
float y,
float z,
Matrix4f dest)
Pre-multiply a rotation to this matrix by rotating the given amount of radians
about the specified
(x, y, z) axis and store the result in dest. |
Matrix4f |
rotateLocal(Quaternionfc quat,
Matrix4f dest)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix and store
the result in dest. |
Matrix4f |
rotateLocalX(float ang,
Matrix4f dest)
Pre-multiply a rotation around the X axis to this matrix by rotating the given amount of radians
about the X axis and store the result in
dest. |
Matrix4f |
rotateLocalY(float ang,
Matrix4f dest)
Pre-multiply a rotation around the Y axis to this matrix by rotating the given amount of radians
about the Y axis and store the result in
dest. |
Matrix4f |
rotateLocalZ(float ang,
Matrix4f dest)
Pre-multiply a rotation around the Z axis to this matrix by rotating the given amount of radians
about the Z axis and store the result in
dest. |
Matrix4f |
rotateTowards(float dirX,
float dirY,
float dirZ,
float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the local
+Z axis with (dirX, dirY, dirZ)
and store the result in dest. |
Matrix4f |
rotateTowards(Vector3fc dir,
Vector3fc up,
Matrix4f dest)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the local
+Z axis with dir
and store the result in dest. |
Matrix4f |
rotateTowardsXY(float dirX,
float dirY,
Matrix4f dest)
Apply rotation about the Z axis to align the local
+X towards (dirX, dirY) and store the result in dest. |
Matrix4f |
rotateTranslation(float ang,
float x,
float y,
float z,
Matrix4f dest)
Apply rotation to this matrix, which is assumed to only contain a translation, by rotating the given amount of radians
about the specified
(x, y, z) axis and store the result in dest. |
Matrix4f |
rotateTranslation(Quaternionfc quat,
Matrix4f dest)
Apply the rotation - and possibly scaling - ransformation of the given
Quaternionfc to this matrix, which is assumed to only contain a translation, and store
the result in dest. |
Matrix4f |
rotateX(float ang,
Matrix4f dest)
Apply rotation about the X axis to this matrix by rotating the given amount of radians
and store the result in
dest. |
Matrix4f |
rotateXYZ(float angleX,
float angleY,
float angleZ,
Matrix4f dest)
Apply rotation of
angleX radians about the X axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest. |
Matrix4f |
rotateY(float ang,
Matrix4f dest)
Apply rotation about the Y axis to this matrix by rotating the given amount of radians
and store the result in
dest. |
Matrix4f |
rotateYXZ(float angleY,
float angleX,
float angleZ,
Matrix4f dest)
Apply rotation of
angleY radians about the Y axis, followed by a rotation of angleX radians about the X axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest. |
Matrix4f |
rotateZ(float ang,
Matrix4f dest)
Apply rotation about the Z axis to this matrix by rotating the given amount of radians
and store the result in
dest. |
Matrix4f |
rotateZYX(float angleZ,
float angleY,
float angleX,
Matrix4f dest)
Apply rotation of
angleZ radians about the Z axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleX radians about the X axis and store the result in dest. |
Matrix4f |
scale(float x,
float y,
float z,
Matrix4f dest)
Apply scaling to
this matrix by scaling the base axes by the given x,
y and z factors and store the result in dest. |
Matrix4f |
scale(float xyz,
Matrix4f dest)
Apply scaling to this matrix by uniformly scaling all base axes by the given
xyz factor
and store the result in dest. |
Matrix4f |
scale(Vector3fc xyz,
Matrix4f dest)
Apply scaling to
this matrix by scaling the base axes by the given xyz.x,
xyz.y and xyz.z factors, respectively and store the result in dest. |
Matrix4f |
scaleAround(float sx,
float sy,
float sz,
float ox,
float oy,
float oz,
Matrix4f dest)
Apply scaling to
this matrix by scaling the base axes by the given sx,
sy and sz factors while using (ox, oy, oz) as the scaling origin,
and store the result in dest. |
Matrix4f |
scaleAround(float factor,
float ox,
float oy,
float oz,
Matrix4f dest)
Apply scaling to this matrix by scaling all three base axes by the given
factor
while using (ox, oy, oz) as the scaling origin,
and store the result in dest. |
Matrix4f |
scaleAroundLocal(float sx,
float sy,
float sz,
float ox,
float oy,
float oz,
Matrix4f dest)
Pre-multiply scaling to
this matrix by scaling the base axes by the given sx,
sy and sz factors while using the given (ox, oy, oz) as the scaling origin,
and store the result in dest. |
Matrix4f |
scaleAroundLocal(float factor,
float ox,
float oy,
float oz,
Matrix4f dest)
Pre-multiply scaling to this matrix by scaling all three base axes by the given
factor
while using (ox, oy, oz) as the scaling origin,
and store the result in dest. |
Matrix4f |
scaleLocal(float x,
float y,
float z,
Matrix4f dest)
Pre-multiply scaling to
this matrix by scaling the base axes by the given x,
y and z factors and store the result in dest. |
Matrix4f |
scaleLocal(float xyz,
Matrix4f dest)
Pre-multiply scaling to
this matrix by scaling all base axes by the given xyz factor,
and store the result in dest. |
Matrix4f |
scaleXY(float x,
float y,
Matrix4f dest)
Apply scaling to this matrix by by scaling the X axis by
x and the Y axis by y
and store the result in dest. |
Matrix4f |
shadow(float lightX,
float lightY,
float lightZ,
float lightW,
float a,
float b,
float c,
float d,
Matrix4f dest)
Apply a projection transformation to this matrix that projects onto the plane specified via the general plane equation
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest. |
Matrix4f |
shadow(float lightX,
float lightY,
float lightZ,
float lightW,
Matrix4fc planeTransform,
Matrix4f dest)
Apply a projection transformation to this matrix that projects onto the plane with the general plane equation
y = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest. |
Matrix4f |
shadow(Vector4f light,
float a,
float b,
float c,
float d,
Matrix4f dest)
Apply a projection transformation to this matrix that projects onto the plane specified via the general plane equation
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction light
and store the result in dest. |
Matrix4f |
shadow(Vector4f light,
Matrix4fc planeTransform,
Matrix4f dest)
Apply a projection transformation to this matrix that projects onto the plane with the general plane equation
y = 0 as if casting a shadow from a given light position/direction light
and store the result in dest. |
Matrix4f |
sub(Matrix4fc subtrahend,
Matrix4f dest)
Component-wise subtract
subtrahend from this and store the result in dest. |
Matrix4f |
sub4x3(Matrix4fc subtrahend,
Matrix4f dest)
Component-wise subtract the upper 4x3 submatrices of
subtrahend from this
and store the result in dest. |
boolean |
testAab(float minX,
float minY,
float minZ,
float maxX,
float maxY,
float maxZ)
Test whether the given axis-aligned box is partly or completely within or outside of the frustum defined by
this matrix. |
boolean |
testPoint(float x,
float y,
float z)
Test whether the given point
(x, y, z) is within the frustum defined by this matrix. |
boolean |
testSphere(float x,
float y,
float z,
float r)
Test whether the given sphere is partly or completely within or outside of the frustum defined by
this matrix. |
Vector4f |
transform(float x,
float y,
float z,
float w,
Vector4f dest)
Transform/multiply the vector
(x, y, z, w) by this matrix and store the result in dest. |
Vector4f |
transform(Vector4f v)
Transform/multiply the given vector by this matrix and store the result in that vector.
|
Vector4f |
transform(Vector4fc v,
Vector4f dest)
Transform/multiply the given vector by this matrix and store the result in
dest. |
Matrix4f |
transformAab(float minX,
float minY,
float minZ,
float maxX,
float maxY,
float maxZ,
Vector3f outMin,
Vector3f outMax)
Transform the axis-aligned box given as the minimum corner
(minX, minY, minZ) and maximum corner (maxX, maxY, maxZ)
by this affine matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax. |
Matrix4f |
transformAab(Vector3fc min,
Vector3fc max,
Vector3f outMin,
Vector3f outMax)
Transform the axis-aligned box given as the minimum corner
min and maximum corner max
by this affine matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax. |
Vector4f |
transformAffine(float x,
float y,
float z,
float w,
Vector4f dest)
Transform/multiply the 4D-vector
(x, y, z, w) by assuming that this matrix represents an affine transformation
(i.e. |
Vector4f |
transformAffine(Vector4f v)
Transform/multiply the given 4D-vector by assuming that
this matrix represents an affine transformation
(i.e. |
Vector4f |
transformAffine(Vector4fc v,
Vector4f dest)
Transform/multiply the given 4D-vector by assuming that
this matrix represents an affine transformation
(i.e. |
Vector3f |
transformDirection(float x,
float y,
float z,
Vector3f dest)
Transform/multiply the given 3D-vector
(x, y, z), as if it was a 4D-vector with w=0, by
this matrix and store the result in dest. |
Vector3f |
transformDirection(Vector3f v)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=0, by
this matrix and store the result in that vector.
|
Vector3f |
transformDirection(Vector3fc v,
Vector3f dest)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=0, by
this matrix and store the result in
dest. |
Vector3f |
transformPosition(float x,
float y,
float z,
Vector3f dest)
Transform/multiply the 3D-vector
(x, y, z), as if it was a 4D-vector with w=1, by
this matrix and store the result in dest. |
Vector3f |
transformPosition(Vector3f v)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=1, by
this matrix and store the result in that vector.
|
Vector3f |
transformPosition(Vector3fc v,
Vector3f dest)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=1, by
this matrix and store the result in
dest. |
Vector4f |
transformProject(float x,
float y,
float z,
float w,
Vector4f dest)
Transform/multiply the vector
(x, y, z, w) by this matrix, perform perspective divide and store the result in dest. |
Vector3f |
transformProject(float x,
float y,
float z,
Vector3f dest)
Transform/multiply the vector
(x, y, z) by this matrix, perform perspective divide and store the result in dest. |
Vector3f |
transformProject(Vector3f v)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in that vector.
|
Vector3f |
transformProject(Vector3fc v,
Vector3f dest)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in
dest. |
Vector4f |
transformProject(Vector4f v)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in that vector.
|
Vector4f |
transformProject(Vector4fc v,
Vector4f dest)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in
dest. |
Matrix4f |
translate(float x,
float y,
float z,
Matrix4f dest)
Apply a translation to this matrix by translating by the given number of
units in x, y and z and store the result in
dest. |
Matrix4f |
translate(Vector3fc offset,
Matrix4f dest)
Apply a translation to this matrix by translating by the given number of
units in x, y and z and store the result in
dest. |
Matrix4f |
translateLocal(float x,
float y,
float z,
Matrix4f dest)
Pre-multiply a translation to this matrix by translating by the given number of
units in x, y and z and store the result in
dest. |
Matrix4f |
translateLocal(Vector3fc offset,
Matrix4f dest)
Pre-multiply a translation to this matrix by translating by the given number of
units in x, y and z and store the result in
dest. |
Matrix4f |
transpose(Matrix4f dest)
Transpose this matrix and store the result in
dest. |
Matrix3f |
transpose3x3(Matrix3f dest)
Transpose only the upper left 3x3 submatrix of this matrix and store the result in
dest. |
Matrix4f |
transpose3x3(Matrix4f dest)
Transpose only the upper left 3x3 submatrix of this matrix and store the result in
dest. |
Vector3f |
unproject(float winX,
float winY,
float winZ,
int[] viewport,
Vector3f dest)
Unproject the given window coordinates
(winX, winY, winZ) by this matrix using the specified viewport. |
Vector4f |
unproject(float winX,
float winY,
float winZ,
int[] viewport,
Vector4f dest)
Unproject the given window coordinates
(winX, winY, winZ) by this matrix using the specified viewport. |
Vector3f |
unproject(Vector3fc winCoords,
int[] viewport,
Vector3f dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Vector4f |
unproject(Vector3fc winCoords,
int[] viewport,
Vector4f dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Vector3f |
unprojectInv(float winX,
float winY,
float winZ,
int[] viewport,
Vector3f dest)
Unproject the given window coordinates
(winX, winY, winZ) by this matrix using the specified viewport. |
Vector4f |
unprojectInv(float winX,
float winY,
float winZ,
int[] viewport,
Vector4f dest)
Unproject the given window coordinates
(winX, winY, winZ) by this matrix using the specified viewport. |
Vector3f |
unprojectInv(Vector3fc winCoords,
int[] viewport,
Vector3f dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Vector4f |
unprojectInv(Vector3fc winCoords,
int[] viewport,
Vector4f dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Matrix4f |
unprojectInvRay(float winX,
float winY,
int[] viewport,
Vector3f originDest,
Vector3f dirDest)
Unproject the given 2D window coordinates
(winX, winY) by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0. |
Matrix4f |
unprojectInvRay(Vector2fc winCoords,
int[] viewport,
Vector3f originDest,
Vector3f dirDest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0. |
Matrix4f |
unprojectRay(float winX,
float winY,
int[] viewport,
Vector3f originDest,
Vector3f dirDest)
Unproject the given 2D window coordinates
(winX, winY) by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0. |
Matrix4f |
unprojectRay(Vector2fc winCoords,
int[] viewport,
Vector3f originDest,
Vector3f dirDest)
Unproject the given 2D window coordinates
winCoords by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0. |
Matrix4f |
withLookAtUp(float upX,
float upY,
float upZ,
Matrix4f dest)
Apply a transformation to this matrix to ensure that the local Y axis (as obtained by
positiveY(Vector3f))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3f)) and the
given vector (upX, upY, upZ), and store the result in dest. |
Matrix4f |
withLookAtUp(Vector3fc up,
Matrix4f dest)
Apply a transformation to this matrix to ensure that the local Y axis (as obtained by
positiveY(Vector3f))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3f)) and the
given vector up, and store the result in dest. |
static final int PLANE_NX
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation x=-1 when using the identity matrix.static final int PLANE_PX
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation x=1 when using the identity matrix.static final int PLANE_NY
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation y=-1 when using the identity matrix.static final int PLANE_PY
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation y=1 when using the identity matrix.static final int PLANE_NZ
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation z=-1 when using the identity matrix.static final int PLANE_PZ
frustumPlane(int, Vector4f) and
frustumPlane(int, Planef)
identifying the plane with equation z=1 when using the identity matrix.static final int CORNER_NXNYNZ
frustumCorner(int, Vector3f)
identifying the corner (-1, -1, -1) when using the identity matrix.static final int CORNER_PXNYNZ
frustumCorner(int, Vector3f)
identifying the corner (1, -1, -1) when using the identity matrix.static final int CORNER_PXPYNZ
frustumCorner(int, Vector3f)
identifying the corner (1, 1, -1) when using the identity matrix.static final int CORNER_NXPYNZ
frustumCorner(int, Vector3f)
identifying the corner (-1, 1, -1) when using the identity matrix.static final int CORNER_PXNYPZ
frustumCorner(int, Vector3f)
identifying the corner (1, -1, 1) when using the identity matrix.static final int CORNER_NXNYPZ
frustumCorner(int, Vector3f)
identifying the corner (-1, -1, 1) when using the identity matrix.static final int CORNER_NXPYPZ
frustumCorner(int, Vector3f)
identifying the corner (-1, 1, 1) when using the identity matrix.static final int CORNER_PXPYPZ
frustumCorner(int, Vector3f)
identifying the corner (1, 1, 1) when using the identity matrix.static final byte PROPERTY_PERSPECTIVE
properties() to indicate that the matrix represents a perspective transformation.static final byte PROPERTY_AFFINE
properties() to indicate that the matrix represents an affine transformation.static final byte PROPERTY_IDENTITY
properties() to indicate that the matrix represents the identity transformation.static final byte PROPERTY_TRANSLATION
properties() to indicate that the matrix represents a pure translation transformation.static final byte PROPERTY_ORTHONORMAL
properties() to indicate that the upper-left 3x3 submatrix represents an orthogonal
matrix (i.e. orthonormal basis). For practical reasons, this property also always implies
PROPERTY_AFFINE in this implementation.int properties()
PROPERTY_IDENTITY, PROPERTY_AFFINE,
PROPERTY_TRANSLATION and PROPERTY_PERSPECTIVE.float m00()
float m01()
float m02()
float m03()
float m10()
float m11()
float m12()
float m13()
float m20()
float m21()
float m22()
float m23()
float m30()
float m31()
float m32()
float m33()
Matrix4f mul(Matrix4fc right, Matrix4f dest)
right matrix and store the result in dest.
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the matrix multiplicationdest - the destination matrix, which will hold the resultMatrix4f mulLocal(Matrix4fc left, Matrix4f dest)
left matrix and store the result in dest.
If M is this matrix and L the left matrix,
then the new matrix will be L * M. So when transforming a
vector v with the new matrix by using L * M * v, the
transformation of this matrix will be applied first!
left - the left operand of the matrix multiplicationdest - the destination matrix, which will hold the resultMatrix4f mulLocalAffine(Matrix4fc left, Matrix4f dest)
left matrix, both of which are assumed to be affine, and store the result in dest.
This method assumes that this matrix and the given left matrix both represent an affine transformation
(i.e. their last rows are equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrices only represent affine transformations, such as translation, rotation, scaling and shearing (in any combination).
This method will not modify either the last row of this or the last row of left.
If M is this matrix and L the left matrix,
then the new matrix will be L * M. So when transforming a
vector v with the new matrix by using L * M * v, the
transformation of this matrix will be applied first!
left - the left operand of the matrix multiplication (the last row is assumed to be (0, 0, 0, 1))dest - the destination matrix, which will hold the resultMatrix4f mul(Matrix3x2fc right, Matrix4f dest)
right matrix and store the result in dest.
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the matrix multiplicationdest - the destination matrix, which will hold the resultMatrix4f mul(Matrix4x3fc right, Matrix4f dest)
right matrix and store the result in dest.
The last row of the right matrix is assumed to be (0, 0, 0, 1).
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the matrix multiplicationdest - the destination matrix, which will hold the resultMatrix4f mulPerspectiveAffine(Matrix4fc view, Matrix4f dest)
this symmetric perspective projection matrix by the supplied affine view matrix and store the result in dest.
If P is this matrix and V the view matrix,
then the new matrix will be P * V. So when transforming a
vector v with the new matrix by using P * V * v, the
transformation of the view matrix will be applied first!
view - the affine matrix to multiply this symmetric perspective projection matrix bydest - the destination matrix, which will hold the resultMatrix4f mulPerspectiveAffine(Matrix4x3fc view, Matrix4f dest)
this symmetric perspective projection matrix by the supplied view matrix and store the result in dest.
If P is this matrix and V the view matrix,
then the new matrix will be P * V. So when transforming a
vector v with the new matrix by using P * V * v, the
transformation of the view matrix will be applied first!
view - the matrix to multiply this symmetric perspective projection matrix bydest - the destination matrix, which will hold the resultMatrix4f mulAffineR(Matrix4fc right, Matrix4f dest)
right matrix, which is assumed to be affine, and store the result in dest.
This method assumes that the given right matrix represents an affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrix only represents affine transformations, such as translation, rotation, scaling and shearing (in any combination).
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the matrix multiplication (the last row is assumed to be (0, 0, 0, 1))dest - the destination matrix, which will hold the resultMatrix4f mulAffine(Matrix4fc right, Matrix4f dest)
right matrix, both of which are assumed to be affine, and store the result in dest.
This method assumes that this matrix and the given right matrix both represent an affine transformation
(i.e. their last rows are equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrices only represent affine transformations, such as translation, rotation, scaling and shearing (in any combination).
This method will not modify either the last row of this or the last row of right.
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the matrix multiplication (the last row is assumed to be (0, 0, 0, 1))dest - the destination matrix, which will hold the resultMatrix4f mulTranslationAffine(Matrix4fc right, Matrix4f dest)
right matrix, which is assumed to be affine, and store the result in dest.
This method assumes that this matrix only contains a translation, and that the given right matrix represents an affine transformation
(i.e. its last row is equal to (0, 0, 0, 1)).
This method will not modify either the last row of this or the last row of right.
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the matrix multiplication (the last row is assumed to be (0, 0, 0, 1))dest - the destination matrix, which will hold the resultMatrix4f mulOrthoAffine(Matrix4fc view, Matrix4f dest)
this orthographic projection matrix by the supplied affine view matrix
and store the result in dest.
If M is this matrix and V the view matrix,
then the new matrix will be M * V. So when transforming a
vector v with the new matrix by using M * V * v, the
transformation of the view matrix will be applied first!
view - the affine matrix which to multiply this withdest - the destination matrix, which will hold the resultMatrix4f fma4x3(Matrix4fc other, float otherFactor, Matrix4f dest)
this and other
by first multiplying each component of other's 4x3 submatrix by otherFactor,
adding that to this and storing the final result in dest.
The other components of dest will be set to the ones of this.
The matrices this and other will not be changed.
other - the other matrixotherFactor - the factor to multiply each of the other matrix's 4x3 componentsdest - will hold the resultMatrix4f add(Matrix4fc other, Matrix4f dest)
this and other and store the result in dest.other - the other addenddest - will hold the resultMatrix4f sub(Matrix4fc subtrahend, Matrix4f dest)
subtrahend from this and store the result in dest.subtrahend - the subtrahenddest - will hold the resultMatrix4f mulComponentWise(Matrix4fc other, Matrix4f dest)
this by other and store the result in dest.other - the other matrixdest - will hold the resultMatrix4f add4x3(Matrix4fc other, Matrix4f dest)
this and other
and store the result in dest.
The other components of dest will be set to the ones of this.
other - the other addenddest - will hold the resultMatrix4f sub4x3(Matrix4fc subtrahend, Matrix4f dest)
subtrahend from this
and store the result in dest.
The other components of dest will be set to the ones of this.
subtrahend - the subtrahenddest - will hold the resultMatrix4f mul4x3ComponentWise(Matrix4fc other, Matrix4f dest)
this by other
and store the result in dest.
The other components of dest will be set to the ones of this.
other - the other matrixdest - will hold the resultfloat determinant()
If this matrix represents an affine transformation, such as translation, rotation, scaling and shearing,
and thus its last row is equal to (0, 0, 0, 1), then determinantAffine() can be used instead of this method.
determinantAffine()float determinant3x3()
float determinantAffine()
affine transformation and thus
its last row is equal to (0, 0, 0, 1).Matrix4f invert(Matrix4f dest)
dest.
If this matrix represents an affine transformation, such as translation, rotation, scaling and shearing,
and thus its last row is equal to (0, 0, 0, 1), then invertAffine(Matrix4f) can be used instead of this method.
dest - will hold the resultinvertAffine(Matrix4f)Matrix4f invertPerspective(Matrix4f dest)
this is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation,
then this method builds the inverse of this and stores it into the given dest.
This method can be used to quickly obtain the inverse of a perspective projection matrix when being obtained via perspective().
dest - will hold the inverse of thisperspective(float, float, float, float, Matrix4f)Matrix4f invertFrustum(Matrix4f dest)
this is an arbitrary perspective projection matrix obtained via one of the frustum() methods,
then this method builds the inverse of this and stores it into the given dest.
This method can be used to quickly obtain the inverse of a perspective projection matrix.
If this matrix represents a symmetric perspective frustum transformation, as obtained via perspective(), then
invertPerspective(Matrix4f) should be used instead.
dest - will hold the inverse of thisfrustum(float, float, float, float, float, float, Matrix4f),
invertPerspective(Matrix4f)Matrix4f invertOrtho(Matrix4f dest)
this orthographic projection matrix and store the result into the given dest.
This method can be used to quickly obtain the inverse of an orthographic projection matrix.
dest - will hold the inverse of thisMatrix4f invertPerspectiveView(Matrix4fc view, Matrix4f dest)
this is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation
and the given view matrix is affine and has unit scaling (for example by being obtained via lookAt()),
then this method builds the inverse of this * view and stores it into the given dest.
This method can be used to quickly obtain the inverse of the combination of the view and projection matrices, when both were obtained
via the common methods perspective() and lookAt() or
other methods, that build affine matrices, such as translate and rotate(float, float, float, float, Matrix4f), except for scale().
For the special cases of the matrices this and view mentioned above, this method is equivalent to the following code:
dest.set(this).mul(view).invert();
view - the view transformation (must be affine and have unit scaling)dest - will hold the inverse of this * viewMatrix4f invertPerspectiveView(Matrix4x3fc view, Matrix4f dest)
this is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation
and the given view matrix has unit scaling,
then this method builds the inverse of this * view and stores it into the given dest.
This method can be used to quickly obtain the inverse of the combination of the view and projection matrices, when both were obtained
via the common methods perspective() and lookAt() or
other methods, that build affine matrices, such as translate and rotate(float, float, float, float, Matrix4f), except for scale().
For the special cases of the matrices this and view mentioned above, this method is equivalent to the following code:
dest.set(this).mul(view).invert();
view - the view transformation (must have unit scaling)dest - will hold the inverse of this * viewMatrix4f invertAffine(Matrix4f dest)
affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and write the result into dest.dest - will hold the resultMatrix4f transpose(Matrix4f dest)
dest.dest - will hold the resultMatrix4f transpose3x3(Matrix4f dest)
dest.
All other matrix elements are left unchanged.
dest - will hold the resultMatrix3f transpose3x3(Matrix3f dest)
dest.dest - will hold the resultVector3f getTranslation(Vector3f dest)
(m30, m31, m32) of this matrix and store them in the given vector xyz.dest - will hold the translation components of this matrixVector3f getScale(Vector3f dest)
this matrix for the three base axes.dest - will hold the scaling factors for x, y and zMatrix4f get(Matrix4f dest)
this matrix and store them into
dest.dest - the destination matrixMatrix4x3f get4x3(Matrix4x3f dest)
this matrix and store them into
dest.dest - the destination matrixMatrix4x3f.set(Matrix4fc)Matrix4d get(Matrix4d dest)
this matrix and store them into
dest.dest - the destination matrixMatrix3f get3x3(Matrix3f dest)
this matrix and store them into
dest.dest - the destination matrixMatrix3f.set(Matrix4fc)Matrix3d get3x3(Matrix3d dest)
this matrix and store them into
dest.dest - the destination matrixMatrix3d.set(Matrix4fc)AxisAngle4f getRotation(AxisAngle4f dest)
this matrix and store the represented rotation
into the given AxisAngle4f.dest - the destination AxisAngle4fAxisAngle4f.set(Matrix4fc)AxisAngle4d getRotation(AxisAngle4d dest)
this matrix and store the represented rotation
into the given AxisAngle4d.dest - the destination AxisAngle4dAxisAngle4f.set(Matrix4fc)Quaternionf getUnnormalizedRotation(Quaternionf dest)
this matrix and store the represented rotation
into the given Quaternionf.
This method assumes that the first three column vectors of the upper left 3x3 submatrix are not normalized and thus allows to ignore any additional scaling factor that is applied to the matrix.
dest - the destination QuaternionfQuaternionf.setFromUnnormalized(Matrix4fc)Quaternionf getNormalizedRotation(Quaternionf dest)
this matrix and store the represented rotation
into the given Quaternionf.
This method assumes that the first three column vectors of the upper left 3x3 submatrix are normalized.
dest - the destination QuaternionfQuaternionf.setFromNormalized(Matrix4fc)Quaterniond getUnnormalizedRotation(Quaterniond dest)
this matrix and store the represented rotation
into the given Quaterniond.
This method assumes that the first three column vectors of the upper left 3x3 submatrix are not normalized and thus allows to ignore any additional scaling factor that is applied to the matrix.
dest - the destination QuaterniondQuaterniond.setFromUnnormalized(Matrix4fc)Quaterniond getNormalizedRotation(Quaterniond dest)
this matrix and store the represented rotation
into the given Quaterniond.
This method assumes that the first three column vectors of the upper left 3x3 submatrix are normalized.
dest - the destination QuaterniondQuaterniond.setFromNormalized(Matrix4fc)FloatBuffer get(FloatBuffer buffer)
FloatBuffer at the current
buffer position.
This method will not increment the position of the given FloatBuffer.
In order to specify the offset into the FloatBuffer at which
the matrix is stored, use get(int, FloatBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positionget(int, FloatBuffer)FloatBuffer get(int index, FloatBuffer buffer)
FloatBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given FloatBuffer.
index - the absolute position into the FloatBufferbuffer - will receive the values of this matrix in column-major orderByteBuffer get(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use get(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positionget(int, ByteBuffer)ByteBuffer get(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of this matrix in column-major orderFloatBuffer get4x3(FloatBuffer buffer)
FloatBuffer at the current
buffer position.
This method will not increment the position of the given FloatBuffer.
In order to specify the offset into the FloatBuffer at which
the matrix is stored, use get(int, FloatBuffer), taking
the absolute position as parameter.
buffer - will receive the values of the upper 4x3 submatrix in column-major order at its current positionget(int, FloatBuffer)FloatBuffer get4x3(int index, FloatBuffer buffer)
FloatBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given FloatBuffer.
index - the absolute position into the FloatBufferbuffer - will receive the values of the upper 4x3 submatrix in column-major orderByteBuffer get4x3(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use get(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of the upper 4x3 submatrix in column-major order at its current positionget(int, ByteBuffer)ByteBuffer get4x3(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of the upper 4x3 submatrix in column-major orderFloatBuffer getTransposed(FloatBuffer buffer)
FloatBuffer at the current
buffer position.
This method will not increment the position of the given FloatBuffer.
In order to specify the offset into the FloatBuffer at which
the matrix is stored, use getTransposed(int, FloatBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positiongetTransposed(int, FloatBuffer)FloatBuffer getTransposed(int index, FloatBuffer buffer)
FloatBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given FloatBuffer.
index - the absolute position into the FloatBufferbuffer - will receive the values of this matrix in column-major orderByteBuffer getTransposed(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use getTransposed(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positiongetTransposed(int, ByteBuffer)ByteBuffer getTransposed(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of this matrix in column-major orderFloatBuffer get4x3Transposed(FloatBuffer buffer)
this matrix in row-major order into the supplied FloatBuffer at the current
buffer position.
This method will not increment the position of the given FloatBuffer.
In order to specify the offset into the FloatBuffer at which
the matrix is stored, use get4x3Transposed(int, FloatBuffer), taking
the absolute position as parameter.
buffer - will receive the values of the upper 4x3 submatrix in row-major order at its current positionget4x3Transposed(int, FloatBuffer)FloatBuffer get4x3Transposed(int index, FloatBuffer buffer)
this matrix in row-major order into the supplied FloatBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given FloatBuffer.
index - the absolute position into the FloatBufferbuffer - will receive the values of the upper 4x3 submatrix in row-major orderByteBuffer get4x3Transposed(ByteBuffer buffer)
this matrix in row-major order into the supplied ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use get4x3Transposed(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of the upper 4x3 submatrix in row-major order at its current positionget4x3Transposed(int, ByteBuffer)ByteBuffer get4x3Transposed(int index, ByteBuffer buffer)
this matrix in row-major order into the supplied ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of the upper 4x3 submatrix in row-major orderfloat[] get(float[] arr,
int offset)
arr - the array to write the matrix values intooffset - the offset into the arrayfloat[] get(float[] arr)
In order to specify an explicit offset into the array, use the method get(float[], int).
arr - the array to write the matrix values intoget(float[], int)Vector4f transform(Vector4f v)
v - the vector to transform and to hold the final resultVector4f.mul(Matrix4fc)Vector4f transform(Vector4fc v, Vector4f dest)
dest.v - the vector to transformdest - will contain the resultVector4f.mul(Matrix4fc, Vector4f)Vector4f transform(float x, float y, float z, float w, Vector4f dest)
(x, y, z, w) by this matrix and store the result in dest.x - the x coordinate of the vector to transformy - the y coordinate of the vector to transformz - the z coordinate of the vector to transformw - the w coordinate of the vector to transformdest - will contain the resultVector4f transformProject(Vector4f v)
v - the vector to transform and to hold the final resultVector4f.mulProject(Matrix4fc)Vector4f transformProject(Vector4fc v, Vector4f dest)
dest.v - the vector to transformdest - will contain the resultVector4f.mulProject(Matrix4fc, Vector4f)Vector4f transformProject(float x, float y, float z, float w, Vector4f dest)
(x, y, z, w) by this matrix, perform perspective divide and store the result in dest.x - the x coordinate of the vector to transformy - the y coordinate of the vector to transformz - the z coordinate of the vector to transformw - the w coordinate of the vector to transformdest - will contain the resultVector3f transformProject(Vector3f v)
This method uses w=1.0 as the fourth vector component.
v - the vector to transform and to hold the final resultVector3f.mulProject(Matrix4fc)Vector3f transformProject(Vector3fc v, Vector3f dest)
dest.
This method uses w=1.0 as the fourth vector component.
v - the vector to transformdest - will contain the resultVector3f.mulProject(Matrix4fc, Vector3f)Vector3f transformProject(float x, float y, float z, Vector3f dest)
(x, y, z) by this matrix, perform perspective divide and store the result in dest.
This method uses w=1.0 as the fourth vector component.
x - the x coordinate of the vector to transformy - the y coordinate of the vector to transformz - the z coordinate of the vector to transformdest - will contain the resultVector3f transformPosition(Vector3f v)
The given 3D-vector is treated as a 4D-vector with its w-component being 1.0, so it
will represent a position/location in 3D-space rather than a direction. This method is therefore
not suited for perspective projection transformations as it will not save the
w component of the transformed vector.
For perspective projection use transform(Vector4f) or transformProject(Vector3f)
when perspective divide should be applied, too.
In order to store the result in another vector, use transformPosition(Vector3fc, Vector3f).
v - the vector to transform and to hold the final resulttransformPosition(Vector3fc, Vector3f),
transform(Vector4f),
transformProject(Vector3f)Vector3f transformPosition(Vector3fc v, Vector3f dest)
dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 1.0, so it
will represent a position/location in 3D-space rather than a direction. This method is therefore
not suited for perspective projection transformations as it will not save the
w component of the transformed vector.
For perspective projection use transform(Vector4fc, Vector4f) or
transformProject(Vector3fc, Vector3f) when perspective divide should be applied, too.
In order to store the result in the same vector, use transformPosition(Vector3f).
v - the vector to transformdest - will hold the resulttransformPosition(Vector3f),
transform(Vector4fc, Vector4f),
transformProject(Vector3fc, Vector3f)Vector3f transformPosition(float x, float y, float z, Vector3f dest)
(x, y, z), as if it was a 4D-vector with w=1, by
this matrix and store the result in dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 1.0, so it
will represent a position/location in 3D-space rather than a direction. This method is therefore
not suited for perspective projection transformations as it will not save the
w component of the transformed vector.
For perspective projection use transform(float, float, float, float, Vector4f) or
transformProject(float, float, float, Vector3f) when perspective divide should be applied, too.
x - the x coordinate of the positiony - the y coordinate of the positionz - the z coordinate of the positiondest - will hold the resulttransform(float, float, float, float, Vector4f),
transformProject(float, float, float, Vector3f)Vector3f transformDirection(Vector3f v)
The given 3D-vector is treated as a 4D-vector with its w-component being 0.0, so it
will represent a direction in 3D-space rather than a position. This method will therefore
not take the translation part of the matrix into account.
In order to store the result in another vector, use transformDirection(Vector3fc, Vector3f).
v - the vector to transform and to hold the final resulttransformDirection(Vector3fc, Vector3f)Vector3f transformDirection(Vector3fc v, Vector3f dest)
dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 0.0, so it
will represent a direction in 3D-space rather than a position. This method will therefore
not take the translation part of the matrix into account.
In order to store the result in the same vector, use transformDirection(Vector3f).
v - the vector to transform and to hold the final resultdest - will hold the resulttransformDirection(Vector3f)Vector3f transformDirection(float x, float y, float z, Vector3f dest)
(x, y, z), as if it was a 4D-vector with w=0, by
this matrix and store the result in dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 0.0, so it
will represent a direction in 3D-space rather than a position. This method will therefore
not take the translation part of the matrix into account.
x - the x coordinate of the direction to transformy - the y coordinate of the direction to transformz - the z coordinate of the direction to transformdest - will hold the resultVector4f transformAffine(Vector4f v)
this matrix represents an affine transformation
(i.e. its last row is equal to (0, 0, 0, 1)).
In order to store the result in another vector, use transformAffine(Vector4fc, Vector4f).
v - the vector to transform and to hold the final resulttransformAffine(Vector4fc, Vector4f)Vector4f transformAffine(Vector4fc v, Vector4f dest)
this matrix represents an affine transformation
(i.e. its last row is equal to (0, 0, 0, 1)) and store the result in dest.
In order to store the result in the same vector, use transformAffine(Vector4f).
v - the vector to transform and to hold the final resultdest - will hold the resulttransformAffine(Vector4f)Vector4f transformAffine(float x, float y, float z, float w, Vector4f dest)
(x, y, z, w) by assuming that this matrix represents an affine transformation
(i.e. its last row is equal to (0, 0, 0, 1)) and store the result in dest.x - the x coordinate of the direction to transformy - the y coordinate of the direction to transformz - the z coordinate of the direction to transformw - the w coordinate of the direction to transformdest - will hold the resultMatrix4f scale(Vector3fc xyz, Matrix4f dest)
this matrix by scaling the base axes by the given xyz.x,
xyz.y and xyz.z factors, respectively and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v
, the scaling will be applied first!
xyz - the factors of the x, y and z component, respectivelydest - will hold the resultMatrix4f scale(float xyz, Matrix4f dest)
xyz factor
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
scaling will be applied first!
Individual scaling of all three axes can be applied using scale(float, float, float, Matrix4f).
xyz - the factor for all componentsdest - will hold the resultscale(float, float, float, Matrix4f)Matrix4f scaleXY(float x, float y, Matrix4f dest)
x and the Y axis by y
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
scaling will be applied first!
x - the factor of the x componenty - the factor of the y componentdest - will hold the resultMatrix4f scale(float x, float y, float z, Matrix4f dest)
this matrix by scaling the base axes by the given x,
y and z factors and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v
, the scaling will be applied first!
x - the factor of the x componenty - the factor of the y componentz - the factor of the z componentdest - will hold the resultMatrix4f scaleAround(float sx, float sy, float sz, float ox, float oy, float oz, Matrix4f dest)
this matrix by scaling the base axes by the given sx,
sy and sz factors while using (ox, oy, oz) as the scaling origin,
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v
, the scaling will be applied first!
This method is equivalent to calling: translate(ox, oy, oz, dest).scale(sx, sy, sz).translate(-ox, -oy, -oz)
sx - the scaling factor of the x componentsy - the scaling factor of the y componentsz - the scaling factor of the z componentox - the x coordinate of the scaling originoy - the y coordinate of the scaling originoz - the z coordinate of the scaling origindest - will hold the resultMatrix4f scaleAround(float factor, float ox, float oy, float oz, Matrix4f dest)
factor
while using (ox, oy, oz) as the scaling origin,
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
scaling will be applied first!
This method is equivalent to calling: translate(ox, oy, oz, dest).scale(factor).translate(-ox, -oy, -oz)
factor - the scaling factor for all three axesox - the x coordinate of the scaling originoy - the y coordinate of the scaling originoz - the z coordinate of the scaling origindest - will hold the resultMatrix4f scaleLocal(float xyz, Matrix4f dest)
this matrix by scaling all base axes by the given xyz factor,
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v
, the scaling will be applied last!
xyz - the factor to scale all three base axes bydest - will hold the resultMatrix4f scaleLocal(float x, float y, float z, Matrix4f dest)
this matrix by scaling the base axes by the given x,
y and z factors and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v
, the scaling will be applied last!
x - the factor of the x componenty - the factor of the y componentz - the factor of the z componentdest - will hold the resultMatrix4f scaleAroundLocal(float sx, float sy, float sz, float ox, float oy, float oz, Matrix4f dest)
this matrix by scaling the base axes by the given sx,
sy and sz factors while using the given (ox, oy, oz) as the scaling origin,
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v
, the scaling will be applied last!
This method is equivalent to calling: new Matrix4f().translate(ox, oy, oz).scale(sx, sy, sz).translate(-ox, -oy, -oz).mul(this, dest)
sx - the scaling factor of the x componentsy - the scaling factor of the y componentsz - the scaling factor of the z componentox - the x coordinate of the scaling originoy - the y coordinate of the scaling originoz - the z coordinate of the scaling origindest - will hold the resultMatrix4f scaleAroundLocal(float factor, float ox, float oy, float oz, Matrix4f dest)
factor
while using (ox, oy, oz) as the scaling origin,
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v, the
scaling will be applied last!
This method is equivalent to calling: new Matrix4f().translate(ox, oy, oz).scale(factor).translate(-ox, -oy, -oz).mul(this, dest)
factor - the scaling factor for all three axesox - the x coordinate of the scaling originoy - the y coordinate of the scaling originoz - the z coordinate of the scaling origindest - will hold the resultMatrix4f rotateX(float ang, Matrix4f dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansdest - will hold the resultMatrix4f rotateY(float ang, Matrix4f dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansdest - will hold the resultMatrix4f rotateZ(float ang, Matrix4f dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansdest - will hold the resultMatrix4f rotateTowardsXY(float dirX, float dirY, Matrix4f dest)
+X towards (dirX, dirY) and store the result in dest.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
The vector (dirX, dirY) must be a unit vector.
dirX - the x component of the normalized directiondirY - the y component of the normalized directiondest - will hold the resultMatrix4f rotateXYZ(float angleX, float angleY, float angleZ, Matrix4f dest)
angleX radians about the X axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
This method is equivalent to calling: rotateX(angleX, dest).rotateY(angleY).rotateZ(angleZ)
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zdest - will hold the resultMatrix4f rotateAffineXYZ(float angleX, float angleY, float angleZ, Matrix4f dest)
angleX radians about the X axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
This method assumes that this matrix represents an affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrix only represents affine transformations, such as translation, rotation, scaling and shearing (in any combination).
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zdest - will hold the resultMatrix4f rotateZYX(float angleZ, float angleY, float angleX, Matrix4f dest)
angleZ radians about the Z axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleX radians about the X axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
This method is equivalent to calling: rotateZ(angleZ, dest).rotateY(angleY).rotateX(angleX)
angleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xdest - will hold the resultMatrix4f rotateAffineZYX(float angleZ, float angleY, float angleX, Matrix4f dest)
angleZ radians about the Z axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleX radians about the X axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
This method assumes that this matrix represents an affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrix only represents affine transformations, such as translation, rotation, scaling and shearing (in any combination).
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
angleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xdest - will hold the resultMatrix4f rotateYXZ(float angleY, float angleX, float angleZ, Matrix4f dest)
angleY radians about the Y axis, followed by a rotation of angleX radians about the X axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
This method is equivalent to calling: rotateY(angleY, dest).rotateX(angleX).rotateZ(angleZ)
angleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zdest - will hold the resultMatrix4f rotateAffineYXZ(float angleY, float angleX, float angleZ, Matrix4f dest)
angleY radians about the Y axis, followed by a rotation of angleX radians about the X axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
This method assumes that this matrix represents an affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrix only represents affine transformations, such as translation, rotation, scaling and shearing (in any combination).
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
angleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zdest - will hold the resultMatrix4f rotate(float ang, float x, float y, float z, Matrix4f dest)
(x, y, z) axis and store the result in dest.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4f rotateTranslation(float ang, float x, float y, float z, Matrix4f dest)
(x, y, z) axis and store the result in dest.
This method assumes this to only contain a translation.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4f rotateAffine(float ang, float x, float y, float z, Matrix4f dest)
affine matrix by rotating the given amount of radians
about the specified (x, y, z) axis and store the result in dest.
This method assumes this to be affine.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4f rotateLocal(float ang, float x, float y, float z, Matrix4f dest)
(x, y, z) axis and store the result in dest.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
Reference: http://en.wikipedia.org
ang - the angle in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4f rotateLocalX(float ang, Matrix4f dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
Reference: http://en.wikipedia.org
ang - the angle in radians to rotate about the X axisdest - will hold the resultMatrix4f rotateLocalY(float ang, Matrix4f dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
Reference: http://en.wikipedia.org
ang - the angle in radians to rotate about the Y axisdest - will hold the resultMatrix4f rotateLocalZ(float ang, Matrix4f dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
Reference: http://en.wikipedia.org
ang - the angle in radians to rotate about the Z axisdest - will hold the resultMatrix4f translate(Vector3fc offset, Matrix4f dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be M * T. So when
transforming a vector v with the new matrix by using
M * T * v, the translation will be applied first!
offset - the number of units in x, y and z by which to translatedest - will hold the resultMatrix4f translate(float x, float y, float z, Matrix4f dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be M * T. So when
transforming a vector v with the new matrix by using
M * T * v, the translation will be applied first!
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in zdest - will hold the resultMatrix4f translateLocal(Vector3fc offset, Matrix4f dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be T * M. So when
transforming a vector v with the new matrix by using
T * M * v, the translation will be applied last!
offset - the number of units in x, y and z by which to translatedest - will hold the resultMatrix4f translateLocal(float x, float y, float z, Matrix4f dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be T * M. So when
transforming a vector v with the new matrix by using
T * M * v, the translation will be applied last!
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in zdest - will hold the resultMatrix4f ortho(float left, float right, float bottom, float top, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancezZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4f ortho(float left, float right, float bottom, float top, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4f orthoLH(float left, float right, float bottom, float top, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancezZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4f orthoLH(float left, float right, float bottom, float top, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4f orthoSymmetric(float width, float height, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
This method is equivalent to calling ortho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f orthoSymmetric(float width, float height, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
This method is equivalent to calling ortho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4f orthoSymmetricLH(float width, float height, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
This method is equivalent to calling orthoLH() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f orthoSymmetricLH(float width, float height, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
This method is equivalent to calling orthoLH() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4f ortho2D(float left, float right, float bottom, float top, Matrix4f dest)
dest.
This method is equivalent to calling ortho() with
zNear=-1 and zFar=+1.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgedest - will hold the resultortho(float, float, float, float, float, float, Matrix4f)Matrix4f ortho2DLH(float left, float right, float bottom, float top, Matrix4f dest)
dest.
This method is equivalent to calling orthoLH() with
zNear=-1 and zFar=+1.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgedest - will hold the resultorthoLH(float, float, float, float, float, float, Matrix4f)Matrix4f lookAlong(Vector3fc dir, Vector3fc up, Matrix4f dest)
-z point along dir
and store the result in dest.
If M is this matrix and L the lookalong rotation matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v, the
lookalong rotation transformation will be applied first!
This is equivalent to calling
lookAt
with eye = (0, 0, 0) and center = dir.
dir - the direction in space to look alongup - the direction of 'up'dest - will hold the resultlookAlong(float, float, float, float, float, float, Matrix4f),
lookAt(Vector3fc, Vector3fc, Vector3fc, Matrix4f)Matrix4f lookAlong(float dirX, float dirY, float dirZ, float upX, float upY, float upZ, Matrix4f dest)
-z point along dir
and store the result in dest.
If M is this matrix and L the lookalong rotation matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v, the
lookalong rotation transformation will be applied first!
This is equivalent to calling
lookAt()
with eye = (0, 0, 0) and center = dir.
dirX - the x-coordinate of the direction to look alongdirY - the y-coordinate of the direction to look alongdirZ - the z-coordinate of the direction to look alongupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultlookAt(float, float, float, float, float, float, float, float, float, Matrix4f)Matrix4f lookAt(Vector3fc eye, Vector3fc center, Vector3fc up, Matrix4f dest)
-z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'dest - will hold the resultlookAt(float, float, float, float, float, float, float, float, float, Matrix4f)Matrix4f lookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ, Matrix4f dest)
-z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eyeX - the x-coordinate of the eye/camera locationeyeY - the y-coordinate of the eye/camera locationeyeZ - the z-coordinate of the eye/camera locationcenterX - the x-coordinate of the point to look atcenterY - the y-coordinate of the point to look atcenterZ - the z-coordinate of the point to look atupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultlookAt(Vector3fc, Vector3fc, Vector3fc, Matrix4f)Matrix4f lookAtPerspective(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ, Matrix4f dest)
-z with center - eye and store the result in dest.
This method assumes this to be a perspective transformation, obtained via
frustum() or perspective() or
one of their overloads.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eyeX - the x-coordinate of the eye/camera locationeyeY - the y-coordinate of the eye/camera locationeyeZ - the z-coordinate of the eye/camera locationcenterX - the x-coordinate of the point to look atcenterY - the y-coordinate of the point to look atcenterZ - the z-coordinate of the point to look atupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultMatrix4f lookAtLH(Vector3fc eye, Vector3fc center, Vector3fc up, Matrix4f dest)
+z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'dest - will hold the resultlookAtLH(float, float, float, float, float, float, float, float, float, Matrix4f)Matrix4f lookAtLH(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ, Matrix4f dest)
+z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eyeX - the x-coordinate of the eye/camera locationeyeY - the y-coordinate of the eye/camera locationeyeZ - the z-coordinate of the eye/camera locationcenterX - the x-coordinate of the point to look atcenterY - the y-coordinate of the point to look atcenterZ - the z-coordinate of the point to look atupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultlookAtLH(Vector3fc, Vector3fc, Vector3fc, Matrix4f)Matrix4f lookAtPerspectiveLH(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ, Matrix4f dest)
+z with center - eye and store the result in dest.
This method assumes this to be a perspective transformation, obtained via
frustumLH() or perspectiveLH() or
one of their overloads.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eyeX - the x-coordinate of the eye/camera locationeyeY - the y-coordinate of the eye/camera locationeyeZ - the z-coordinate of the eye/camera locationcenterX - the x-coordinate of the point to look atcenterY - the y-coordinate of the point to look atcenterZ - the z-coordinate of the point to look atupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultMatrix4f perspective(float fovy, float aspect, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)aspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f perspective(float fovy, float aspect, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)aspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultMatrix4f perspectiveRect(float width, float height, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
width - the width of the near frustum planeheight - the height of the near frustum planezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f perspectiveRect(float width, float height, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
width - the width of the near frustum planeheight - the height of the near frustum planezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultMatrix4f perspectiveRect(float width, float height, float zNear, float zFar, boolean zZeroToOne)
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
width - the width of the near frustum planeheight - the height of the near frustum planezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.zZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f perspectiveRect(float width, float height, float zNear, float zFar)
[-1..+1] to this matrix.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
width - the width of the near frustum planeheight - the height of the near frustum planezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.Matrix4f perspectiveOffCenter(float fovy, float offAngleX, float offAngleY, float aspect, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f perspectiveOffCenter(float fovy, float offAngleX, float offAngleY, float aspect, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultMatrix4f perspectiveOffCenter(float fovy, float offAngleX, float offAngleY, float aspect, float zNear, float zFar, boolean zZeroToOne)
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.zZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4f perspectiveOffCenter(float fovy, float offAngleX, float offAngleY, float aspect, float zNear, float zFar)
[-1..+1] to this matrix.
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.Matrix4f perspectiveLH(float fovy, float aspect, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)aspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.zZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4f perspectiveLH(float fovy, float aspect, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
fovy - the vertical field of view in radians (must be greater than zero and less than PI)aspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultMatrix4f frustum(float left, float right, float bottom, float top, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and F the frustum matrix,
then the new matrix will be M * F. So when transforming a
vector v with the new matrix by using M * F * v,
the frustum transformation will be applied first!
Reference: http://www.songho.ca
left - the distance along the x-axis to the left frustum edgeright - the distance along the x-axis to the right frustum edgebottom - the distance along the y-axis to the bottom frustum edgetop - the distance along the y-axis to the top frustum edgezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.zZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4f frustum(float left, float right, float bottom, float top, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and F the frustum matrix,
then the new matrix will be M * F. So when transforming a
vector v with the new matrix by using M * F * v,
the frustum transformation will be applied first!
Reference: http://www.songho.ca
left - the distance along the x-axis to the left frustum edgeright - the distance along the x-axis to the right frustum edgebottom - the distance along the y-axis to the bottom frustum edgetop - the distance along the y-axis to the top frustum edgezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultMatrix4f frustumLH(float left, float right, float bottom, float top, float zNear, float zFar, boolean zZeroToOne, Matrix4f dest)
dest.
If M is this matrix and F the frustum matrix,
then the new matrix will be M * F. So when transforming a
vector v with the new matrix by using M * F * v,
the frustum transformation will be applied first!
Reference: http://www.songho.ca
left - the distance along the x-axis to the left frustum edgeright - the distance along the x-axis to the right frustum edgebottom - the distance along the y-axis to the bottom frustum edgetop - the distance along the y-axis to the top frustum edgezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.zZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4f frustumLH(float left, float right, float bottom, float top, float zNear, float zFar, Matrix4f dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and F the frustum matrix,
then the new matrix will be M * F. So when transforming a
vector v with the new matrix by using M * F * v,
the frustum transformation will be applied first!
Reference: http://www.songho.ca
left - the distance along the x-axis to the left frustum edgeright - the distance along the x-axis to the right frustum edgebottom - the distance along the y-axis to the bottom frustum edgetop - the distance along the y-axis to the top frustum edgezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.dest - will hold the resultMatrix4f rotate(Quaternionfc quat, Matrix4f dest)
Quaternionfc to this matrix and store
the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4f rotateAffine(Quaternionfc quat, Matrix4f dest)
Quaternionfc to this affine matrix and store
the result in dest.
This method assumes this to be affine.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4f rotateTranslation(Quaternionfc quat, Matrix4f dest)
Quaternionfc to this matrix, which is assumed to only contain a translation, and store
the result in dest.
This method assumes this to only contain a translation.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4f rotateAroundAffine(Quaternionfc quat, float ox, float oy, float oz, Matrix4f dest)
Quaternionfc to this affine
matrix while using (ox, oy, oz) as the rotation origin, and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
This method is only applicable if this is an affine matrix.
This method is equivalent to calling: translate(ox, oy, oz, dest).rotate(quat).translate(-ox, -oy, -oz)
Reference: http://en.wikipedia.org
quat - the Quaternionfcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation origindest - will hold the resultMatrix4f rotateAround(Quaternionfc quat, float ox, float oy, float oz, Matrix4f dest)
Quaternionfc to this matrix while using (ox, oy, oz) as the rotation origin,
and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
This method is equivalent to calling: translate(ox, oy, oz, dest).rotate(quat).translate(-ox, -oy, -oz)
Reference: http://en.wikipedia.org
quat - the Quaternionfcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation origindest - will hold the resultMatrix4f rotateLocal(Quaternionfc quat, Matrix4f dest)
Quaternionfc to this matrix and store
the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be Q * M. So when transforming a
vector v with the new matrix by using Q * M * v,
the quaternion rotation will be applied last!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4f rotateAroundLocal(Quaternionfc quat, float ox, float oy, float oz, Matrix4f dest)
Quaternionfc to this matrix while using (ox, oy, oz)
as the rotation origin, and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be Q * M. So when transforming a
vector v with the new matrix by using Q * M * v,
the quaternion rotation will be applied last!
This method is equivalent to calling: translateLocal(-ox, -oy, -oz, dest).rotateLocal(quat).translateLocal(ox, oy, oz)
Reference: http://en.wikipedia.org
quat - the Quaternionfcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation origindest - will hold the resultMatrix4f rotate(AxisAngle4f axisAngle, Matrix4f dest)
AxisAngle4f and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and A the rotation matrix obtained from the given AxisAngle4f,
then the new matrix will be M * A. So when transforming a
vector v with the new matrix by using M * A * v,
the AxisAngle4f rotation will be applied first!
Reference: http://en.wikipedia.org
axisAngle - the AxisAngle4f (needs to be normalized)dest - will hold the resultrotate(float, float, float, float, Matrix4f)Matrix4f rotate(float angle, Vector3fc axis, Matrix4f dest)
dest.
The axis described by the axis vector needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and A the rotation matrix obtained from the given axis-angle,
then the new matrix will be M * A. So when transforming a
vector v with the new matrix by using M * A * v,
the axis-angle rotation will be applied first!
Reference: http://en.wikipedia.org
angle - the angle in radiansaxis - the rotation axis (needs to be normalized)dest - will hold the resultrotate(float, float, float, float, Matrix4f)Vector4f unproject(float winX, float winY, float winZ, int[] viewport, Vector4f dest)
(winX, winY, winZ) by this matrix using the specified viewport.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
The depth range of winZ is assumed to be [0..1], which is also the OpenGL default.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using invert(Matrix4f) and then the method unprojectInv() can be invoked on it.
winX - the x-coordinate in window coordinates (pixels)winY - the y-coordinate in window coordinates (pixels)winZ - the z-coordinate, which is the depth value in [0..1]viewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunprojectInv(float, float, float, int[], Vector4f),
invert(Matrix4f)Vector3f unproject(float winX, float winY, float winZ, int[] viewport, Vector3f dest)
(winX, winY, winZ) by this matrix using the specified viewport.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
The depth range of winZ is assumed to be [0..1], which is also the OpenGL default.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using invert(Matrix4f) and then the method unprojectInv() can be invoked on it.
winX - the x-coordinate in window coordinates (pixels)winY - the y-coordinate in window coordinates (pixels)winZ - the z-coordinate, which is the depth value in [0..1]viewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunprojectInv(float, float, float, int[], Vector3f),
invert(Matrix4f)Vector4f unproject(Vector3fc winCoords, int[] viewport, Vector4f dest)
winCoords by this matrix using the specified viewport.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
The depth range of winCoords.z is assumed to be [0..1], which is also the OpenGL default.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using invert(Matrix4f) and then the method unprojectInv() can be invoked on it.
winCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunprojectInv(float, float, float, int[], Vector4f),
unproject(float, float, float, int[], Vector4f),
invert(Matrix4f)Vector3f unproject(Vector3fc winCoords, int[] viewport, Vector3f dest)
winCoords by this matrix using the specified viewport.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
The depth range of winCoords.z is assumed to be [0..1], which is also the OpenGL default.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using invert(Matrix4f) and then the method unprojectInv() can be invoked on it.
winCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunprojectInv(float, float, float, int[], Vector3f),
unproject(float, float, float, int[], Vector3f),
invert(Matrix4f)Matrix4f unprojectRay(float winX, float winY, int[] viewport, Vector3f originDest, Vector3f dirDest)
(winX, winY) by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using invert(Matrix4f) and then the method unprojectInvRay() can be invoked on it.
winX - the x-coordinate in window coordinates (pixels)winY - the y-coordinate in window coordinates (pixels)viewport - the viewport described by [x, y, width, height]originDest - will hold the ray origindirDest - will hold the (unnormalized) ray directionunprojectInvRay(float, float, int[], Vector3f, Vector3f),
invert(Matrix4f)Matrix4f unprojectRay(Vector2fc winCoords, int[] viewport, Vector3f originDest, Vector3f dirDest)
winCoords by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using invert(Matrix4f) and then the method unprojectInvRay() can be invoked on it.
winCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]originDest - will hold the ray origindirDest - will hold the (unnormalized) ray directionunprojectInvRay(float, float, int[], Vector3f, Vector3f),
unprojectRay(float, float, int[], Vector3f, Vector3f),
invert(Matrix4f)Vector4f unprojectInv(Vector3fc winCoords, int[] viewport, Vector4f dest)
winCoords by this matrix using the specified viewport.
This method differs from unproject()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
The depth range of winCoords.z is assumed to be [0..1], which is also the OpenGL default.
This method reads the four viewport parameters from the given int[].
winCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunproject(Vector3fc, int[], Vector4f)Vector4f unprojectInv(float winX, float winY, float winZ, int[] viewport, Vector4f dest)
(winX, winY, winZ) by this matrix using the specified viewport.
This method differs from unproject()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
The depth range of winZ is assumed to be [0..1], which is also the OpenGL default.
winX - the x-coordinate in window coordinates (pixels)winY - the y-coordinate in window coordinates (pixels)winZ - the z-coordinate, which is the depth value in [0..1]viewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunproject(float, float, float, int[], Vector4f)Matrix4f unprojectInvRay(Vector2fc winCoords, int[] viewport, Vector3f originDest, Vector3f dirDest)
winCoords by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0.
This method differs from unprojectRay()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
winCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]originDest - will hold the ray origindirDest - will hold the (unnormalized) ray directionunprojectRay(Vector2fc, int[], Vector3f, Vector3f)Matrix4f unprojectInvRay(float winX, float winY, int[] viewport, Vector3f originDest, Vector3f dirDest)
(winX, winY) by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0.
This method differs from unprojectRay()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
winX - the x-coordinate in window coordinates (pixels)winY - the y-coordinate in window coordinates (pixels)viewport - the viewport described by [x, y, width, height]originDest - will hold the ray origindirDest - will hold the (unnormalized) ray directionunprojectRay(float, float, int[], Vector3f, Vector3f)Vector3f unprojectInv(Vector3fc winCoords, int[] viewport, Vector3f dest)
winCoords by this matrix using the specified viewport.
This method differs from unproject()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
The depth range of winCoords.z is assumed to be [0..1], which is also the OpenGL default.
winCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunproject(Vector3fc, int[], Vector3f)Vector3f unprojectInv(float winX, float winY, float winZ, int[] viewport, Vector3f dest)
(winX, winY, winZ) by this matrix using the specified viewport.
This method differs from unproject()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
The depth range of winZ is assumed to be [0..1], which is also the OpenGL default.
winX - the x-coordinate in window coordinates (pixels)winY - the y-coordinate in window coordinates (pixels)winZ - the z-coordinate, which is the depth value in [0..1]viewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionunproject(float, float, float, int[], Vector3f)Vector4f project(float x, float y, float z, int[] viewport, Vector4f winCoordsDest)
(x, y, z) position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest.
This method transforms the given coordinates by this matrix including perspective division to
obtain normalized device coordinates, and then translates these into window coordinates by using the
given viewport settings [x, y, width, height].
The depth range of the returned winCoordsDest.z will be [0..1], which is also the OpenGL default.
x - the x-coordinate of the position to projecty - the y-coordinate of the position to projectz - the z-coordinate of the position to projectviewport - the viewport described by [x, y, width, height]winCoordsDest - will hold the projected window coordinatesVector3f project(float x, float y, float z, int[] viewport, Vector3f winCoordsDest)
(x, y, z) position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest.
This method transforms the given coordinates by this matrix including perspective division to
obtain normalized device coordinates, and then translates these into window coordinates by using the
given viewport settings [x, y, width, height].
The depth range of the returned winCoordsDest.z will be [0..1], which is also the OpenGL default.
x - the x-coordinate of the position to projecty - the y-coordinate of the position to projectz - the z-coordinate of the position to projectviewport - the viewport described by [x, y, width, height]winCoordsDest - will hold the projected window coordinatesVector4f project(Vector3fc position, int[] viewport, Vector4f winCoordsDest)
position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest.
This method transforms the given coordinates by this matrix including perspective division to
obtain normalized device coordinates, and then translates these into window coordinates by using the
given viewport settings [x, y, width, height].
The depth range of the returned winCoordsDest.z will be [0..1], which is also the OpenGL default.
position - the position to project into window coordinatesviewport - the viewport described by [x, y, width, height]winCoordsDest - will hold the projected window coordinatesproject(float, float, float, int[], Vector4f)Vector3f project(Vector3fc position, int[] viewport, Vector3f winCoordsDest)
position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest.
This method transforms the given coordinates by this matrix including perspective division to
obtain normalized device coordinates, and then translates these into window coordinates by using the
given viewport settings [x, y, width, height].
The depth range of the returned winCoordsDest.z will be [0..1], which is also the OpenGL default.
position - the position to project into window coordinatesviewport - the viewport described by [x, y, width, height]winCoordsDest - will hold the projected window coordinatesproject(float, float, float, int[], Vector4f)Matrix4f reflect(float a, float b, float c, float d, Matrix4f dest)
x*a + y*b + z*c + d = 0 and store the result in dest.
The vector (a, b, c) must be a unit vector.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
Reference: msdn.microsoft.com
a - the x factor in the plane equationb - the y factor in the plane equationc - the z factor in the plane equationd - the constant in the plane equationdest - will hold the resultMatrix4f reflect(float nx, float ny, float nz, float px, float py, float pz, Matrix4f dest)
dest.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
nx - the x-coordinate of the plane normalny - the y-coordinate of the plane normalnz - the z-coordinate of the plane normalpx - the x-coordinate of a point on the planepy - the y-coordinate of a point on the planepz - the z-coordinate of a point on the planedest - will hold the resultMatrix4f reflect(Quaternionfc orientation, Vector3fc point, Matrix4f dest)
dest.
This method can be used to build a reflection transformation based on the orientation of a mirror object in the scene.
It is assumed that the default mirror plane's normal is (0, 0, 1). So, if the given Quaternionfc is
the identity (does not apply any additional rotation), the reflection plane will be z=0, offset by the given point.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
orientation - the plane orientation relative to an implied normal vector of (0, 0, 1)point - a point on the planedest - will hold the resultMatrix4f reflect(Vector3fc normal, Vector3fc point, Matrix4f dest)
dest.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
normal - the plane normalpoint - a point on the planedest - will hold the resultVector4f getRow(int row, Vector4f dest) throws IndexOutOfBoundsException
row index, starting with 0.row - the row index in [0..3]dest - will hold the row componentsIndexOutOfBoundsException - if row is not in [0..3]Vector3f getRow(int row, Vector3f dest) throws IndexOutOfBoundsException
row index, starting with 0.row - the row index in [0..3]dest - will hold the first three row componentsIndexOutOfBoundsException - if row is not in [0..3]Vector4f getColumn(int column, Vector4f dest) throws IndexOutOfBoundsException
column index, starting with 0.column - the column index in [0..3]dest - will hold the column componentsIndexOutOfBoundsException - if column is not in [0..3]Vector3f getColumn(int column, Vector3f dest) throws IndexOutOfBoundsException
column index, starting with 0.column - the column index in [0..3]dest - will hold the first three column componentsIndexOutOfBoundsException - if column is not in [0..3]Matrix4f normal(Matrix4f dest)
this
and store it into the upper left 3x3 submatrix of dest.
All other values of dest will be set to identity.
The normal matrix of m is the transpose of the inverse of m.
dest - will hold the resultMatrix3f normal(Matrix3f dest)
this
and store it into dest.
The normal matrix of m is the transpose of the inverse of m.
dest - will hold the resultMatrix3f.set(Matrix4fc),
get3x3(Matrix3f)Matrix4f normalize3x3(Matrix4f dest)
dest.
The resulting matrix will map unit vectors to unit vectors, though a pair of orthogonal input unit vectors need not be mapped to a pair of orthogonal output vectors if the original matrix was not orthogonal itself (i.e. had skewing).
dest - will hold the resultMatrix3f normalize3x3(Matrix3f dest)
dest.
The resulting matrix will map unit vectors to unit vectors, though a pair of orthogonal input unit vectors need not be mapped to a pair of orthogonal output vectors if the original matrix was not orthogonal itself (i.e. had skewing).
dest - will hold the resultVector4f frustumPlane(int plane, Vector4f planeEquation)
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given planeEquation.
Generally, this method computes the frustum plane in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
The frustum plane will be given in the form of a general plane equation:
a*x + b*y + c*z + d = 0, where the given Vector4f components will
hold the (a, b, c, d) values of the equation.
The plane normal, which is (a, b, c), is directed "inwards" of the frustum.
Any plane/point test using a*x + b*y + c*z + d therefore will yield a result greater than zero
if the point is within the frustum (i.e. at the positive side of the frustum plane).
For performing frustum culling, the class FrustumIntersection should be used instead of
manually obtaining the frustum planes and testing them against points, spheres or axis-aligned boxes.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
plane - one of the six possible planes, given as numeric constants
PLANE_NX, PLANE_PX,
PLANE_NY, PLANE_PY,
PLANE_NZ and PLANE_PZplaneEquation - will hold the computed plane equation.
The plane equation will be normalized, meaning that (a, b, c) will be a unit vectorPlanef frustumPlane(int which, Planef plane)
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given plane.
Generally, this method computes the frustum plane in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
The plane normal, which is (a, b, c), is directed "inwards" of the frustum.
Any plane/point test using a*x + b*y + c*z + d therefore will yield a result greater than zero
if the point is within the frustum (i.e. at the positive side of the frustum plane).
For performing frustum culling, the class FrustumIntersection should be used instead of
manually obtaining the frustum planes and testing them against points, spheres or axis-aligned boxes.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
Vector3f frustumCorner(int corner, Vector3f point)
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given point.
Generally, this method computes the frustum corners in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
Reference: http://geomalgorithms.com
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
corner - one of the eight possible corners, given as numeric constants
CORNER_NXNYNZ, CORNER_PXNYNZ, CORNER_PXPYNZ, CORNER_NXPYNZ,
CORNER_PXNYPZ, CORNER_NXNYPZ, CORNER_NXPYPZ, CORNER_PXPYPZpoint - will hold the resulting corner point coordinatesVector3f perspectiveOrigin(Vector3f origin)
this matrix,
which can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given origin.
Note that this method will only work using perspective projections obtained via one of the
perspective methods, such as perspective()
or frustum().
Generally, this method computes the origin in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
Reference: http://geomalgorithms.com
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
origin - will hold the origin of the coordinate system before applying this
perspective projection transformationfloat perspectiveFov()
Note that this method will only work using perspective projections obtained via one of the
perspective methods, such as perspective()
or frustum().
For orthogonal transformations this method will return 0.0.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
float perspectiveNear()
this perspective projection matrix.
This method only works if this is a perspective projection matrix, for example obtained via perspective(float, float, float, float, Matrix4f).
float perspectiveFar()
this perspective projection matrix.
This method only works if this is a perspective projection matrix, for example obtained via perspective(float, float, float, float, Matrix4f).
Vector3f frustumRayDir(float x, float y, Vector3f dir)
This method computes the dir vector in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
The parameters x and y are used to interpolate the generated ray direction
from the bottom-left to the top-right frustum corners.
For optimal efficiency when building many ray directions over the whole frustum,
it is recommended to use this method only in order to compute the four corner rays at
(0, 0), (1, 0), (0, 1) and (1, 1)
and then bilinearly interpolating between them; or to use the FrustumRayBuilder.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
x - the interpolation factor along the left-to-right frustum planes, within [0..1]y - the interpolation factor along the bottom-to-top frustum planes, within [0..1]dir - will hold the normalized ray direction in the local frame of the coordinate system before
transforming to homogeneous clipping space using this matrixVector3f positiveZ(Vector3f dir)
+Z before the transformation represented by this matrix is applied.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Z by this matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).invert(); inv.transformDirection(dir.set(0, 0, 1)).normalize();If
this is already an orthogonal matrix, then consider using normalizedPositiveZ(Vector3f) instead.
Reference: http://www.euclideanspace.com
dir - will hold the direction of +ZVector3f normalizedPositiveZ(Vector3f dir)
+Z before the transformation represented by this orthogonal matrix is applied.
This method only produces correct results if this is an orthogonal matrix.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Z by this matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).transpose(); inv.transformDirection(dir.set(0, 0, 1));
Reference: http://www.euclideanspace.com
dir - will hold the direction of +ZVector3f positiveX(Vector3f dir)
+X before the transformation represented by this matrix is applied.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +X by this matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).invert(); inv.transformDirection(dir.set(1, 0, 0)).normalize();If
this is already an orthogonal matrix, then consider using normalizedPositiveX(Vector3f) instead.
Reference: http://www.euclideanspace.com
dir - will hold the direction of +XVector3f normalizedPositiveX(Vector3f dir)
+X before the transformation represented by this orthogonal matrix is applied.
This method only produces correct results if this is an orthogonal matrix.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +X by this matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).transpose(); inv.transformDirection(dir.set(1, 0, 0));
Reference: http://www.euclideanspace.com
dir - will hold the direction of +XVector3f positiveY(Vector3f dir)
+Y before the transformation represented by this matrix is applied.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Y by this matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).invert(); inv.transformDirection(dir.set(0, 1, 0)).normalize();If
this is already an orthogonal matrix, then consider using normalizedPositiveY(Vector3f) instead.
Reference: http://www.euclideanspace.com
dir - will hold the direction of +YVector3f normalizedPositiveY(Vector3f dir)
+Y before the transformation represented by this orthogonal matrix is applied.
This method only produces correct results if this is an orthogonal matrix.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Y by this matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).transpose(); inv.transformDirection(dir.set(0, 1, 0));
Reference: http://www.euclideanspace.com
dir - will hold the direction of +YVector3f originAffine(Vector3f origin)
this affine matrix.
This can be used to get the position of the "camera" from a given view transformation matrix.
This method only works with affine matrices.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).invertAffine(); inv.transformPosition(origin.set(0, 0, 0));
origin - will hold the position transformed to the originVector3f origin(Vector3f origin)
this matrix.
This can be used to get the position of the "camera" from a given view/projection transformation matrix.
This method is equivalent to the following code:
Matrix4f inv = new Matrix4f(this).invert(); inv.transformPosition(origin.set(0, 0, 0));
origin - will hold the position transformed to the originMatrix4f shadow(Vector4f light, float a, float b, float c, float d, Matrix4f dest)
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction light
and store the result in dest.
If light.w is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
Reference: ftp.sgi.com
light - the light's vectora - the x factor in the plane equationb - the y factor in the plane equationc - the z factor in the plane equationd - the constant in the plane equationdest - will hold the resultMatrix4f shadow(float lightX, float lightY, float lightZ, float lightW, float a, float b, float c, float d, Matrix4f dest)
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest.
If lightW is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
Reference: ftp.sgi.com
lightX - the x-component of the light's vectorlightY - the y-component of the light's vectorlightZ - the z-component of the light's vectorlightW - the w-component of the light's vectora - the x factor in the plane equationb - the y factor in the plane equationc - the z factor in the plane equationd - the constant in the plane equationdest - will hold the resultMatrix4f shadow(Vector4f light, Matrix4fc planeTransform, Matrix4f dest)
y = 0 as if casting a shadow from a given light position/direction light
and store the result in dest.
Before the shadow projection is applied, the plane is transformed via the specified planeTransformation.
If light.w is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
light - the light's vectorplaneTransform - the transformation to transform the implied plane y = 0 before applying the projectiondest - will hold the resultMatrix4f shadow(float lightX, float lightY, float lightZ, float lightW, Matrix4fc planeTransform, Matrix4f dest)
y = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest.
Before the shadow projection is applied, the plane is transformed via the specified planeTransformation.
If lightW is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
lightX - the x-component of the light vectorlightY - the y-component of the light vectorlightZ - the z-component of the light vectorlightW - the w-component of the light vectorplaneTransform - the transformation to transform the implied plane y = 0 before applying the projectiondest - will hold the resultMatrix4f pick(float x, float y, float width, float height, int[] viewport, Matrix4f dest)
(x, y) as the pick center
and the given (width, height) as the size of the picking region in window coordinates, and store the result
in dest.x - the x coordinate of the picking region center in window coordinatesy - the y coordinate of the picking region center in window coordinateswidth - the width of the picking region in window coordinatesheight - the height of the picking region in window coordinatesviewport - the viewport described by [x, y, width, height]dest - the destination matrix, which will hold the resultboolean isAffine()
(0, 0, 0, 1).true iff this matrix is affine; false otherwiseMatrix4f arcball(float radius, float centerX, float centerY, float centerZ, float angleX, float angleY, Matrix4f dest)
radius and center (centerX, centerY, centerZ)
position of the arcball and the specified X and Y rotation angles, and store the result in dest.
This method is equivalent to calling: translate(0, 0, -radius).rotateX(angleX).rotateY(angleY).translate(-centerX, -centerY, -centerZ)
radius - the arcball radiuscenterX - the x coordinate of the center position of the arcballcenterY - the y coordinate of the center position of the arcballcenterZ - the z coordinate of the center position of the arcballangleX - the rotation angle around the X axis in radiansangleY - the rotation angle around the Y axis in radiansdest - will hold the resultMatrix4f arcball(float radius, Vector3fc center, float angleX, float angleY, Matrix4f dest)
radius and center
position of the arcball and the specified X and Y rotation angles, and store the result in dest.
This method is equivalent to calling: translate(0, 0, -radius).rotateX(angleX).rotateY(angleY).translate(-center.x, -center.y, -center.z)
radius - the arcball radiuscenter - the center position of the arcballangleX - the rotation angle around the X axis in radiansangleY - the rotation angle around the Y axis in radiansdest - will hold the resultMatrix4f frustumAabb(Vector3f min, Vector3f max)
this matrix and store the minimum corner
coordinates in the given min and the maximum corner coordinates in the given max vector.
The matrix this is assumed to be the inverse of the origial view-projection matrix
for which to compute the axis-aligned bounding box in world-space.
The axis-aligned bounding box of the unit frustum is (-1, -1, -1), (1, 1, 1).
min - will hold the minimum corner coordinates of the axis-aligned bounding boxmax - will hold the maximum corner coordinates of the axis-aligned bounding boxMatrix4f projectedGridRange(Matrix4fc projector, float sLower, float sUpper, Matrix4f dest)
this, and store that range matrix into dest.
If the projected grid will not be visible then this method returns null.
This method uses the y = 0 plane for the projection.
projector - the projector view-projection transformationsLower - the lower (smallest) Y-coordinate which any transformed vertex might have while still being visible on the projected gridsUpper - the upper (highest) Y-coordinate which any transformed vertex might have while still being visible on the projected griddest - will hold the resulting range matrixnull if the projected grid will not be visibleMatrix4f perspectiveFrustumSlice(float near, float far, Matrix4f dest)
this perspective frustum transformation matrix
and store the result in dest.
This method only works if this is a perspective projection frustum transformation, for example obtained
via perspective() or frustum().
near - the new near clip plane distancefar - the new far clip plane distancedest - will hold the resulting matrixperspective(float, float, float, float, Matrix4f),
frustum(float, float, float, float, float, float, Matrix4f)Matrix4f orthoCrop(Matrix4fc view, Matrix4f dest)
this
into the given affine view transformation.
The transformation represented by this must be given as the inverse of a typical combined camera view-projection
transformation, whose projection can be either orthographic or perspective.
The view must be an affine transformation which in the application of Cascaded Shadow Maps is usually the light view transformation.
It be obtained via any affine transformation or for example via lookAt().
Reference: OpenGL SDK - Cascaded Shadow Maps
view - the view transformation to build a corresponding orthographic projection to fit the frustum of thisdest - will hold the crop projection transformationMatrix4f transformAab(float minX, float minY, float minZ, float maxX, float maxY, float maxZ, Vector3f outMin, Vector3f outMax)
(minX, minY, minZ) and maximum corner (maxX, maxY, maxZ)
by this affine matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax.
Reference: http://dev.theomader.com
minX - the x coordinate of the minimum corner of the axis-aligned boxminY - the y coordinate of the minimum corner of the axis-aligned boxminZ - the z coordinate of the minimum corner of the axis-aligned boxmaxX - the x coordinate of the maximum corner of the axis-aligned boxmaxY - the y coordinate of the maximum corner of the axis-aligned boxmaxZ - the y coordinate of the maximum corner of the axis-aligned boxoutMin - will hold the minimum corner of the resulting axis-aligned boxoutMax - will hold the maximum corner of the resulting axis-aligned boxMatrix4f transformAab(Vector3fc min, Vector3fc max, Vector3f outMin, Vector3f outMax)
min and maximum corner max
by this affine matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax.min - the minimum corner of the axis-aligned boxmax - the maximum corner of the axis-aligned boxoutMin - will hold the minimum corner of the resulting axis-aligned boxoutMax - will hold the maximum corner of the resulting axis-aligned boxMatrix4f lerp(Matrix4fc other, float t, Matrix4f dest)
this and other using the given interpolation factor t
and store the result in dest.
If t is 0.0 then the result is this. If the interpolation factor is 1.0
then the result is other.
other - the other matrixt - the interpolation factor between 0.0 and 1.0dest - will hold the resultMatrix4f rotateTowards(Vector3fc dir, Vector3fc up, Matrix4f dest)
+Z axis with dir
and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
This method is equivalent to calling: mulAffine(new Matrix4f().lookAt(new Vector3f(), new Vector3f(dir).negate(), up).invertAffine(), dest)
dir - the direction to rotate towardsup - the up vectordest - will hold the resultrotateTowards(float, float, float, float, float, float, Matrix4f)Matrix4f rotateTowards(float dirX, float dirY, float dirZ, float upX, float upY, float upZ, Matrix4f dest)
+Z axis with (dirX, dirY, dirZ)
and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
This method is equivalent to calling: mulAffine(new Matrix4f().lookAt(0, 0, 0, -dirX, -dirY, -dirZ, upX, upY, upZ).invertAffine(), dest)
dirX - the x-coordinate of the direction to rotate towardsdirY - the y-coordinate of the direction to rotate towardsdirZ - the z-coordinate of the direction to rotate towardsupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultrotateTowards(Vector3fc, Vector3fc, Matrix4f)Vector3f getEulerAnglesZYX(Vector3f dest)
this
and store the extracted Euler angles in dest.
This method assumes that the upper left of this only represents a rotation without scaling.
Note that the returned Euler angles must be applied in the order Z * Y * X to obtain the identical matrix.
This means that calling rotateZYX(float, float, float, Matrix4f) using the obtained Euler angles will yield
the same rotation as the original matrix from which the Euler angles were obtained, so in the below code the matrix
m2 should be identical to m (disregarding possible floating-point inaccuracies).
Matrix4f m = ...; // <- matrix only representing rotation Matrix4f n = new Matrix4f(); n.rotateZYX(m.getEulerAnglesZYX(new Vector3f()));
Reference: http://nghiaho.com/
dest - will hold the extracted Euler anglesboolean testPoint(float x,
float y,
float z)
(x, y, z) is within the frustum defined by this matrix.
This method assumes this matrix to be a transformation from any arbitrary coordinate system/space M
into standard OpenGL clip space and tests whether the given point with the coordinates (x, y, z) given
in space M is within the clip space.
When testing multiple points using the same transformation matrix, FrustumIntersection should be used instead.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
x - the x-coordinate of the pointy - the y-coordinate of the pointz - the z-coordinate of the pointtrue if the given point is inside the frustum; false otherwiseboolean testSphere(float x,
float y,
float z,
float r)
this matrix.
This method assumes this matrix to be a transformation from any arbitrary coordinate system/space M
into standard OpenGL clip space and tests whether the given sphere with the coordinates (x, y, z) given
in space M is within the clip space.
When testing multiple spheres using the same transformation matrix, or more sophisticated/optimized intersection algorithms are required,
FrustumIntersection should be used instead.
The algorithm implemented by this method is conservative. This means that in certain circumstances a false positive
can occur, when the method returns true for spheres that are actually not visible.
See iquilezles.org for an examination of this problem.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
x - the x-coordinate of the sphere's centery - the y-coordinate of the sphere's centerz - the z-coordinate of the sphere's centerr - the sphere's radiustrue if the given sphere is partly or completely inside the frustum; false otherwiseboolean testAab(float minX,
float minY,
float minZ,
float maxX,
float maxY,
float maxZ)
this matrix.
The box is specified via its min and max corner coordinates.
This method assumes this matrix to be a transformation from any arbitrary coordinate system/space M
into standard OpenGL clip space and tests whether the given axis-aligned box with its minimum corner coordinates (minX, minY, minZ)
and maximum corner coordinates (maxX, maxY, maxZ) given in space M is within the clip space.
When testing multiple axis-aligned boxes using the same transformation matrix, or more sophisticated/optimized intersection algorithms are required,
FrustumIntersection should be used instead.
The algorithm implemented by this method is conservative. This means that in certain circumstances a false positive
can occur, when the method returns -1 for boxes that are actually not visible/do not intersect the frustum.
See iquilezles.org for an examination of this problem.
Reference: Efficient View Frustum Culling
Reference:
Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
minX - the x-coordinate of the minimum cornerminY - the y-coordinate of the minimum cornerminZ - the z-coordinate of the minimum cornermaxX - the x-coordinate of the maximum cornermaxY - the y-coordinate of the maximum cornermaxZ - the z-coordinate of the maximum cornertrue if the axis-aligned box is completely or partly inside of the frustum; false otherwiseMatrix4f obliqueZ(float a, float b, Matrix4f dest)
a and
b and store the result in dest.
If M is this matrix and O the oblique transformation matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
oblique transformation will be applied first!
The oblique transformation is defined as:
x' = x + a*z y' = y + a*z z' = zor in matrix form:
1 0 a 0 0 1 b 0 0 0 1 0 0 0 0 1
a - the value for the z factor that applies to xb - the value for the z factor that applies to ydest - will hold the resultMatrix4f withLookAtUp(Vector3fc up, Matrix4f dest)
positiveY(Vector3f))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3f)) and the
given vector up, and store the result in dest.
This effectively ensure that the resulting matrix will be equal to the one obtained from calling
Matrix4f.setLookAt(Vector3fc, Vector3fc, Vector3fc) with the current
local origin of this matrix (as obtained by originAffine(Vector3f)), the sum of this position and the
negated local Z axis as well as the given vector up.
This method must only be called on isAffine() matrices.up - the up vectordest - will hold the resultMatrix4f withLookAtUp(float upX, float upY, float upZ, Matrix4f dest)
positiveY(Vector3f))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3f)) and the
given vector (upX, upY, upZ), and store the result in dest.
This effectively ensure that the resulting matrix will be equal to the one obtained from calling
Matrix4f.setLookAt(float, float, float, float, float, float, float, float, float) called with the current
local origin of this matrix (as obtained by originAffine(Vector3f)), the sum of this position and the
negated local Z axis as well as the given vector (upX, upY, upZ).
This method must only be called on isAffine() matrices.upX - the x coordinate of the up vectorupY - the y coordinate of the up vectorupZ - the z coordinate of the up vectordest - will hold the resultboolean equals(Matrix4fc m, float delta)
this matrix with the given matrix using the given delta
and return whether all of them are equal within a maximum difference of delta.
Please note that this method is not used by any data structure such as ArrayList HashSet or HashMap
and their operations, such as ArrayList.contains(Object) or HashSet.remove(Object), since those
data structures only use the Object.equals(Object) and Object.hashCode() methods.
m - the other matrixdelta - the allowed maximum differencetrue whether all of the matrix elements are equal; false otherwiseCopyright © 2015–2019 JOML. All rights reserved.