public interface Matrix4dc
Modifier and Type | Field and Description |
---|---|
static int |
CORNER_NXNYNZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (-1, -1, -1) when using the identity matrix. |
static int |
CORNER_NXNYPZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (-1, -1, 1) when using the identity matrix. |
static int |
CORNER_NXPYNZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (-1, 1, -1) when using the identity matrix. |
static int |
CORNER_NXPYPZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (-1, 1, 1) when using the identity matrix. |
static int |
CORNER_PXNYNZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (1, -1, -1) when using the identity matrix. |
static int |
CORNER_PXNYPZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (1, -1, 1) when using the identity matrix. |
static int |
CORNER_PXPYNZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (1, 1, -1) when using the identity matrix. |
static int |
CORNER_PXPYPZ
Argument to the first parameter of
frustumCorner(int, Vector3d)
identifying the corner (1, 1, 1) when using the identity matrix. |
static int |
PLANE_NX
Argument to the first parameter of
frustumPlane(int, Vector4d)
identifying the plane with equation x=-1 when using the identity matrix. |
static int |
PLANE_NY
Argument to the first parameter of
frustumPlane(int, Vector4d)
identifying the plane with equation y=-1 when using the identity matrix. |
static int |
PLANE_NZ
Argument to the first parameter of
frustumPlane(int, Vector4d)
identifying the plane with equation z=-1 when using the identity matrix. |
static int |
PLANE_PX
Argument to the first parameter of
frustumPlane(int, Vector4d)
identifying the plane with equation x=1 when using the identity matrix. |
static int |
PLANE_PY
Argument to the first parameter of
frustumPlane(int, Vector4d)
identifying the plane with equation y=1 when using the identity matrix. |
static int |
PLANE_PZ
Argument to the first parameter of
frustumPlane(int, Vector4d)
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_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 |
---|---|
Matrix4d |
add(Matrix4dc other,
Matrix4d dest)
Component-wise add
this and other and store the result in dest . |
Matrix4d |
add4x3(Matrix4dc other,
Matrix4d dest)
Component-wise add the upper 4x3 submatrices of
this and other
and store the result in dest . |
Matrix4d |
add4x3(Matrix4fc other,
Matrix4d dest)
Component-wise add the upper 4x3 submatrices of
this and other
and store the result in dest . |
Matrix4d |
arcball(double radius,
double centerX,
double centerY,
double centerZ,
double angleX,
double angleY,
Matrix4d 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 . |
Matrix4d |
arcball(double radius,
Vector3dc center,
double angleX,
double angleY,
Matrix4d 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 . |
double |
determinant()
Return the determinant of this matrix.
|
double |
determinant3x3()
Return the determinant of the upper left 3x3 submatrix of this matrix.
|
double |
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). |
Matrix4d |
fma4x3(Matrix4dc other,
double otherFactor,
Matrix4d 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 . |
Matrix4d |
frustum(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
frustum(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
Matrix4d 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 . |
Vector3d |
frustumCorner(int corner,
Vector3d 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 . |
Matrix4d |
frustumLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
frustumLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
Matrix4d 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 . |
Vector4d |
frustumPlane(int plane,
Vector4d 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 . |
Vector3d |
frustumRayDir(double x,
double y,
Vector3d 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 . |
double[] |
get(double[] arr)
Store this matrix into the supplied double array in column-major order.
|
double[] |
get(double[] arr,
int offset)
Store this matrix into the supplied double array in column-major order at the given offset.
|
DoubleBuffer |
get(DoubleBuffer buffer)
Store this matrix in column-major order into the supplied
DoubleBuffer at the current
buffer position . |
float[] |
get(float[] arr)
Store the elements of this matrix as float values in column-major order into the supplied float array.
|
float[] |
get(float[] arr,
int offset)
Store the elements of this matrix as float values in column-major order into the supplied float array 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. |
DoubleBuffer |
get(int index,
DoubleBuffer buffer)
Store this matrix in column-major order into the supplied
DoubleBuffer 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 . |
Matrix3d |
get3x3(Matrix3d dest)
Get the current values of the upper left 3x3 submatrix of
this matrix and store them into
dest . |
Matrix4x3d |
get4x3(Matrix4x3d 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 . |
DoubleBuffer |
get4x3Transposed(DoubleBuffer buffer)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied DoubleBuffer 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. |
DoubleBuffer |
get4x3Transposed(int index,
DoubleBuffer buffer)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied DoubleBuffer starting at the specified
absolute buffer position/index. |
Vector4d |
getColumn(int column,
Vector4d dest)
Get the column at the given
column index, starting with 0 . |
Vector3d |
getEulerAnglesZYX(Vector3d 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 . |
ByteBuffer |
getFloats(ByteBuffer buffer)
Store the elements of this matrix as float values in column-major order into the supplied
ByteBuffer at the current
buffer position . |
ByteBuffer |
getFloats(int index,
ByteBuffer buffer)
Store the elements of this matrix as float values in column-major order into the supplied
ByteBuffer
starting at the specified absolute buffer position/index. |
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 . |
Vector4d |
getRow(int row,
Vector4d dest)
Get the row at the given
row index, starting with 0 . |
Vector3d |
getScale(Vector3d dest)
Get the scaling factors of
this matrix for the three base axes. |
Vector3d |
getTranslation(Vector3d 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 . |
DoubleBuffer |
getTransposed(DoubleBuffer buffer)
Store the transpose of this matrix in column-major order into the supplied
DoubleBuffer 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. |
DoubleBuffer |
getTransposed(int index,
DoubleBuffer buffer)
Store the transpose of this matrix in column-major order into the supplied
DoubleBuffer 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 . |
Matrix4d |
invert(Matrix4d dest)
Invert
this matrix and store the result in dest . |
Matrix4d |
invertAffine(Matrix4d dest)
Invert this matrix by assuming that it is an
affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and write the result into dest . |
Matrix4d |
invertAffineUnitScale(Matrix4d dest)
Invert this matrix by assuming that it is an
affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and has unit scaling (i.e. |
Matrix4d |
invertFrustum(Matrix4d 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 . |
Matrix4d |
invertLookAt(Matrix4d dest)
Invert this matrix by assuming that it is an
affine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and has unit scaling (i.e. |
Matrix4d |
invertOrtho(Matrix4d dest)
Invert
this orthographic projection matrix and store the result into the given dest . |
Matrix4d |
invertPerspective(Matrix4d 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 . |
Matrix4d |
invertPerspectiveView(Matrix4dc view,
Matrix4d 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 . |
boolean |
isAffine()
Determine whether this matrix describes an affine transformation.
|
Matrix4d |
lerp(Matrix4dc other,
double t,
Matrix4d dest)
Linearly interpolate
this and other using the given interpolation factor t
and store the result in dest . |
Matrix4d |
lookAlong(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ,
Matrix4d dest)
Apply a rotation transformation to this matrix to make
-z point along dir
and store the result in dest . |
Matrix4d |
lookAlong(Vector3dc dir,
Vector3dc up,
Matrix4d dest)
Apply a rotation transformation to this matrix to make
-z point along dir
and store the result in dest . |
Matrix4d |
lookAt(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ,
Matrix4d 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 . |
Matrix4d |
lookAt(Vector3dc eye,
Vector3dc center,
Vector3dc up,
Matrix4d 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 . |
Matrix4d |
lookAtLH(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ,
Matrix4d 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 . |
Matrix4d |
lookAtLH(Vector3dc eye,
Vector3dc center,
Vector3dc up,
Matrix4d 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 . |
Matrix4d |
lookAtPerspective(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ,
Matrix4d 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 . |
Matrix4d |
lookAtPerspectiveLH(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ,
Matrix4d 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 . |
double |
m00()
Return the value of the matrix element at column 0 and row 0.
|
double |
m01()
Return the value of the matrix element at column 0 and row 1.
|
double |
m02()
Return the value of the matrix element at column 0 and row 2.
|
double |
m03()
Return the value of the matrix element at column 0 and row 3.
|
double |
m10()
Return the value of the matrix element at column 1 and row 0.
|
double |
m11()
Return the value of the matrix element at column 1 and row 1.
|
double |
m12()
Return the value of the matrix element at column 1 and row 2.
|
double |
m13()
Return the value of the matrix element at column 1 and row 3.
|
double |
m20()
Return the value of the matrix element at column 2 and row 0.
|
double |
m21()
Return the value of the matrix element at column 2 and row 1.
|
double |
m22()
Return the value of the matrix element at column 2 and row 2.
|
double |
m23()
Return the value of the matrix element at column 2 and row 3.
|
double |
m30()
Return the value of the matrix element at column 3 and row 0.
|
double |
m31()
Return the value of the matrix element at column 3 and row 1.
|
double |
m32()
Return the value of the matrix element at column 3 and row 2.
|
double |
m33()
Return the value of the matrix element at column 3 and row 3.
|
Matrix4d |
mul(Matrix4dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest . |
Matrix4d |
mul(Matrix4fc right,
Matrix4d dest)
Multiply this matrix by the supplied parameter matrix and store the result in
dest . |
Matrix4d |
mul(Matrix4x3dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest . |
Matrix4d |
mul(Matrix4x3fc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest . |
Matrix4d |
mul4x3ComponentWise(Matrix4dc other,
Matrix4d dest)
Component-wise multiply the upper 4x3 submatrices of
this by other
and store the result in dest . |
Matrix4d |
mulAffine(Matrix4dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix, both of which are assumed to be affine , and store the result in dest . |
Matrix4d |
mulAffineR(Matrix4dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix, which is assumed to be affine , and store the result in dest . |
Matrix4d |
mulAffineR(Matrix4x3dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest . |
Matrix4d |
mulComponentWise(Matrix4dc other,
Matrix4d dest)
Component-wise multiply
this by other and store the result in dest . |
Matrix4d |
mulOrthoAffine(Matrix4dc view,
Matrix4d dest)
Multiply
this orthographic projection matrix by the supplied affine view matrix
and store the result in dest . |
Matrix4d |
mulPerspectiveAffine(Matrix4dc view,
Matrix4d dest)
Multiply
this symmetric perspective projection matrix by the supplied affine view matrix and store the result in dest . |
Matrix4d |
mulTranslationAffine(Matrix4dc right,
Matrix4d 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 . |
Matrix3d |
normal(Matrix3d dest)
Compute a normal matrix from the upper left 3x3 submatrix of
this
and store it into dest . |
Matrix4d |
normal(Matrix4d dest)
Compute a normal matrix from the upper left 3x3 submatrix of
this
and store it into the upper left 3x3 submatrix of dest . |
Matrix3d |
normalize3x3(Matrix3d dest)
Normalize the upper left 3x3 submatrix of this matrix and store the result in
dest . |
Matrix4d |
normalize3x3(Matrix4d dest)
Normalize the upper left 3x3 submatrix of this matrix and store the result in
dest . |
Vector3d |
normalizedPositiveX(Vector3d dir)
Obtain the direction of +X before the transformation represented by
this orthogonal matrix is applied. |
Vector3d |
normalizedPositiveY(Vector3d dir)
Obtain the direction of +Y before the transformation represented by
this orthogonal matrix is applied. |
Vector3d |
normalizedPositiveZ(Vector3d dir)
Obtain the direction of +Z before the transformation represented by
this orthogonal matrix is applied. |
Vector3d |
origin(Vector3d origin)
Obtain the position that gets transformed to the origin by
this matrix. |
Vector3d |
originAffine(Vector3d origin)
Obtain the position that gets transformed to the origin by
this affine matrix. |
Matrix4d |
ortho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
ortho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
Matrix4d 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 . |
Matrix4d |
ortho2D(double left,
double right,
double bottom,
double top,
Matrix4d dest)
Apply an orthographic projection transformation for a right-handed coordinate system
to this matrix and store the result in
dest . |
Matrix4d |
ortho2DLH(double left,
double right,
double bottom,
double top,
Matrix4d dest)
Apply an orthographic projection transformation for a left-handed coordinate system to this matrix and store the result in
dest . |
Matrix4d |
orthoCrop(Matrix4dc view,
Matrix4d dest)
Build an ortographic projection transformation that fits the view-projection transformation represented by
this
into the given affine view transformation. |
Matrix4d |
orthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
orthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
Matrix4d 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 . |
Matrix4d |
orthoSymmetric(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
orthoSymmetric(double width,
double height,
double zNear,
double zFar,
Matrix4d 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 . |
Matrix4d |
orthoSymmetricLH(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
orthoSymmetricLH(double width,
double height,
double zNear,
double zFar,
Matrix4d 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 . |
Matrix4d |
perspective(double fovy,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
perspective(double fovy,
double aspect,
double zNear,
double zFar,
Matrix4d 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 . |
double |
perspectiveFar()
Extract the far clip plane distance from
this perspective projection matrix. |
double |
perspectiveFov()
Return the vertical field-of-view angle in radians of this perspective transformation matrix.
|
Matrix4d |
perspectiveFrustumSlice(double near,
double far,
Matrix4d dest)
Change the near and far clip plane distances of
this perspective frustum transformation matrix
and store the result in dest . |
Matrix4d |
perspectiveLH(double fovy,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d 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 . |
Matrix4d |
perspectiveLH(double fovy,
double aspect,
double zNear,
double zFar,
Matrix4d 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 . |
double |
perspectiveNear()
Extract the near clip plane distance from
this perspective projection matrix. |
Vector3d |
perspectiveOrigin(Vector3d 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 . |
Matrix4d |
pick(double x,
double y,
double width,
double height,
int[] viewport,
Matrix4d 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 . |
Vector3d |
positiveX(Vector3d dir)
Obtain the direction of +X before the transformation represented by
this matrix is applied. |
Vector3d |
positiveY(Vector3d dir)
Obtain the direction of +Y before the transformation represented by
this matrix is applied. |
Vector3d |
positiveZ(Vector3d dir)
Obtain the direction of +Z before the transformation represented by
this matrix is applied. |
Vector3d |
project(double x,
double y,
double z,
int[] viewport,
Vector3d winCoordsDest)
Project the given (x, y, z) position via
this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest . |
Vector4d |
project(double x,
double y,
double z,
int[] viewport,
Vector4d winCoordsDest)
Project the given (x, y, z) position via
this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest . |
Vector3d |
project(Vector3dc position,
int[] viewport,
Vector3d winCoordsDest)
Project the given
position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest . |
Vector4d |
project(Vector3dc position,
int[] viewport,
Vector4d winCoordsDest)
Project the given
position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest . |
Matrix4d |
projectedGridRange(Matrix4dc projector,
double sLower,
double sUpper,
Matrix4d 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 . |
byte |
properties() |
Matrix4d |
reflect(double nx,
double ny,
double nz,
double px,
double py,
double pz,
Matrix4d 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 . |
Matrix4d |
reflect(double a,
double b,
double c,
double d,
Matrix4d 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 . |
Matrix4d |
reflect(Quaterniondc orientation,
Vector3dc point,
Matrix4d 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 . |
Matrix4d |
reflect(Vector3dc normal,
Vector3dc point,
Matrix4d 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 . |
Matrix4d |
rotate(AxisAngle4d axisAngle,
Matrix4d dest)
Apply a rotation transformation, rotating about the given
AxisAngle4d and store the result in dest . |
Matrix4d |
rotate(AxisAngle4f axisAngle,
Matrix4d dest)
Apply a rotation transformation, rotating about the given
AxisAngle4f and store the result in dest . |
Matrix4d |
rotate(double ang,
double x,
double y,
double z,
Matrix4d dest)
Apply rotation to this matrix by rotating the given amount of radians
about the given axis specified as x, y and z components and store the result in
dest . |
Matrix4d |
rotate(double angle,
Vector3dc axis,
Matrix4d dest)
Apply a rotation transformation, rotating the given radians about the specified axis and store the result in
dest . |
Matrix4d |
rotate(double angle,
Vector3fc axis,
Matrix4d dest)
Apply a rotation transformation, rotating the given radians about the specified axis and store the result in
dest . |
Matrix4d |
rotate(Quaterniondc quat,
Matrix4d dest)
Apply the rotation transformation of the given
Quaterniondc to this matrix and store
the result in dest . |
Matrix4d |
rotate(Quaternionfc quat,
Matrix4d dest)
Apply the rotation transformation of the given
Quaternionfc to this matrix and store
the result in dest . |
Matrix4d |
rotateAffine(double ang,
double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
rotateAffine(Quaterniondc quat,
Matrix4d dest)
Apply the rotation transformation of the given
Quaterniondc to this affine matrix and store
the result in dest . |
Matrix4d |
rotateAffine(Quaternionfc quat,
Matrix4d dest)
Apply the rotation transformation of the given
Quaternionfc to this affine matrix and store
the result in dest . |
Matrix4d |
rotateAffineXYZ(double angleX,
double angleY,
double angleZ,
Matrix4d 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 . |
Matrix4d |
rotateAffineYXZ(double angleY,
double angleX,
double angleZ,
Matrix4d 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 . |
Matrix4d |
rotateAffineZYX(double angleZ,
double angleY,
double angleX,
Matrix4d 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 . |
Matrix4d |
rotateAround(Quaterniondc quat,
double ox,
double oy,
double oz,
Matrix4d dest)
Apply the rotation transformation of the given
Quaterniondc to this matrix while using (ox, oy, oz) as the rotation origin,
and store the result in dest . |
Matrix4d |
rotateAroundLocal(Quaterniondc quat,
double ox,
double oy,
double oz,
Matrix4d dest)
Pre-multiply the rotation transformation of the given
Quaterniondc to this matrix while using (ox, oy, oz)
as the rotation origin, and store the result in dest . |
Matrix4d |
rotateLocal(double ang,
double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
rotateLocal(Quaterniondc quat,
Matrix4d dest)
Pre-multiply the rotation transformation of the given
Quaterniondc to this matrix and store
the result in dest . |
Matrix4d |
rotateLocal(Quaternionfc quat,
Matrix4d dest)
Pre-multiply the rotation transformation of the given
Quaternionfc to this matrix and store
the result in dest . |
Matrix4d |
rotateTowards(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ,
Matrix4d 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 . |
Matrix4d |
rotateTowards(Vector3dc direction,
Vector3dc up,
Matrix4d dest)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the local
+Z axis with direction
and store the result in dest . |
Matrix4d |
rotateTranslation(double ang,
double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
rotateTranslation(Quaterniondc quat,
Matrix4d dest)
Apply the rotation transformation of the given
Quaterniondc to this matrix, which is assumed to only contain a translation, and store
the result in dest . |
Matrix4d |
rotateTranslation(Quaternionfc quat,
Matrix4d dest)
Apply the rotation transformation of the given
Quaternionfc to this matrix, which is assumed to only contain a translation, and store
the result in dest . |
Matrix4d |
rotateX(double ang,
Matrix4d dest)
Apply rotation about the X axis to this matrix by rotating the given amount of radians
and store the result in
dest . |
Matrix4d |
rotateXYZ(double angleX,
double angleY,
double angleZ,
Matrix4d 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 . |
Matrix4d |
rotateY(double ang,
Matrix4d dest)
Apply rotation about the Y axis to this matrix by rotating the given amount of radians
and store the result in
dest . |
Matrix4d |
rotateYXZ(double angleY,
double angleX,
double angleZ,
Matrix4d 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 . |
Matrix4d |
rotateZ(double ang,
Matrix4d dest)
Apply rotation about the Z axis to this matrix by rotating the given amount of radians
and store the result in
dest . |
Matrix4d |
rotateZYX(double angleZ,
double angleY,
double angleX,
Matrix4d 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 . |
Matrix4d |
scale(double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
scale(double xyz,
Matrix4d dest)
Apply scaling to this matrix by uniformly scaling all base axes by the given xyz factor
and store the result in
dest . |
Matrix4d |
scale(Vector3dc xyz,
Matrix4d 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 . |
Matrix4d |
scaleAround(double sx,
double sy,
double sz,
double ox,
double oy,
double oz,
Matrix4d 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 . |
Matrix4d |
scaleAround(double factor,
double ox,
double oy,
double oz,
Matrix4d 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 . |
Matrix4d |
scaleAroundLocal(double sx,
double sy,
double sz,
double ox,
double oy,
double oz,
Matrix4d 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 . |
Matrix4d |
scaleAroundLocal(double factor,
double ox,
double oy,
double oz,
Matrix4d 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 . |
Matrix4d |
scaleLocal(double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
shadow(double lightX,
double lightY,
double lightZ,
double lightW,
double a,
double b,
double c,
double d,
Matrix4d 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 . |
Matrix4d |
shadow(double lightX,
double lightY,
double lightZ,
double lightW,
Matrix4dc planeTransform,
Matrix4d 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 . |
Matrix4d |
shadow(Vector4dc light,
double a,
double b,
double c,
double d,
Matrix4d 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 . |
Matrix4d |
shadow(Vector4dc light,
Matrix4dc planeTransform,
Matrix4d 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 . |
Matrix4d |
sub(Matrix4dc subtrahend,
Matrix4d dest)
Component-wise subtract
subtrahend from this and store the result in dest . |
Matrix4d |
sub4x3(Matrix4dc subtrahend,
Matrix4d dest)
Component-wise subtract the upper 4x3 submatrices of
subtrahend from this
and store the result in dest . |
Vector4d |
transform(double x,
double y,
double z,
double w,
Vector4d dest)
Transform/multiply the vector (x, y, z, w) by this matrix and store the result in
dest . |
Vector4d |
transform(Vector4d v)
Transform/multiply the given vector by this matrix and store the result in that vector.
|
Vector4d |
transform(Vector4dc v,
Vector4d dest)
Transform/multiply the given vector by this matrix and store the result in
dest . |
Matrix4d |
transformAab(double minX,
double minY,
double minZ,
double maxX,
double maxY,
double maxZ,
Vector3d outMin,
Vector3d 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 . |
Matrix4d |
transformAab(Vector3dc min,
Vector3dc max,
Vector3d outMin,
Vector3d 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 . |
Vector4d |
transformAffine(double x,
double y,
double z,
double w,
Vector4d dest)
Transform/multiply the 4D-vector (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 . |
Vector4d |
transformAffine(Vector4d v)
Transform/multiply the given 4D-vector by assuming that
this matrix represents an affine transformation
(i.e. its last row is equal to (0, 0, 0, 1)). |
Vector4d |
transformAffine(Vector4dc v,
Vector4d dest)
Transform/multiply the given 4D-vector 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 . |
Vector3d |
transformDirection(double x,
double y,
double z,
Vector3d dest)
Transform/multiply the 3D-vector (x, y, z), as if it was a 4D-vector with w=0, by
this matrix and store the result in
dest . |
Vector3d |
transformDirection(Vector3d 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.
|
Vector3d |
transformDirection(Vector3dc v,
Vector3d 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 . |
Vector3d |
transformPosition(double x,
double y,
double z,
Vector3d 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 . |
Vector3d |
transformPosition(Vector3d 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.
|
Vector3d |
transformPosition(Vector3dc v,
Vector3d 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 . |
Vector4d |
transformProject(double x,
double y,
double z,
double w,
Vector4d dest)
Transform/multiply the vector (x, y, z, w) by this matrix, perform perspective divide and store the result in
dest . |
Vector3d |
transformProject(double x,
double y,
double z,
Vector3d dest)
Transform/multiply the vector (x, y, z) by this matrix, perform perspective divide and store the result in
dest . |
Vector3d |
transformProject(Vector3d v)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in that vector.
|
Vector3d |
transformProject(Vector3dc v,
Vector3d dest)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in
dest . |
Vector4d |
transformProject(Vector4d v)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in that vector.
|
Vector4d |
transformProject(Vector4dc v,
Vector4d dest)
Transform/multiply the given vector by this matrix, perform perspective divide and store the result in
dest . |
Matrix4d |
translate(double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
translate(Vector3dc offset,
Matrix4d 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 . |
Matrix4d |
translate(Vector3fc offset,
Matrix4d 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 . |
Matrix4d |
translateLocal(double x,
double y,
double z,
Matrix4d 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 . |
Matrix4d |
translateLocal(Vector3dc offset,
Matrix4d 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 . |
Matrix4d |
translateLocal(Vector3fc offset,
Matrix4d 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 . |
Matrix4d |
transpose(Matrix4d dest)
Transpose
this matrix and store the result into dest . |
Matrix3d |
transpose3x3(Matrix3d dest)
Transpose only the upper left 3x3 submatrix of this matrix and store the result in
dest . |
Matrix4d |
transpose3x3(Matrix4d dest)
Transpose only the upper left 3x3 submatrix of this matrix and store the result in
dest . |
Vector3d |
unproject(double winX,
double winY,
double winZ,
int[] viewport,
Vector3d dest)
Unproject the given window coordinates (winX, winY, winZ) by
this matrix using the specified viewport. |
Vector4d |
unproject(double winX,
double winY,
double winZ,
int[] viewport,
Vector4d dest)
Unproject the given window coordinates (winX, winY, winZ) by
this matrix using the specified viewport. |
Vector3d |
unproject(Vector3dc winCoords,
int[] viewport,
Vector3d dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Vector4d |
unproject(Vector3dc winCoords,
int[] viewport,
Vector4d dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Vector3d |
unprojectInv(double winX,
double winY,
double winZ,
int[] viewport,
Vector3d dest)
Unproject the given window coordinates (winX, winY, winZ) by
this matrix using the specified viewport. |
Vector4d |
unprojectInv(double winX,
double winY,
double winZ,
int[] viewport,
Vector4d dest)
Unproject the given window coordinates (winX, winY, winZ) by
this matrix using the specified viewport. |
Vector3d |
unprojectInv(Vector3dc winCoords,
int[] viewport,
Vector3d dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Vector4d |
unprojectInv(Vector3dc winCoords,
int[] viewport,
Vector4d dest)
Unproject the given window coordinates
winCoords by this matrix using the specified viewport. |
Matrix4d |
unprojectInvRay(double winX,
double winY,
int[] viewport,
Vector3d originDest,
Vector3d 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. |
Matrix4d |
unprojectInvRay(Vector2dc winCoords,
int[] viewport,
Vector3d originDest,
Vector3d 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. |
Matrix4d |
unprojectRay(double winX,
double winY,
int[] viewport,
Vector3d originDest,
Vector3d 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. |
Matrix4d |
unprojectRay(Vector2dc winCoords,
int[] viewport,
Vector3d originDest,
Vector3d 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. |
static final int PLANE_NX
frustumPlane(int, Vector4d)
identifying the plane with equation x=-1 when using the identity matrix.static final int PLANE_PX
frustumPlane(int, Vector4d)
identifying the plane with equation x=1 when using the identity matrix.static final int PLANE_NY
frustumPlane(int, Vector4d)
identifying the plane with equation y=-1 when using the identity matrix.static final int PLANE_PY
frustumPlane(int, Vector4d)
identifying the plane with equation y=1 when using the identity matrix.static final int PLANE_NZ
frustumPlane(int, Vector4d)
identifying the plane with equation z=-1 when using the identity matrix.static final int PLANE_PZ
frustumPlane(int, Vector4d)
identifying the plane with equation z=1 when using the identity matrix.static final int CORNER_NXNYNZ
frustumCorner(int, Vector3d)
identifying the corner (-1, -1, -1) when using the identity matrix.static final int CORNER_PXNYNZ
frustumCorner(int, Vector3d)
identifying the corner (1, -1, -1) when using the identity matrix.static final int CORNER_PXPYNZ
frustumCorner(int, Vector3d)
identifying the corner (1, 1, -1) when using the identity matrix.static final int CORNER_NXPYNZ
frustumCorner(int, Vector3d)
identifying the corner (-1, 1, -1) when using the identity matrix.static final int CORNER_PXNYPZ
frustumCorner(int, Vector3d)
identifying the corner (1, -1, 1) when using the identity matrix.static final int CORNER_NXNYPZ
frustumCorner(int, Vector3d)
identifying the corner (-1, -1, 1) when using the identity matrix.static final int CORNER_NXPYPZ
frustumCorner(int, Vector3d)
identifying the corner (-1, 1, 1) when using the identity matrix.static final int CORNER_PXPYPZ
frustumCorner(int, Vector3d)
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.byte properties()
double m00()
double m01()
double m02()
double m03()
double m10()
double m11()
double m12()
double m13()
double m20()
double m21()
double m22()
double m23()
double m30()
double m31()
double m32()
double m33()
Matrix4d mul(Matrix4dc right, Matrix4d 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 multiplicationdest
- will hold the resultMatrix4d mul(Matrix4x3dc right, Matrix4d 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 resultMatrix4d mul(Matrix4x3fc right, Matrix4d 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 resultMatrix4d mul(Matrix4fc right, Matrix4d dest)
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 multiplicationdest
- will hold the resultMatrix4d mulPerspectiveAffine(Matrix4dc view, Matrix4d 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 resultMatrix4d mulAffineR(Matrix4dc right, Matrix4d 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 resultMatrix4d mulAffineR(Matrix4x3dc right, Matrix4d 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 resultMatrix4d mulAffine(Matrix4dc right, Matrix4d 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 resultMatrix4d mulTranslationAffine(Matrix4dc right, Matrix4d 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 resultMatrix4d mulOrthoAffine(Matrix4dc view, Matrix4d 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 resultMatrix4d fma4x3(Matrix4dc other, double otherFactor, Matrix4d 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 resultMatrix4d add(Matrix4dc other, Matrix4d dest)
this
and other
and store the result in dest
.other
- the other addenddest
- will hold the resultMatrix4d sub(Matrix4dc subtrahend, Matrix4d dest)
subtrahend
from this
and store the result in dest
.subtrahend
- the subtrahenddest
- will hold the resultMatrix4d mulComponentWise(Matrix4dc other, Matrix4d dest)
this
by other
and store the result in dest
.other
- the other matrixdest
- will hold the resultMatrix4d add4x3(Matrix4dc other, Matrix4d 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 resultMatrix4d add4x3(Matrix4fc other, Matrix4d 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 resultMatrix4d sub4x3(Matrix4dc subtrahend, Matrix4d 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 resultMatrix4d mul4x3ComponentWise(Matrix4dc other, Matrix4d 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 resultdouble 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()
double determinant3x3()
double determinantAffine()
affine
transformation and thus
its last row is equal to (0, 0, 0, 1).Matrix4d invert(Matrix4d dest)
this
matrix and store the result in 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(Matrix4d)
can be used instead of this method.
dest
- will hold the resultinvertAffine(Matrix4d)
Matrix4d invertPerspective(Matrix4d 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 this
perspective(double, double, double, double, Matrix4d)
Matrix4d invertFrustum(Matrix4d 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(Matrix4d)
should be used instead.
dest
- will hold the inverse of this
frustum(double, double, double, double, double, double, Matrix4d)
,
invertPerspective(Matrix4d)
Matrix4d invertOrtho(Matrix4d 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 this
Matrix4d invertPerspectiveView(Matrix4dc view, Matrix4d 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(double, double, double, double, Matrix4d)
, except for scale()
.
For the special cases of the matrices this
and view
mentioned above this method, 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 * viewMatrix4d invertAffine(Matrix4d dest)
affine
transformation (i.e. its last row is equal to (0, 0, 0, 1))
and write the result into dest
.
Note that if this
matrix also has unit scaling, then the method invertAffineUnitScale(Matrix4d)
should be used instead.
dest
- will hold the resultinvertAffineUnitScale(Matrix4d)
Matrix4d invertAffineUnitScale(Matrix4d dest)
affine
transformation (i.e. its last row is equal to (0, 0, 0, 1))
and has unit scaling (i.e. transformDirection
does not change the length
of the vector)
and write the result into dest
.
Reference: http://www.gamedev.net/
dest
- will hold the resultMatrix4d invertLookAt(Matrix4d dest)
affine
transformation (i.e. its last row is equal to (0, 0, 0, 1))
and has unit scaling (i.e. transformDirection
does not change the length
of the vector),
as is the case for matrices built via lookAt(Vector3dc, Vector3dc, Vector3dc, Matrix4d)
and their overloads, and write the result into dest
.
This method is equivalent to calling invertAffineUnitScale(Matrix4d)
Reference: http://www.gamedev.net/
dest
- will hold the resultinvertAffineUnitScale(Matrix4d)
Matrix4d transpose(Matrix4d dest)
this
matrix and store the result into dest
.dest
- will hold the resultMatrix4d transpose3x3(Matrix4d dest)
dest
.
All other matrix elements are left unchanged.
dest
- will hold the resultMatrix3d transpose3x3(Matrix3d dest)
dest
.dest
- will hold the resultVector3d getTranslation(Vector3d dest)
xyz
.dest
- will hold the translation components of this matrixVector3d getScale(Vector3d dest)
this
matrix for the three base axes.dest
- will hold the scaling factors for x, y and zMatrix4d get(Matrix4d dest)
this
matrix and store them into
dest
.dest
- the destination matrixMatrix4x3d get4x3(Matrix4x3d dest)
this
matrix and store them into
dest
.dest
- the destination matrixMatrix3d get3x3(Matrix3d dest)
this
matrix and store them into
dest
.dest
- the destination matrixQuaternionf 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 Quaternionf
Quaternionf.setFromUnnormalized(Matrix4dc)
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 Quaternionf
Quaternionf.setFromNormalized(Matrix4dc)
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 Quaterniond
Quaterniond.setFromUnnormalized(Matrix4dc)
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 Quaterniond
Quaterniond.setFromNormalized(Matrix4dc)
DoubleBuffer get(DoubleBuffer buffer)
DoubleBuffer
at the current
buffer position
.
This method will not increment the position of the given DoubleBuffer.
In order to specify the offset into the DoubleBuffer at which
the matrix is stored, use get(int, DoubleBuffer)
, taking
the absolute position as parameter.
buffer
- will receive the values of this matrix in column-major order at its current positionget(int, DoubleBuffer)
DoubleBuffer get(int index, DoubleBuffer buffer)
DoubleBuffer
starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer
.
index
- the absolute position into the DoubleBuffer
buffer
- will receive the values of this matrix in column-major orderFloatBuffer 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.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given FloatBuffer.
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.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into 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 orderByteBuffer getFloats(ByteBuffer buffer)
ByteBuffer
at the current
buffer position
.
This method will not increment the position of the given ByteBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use getFloats(int, ByteBuffer)
, taking
the absolute position as parameter.
buffer
- will receive the elements of this matrix as float values in column-major order at its current positiongetFloats(int, ByteBuffer)
ByteBuffer getFloats(int index, ByteBuffer buffer)
ByteBuffer
starting at the specified absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given ByteBuffer.
index
- the absolute position into the ByteBufferbuffer
- will receive the elements of this matrix as float values in column-major orderdouble[] get(double[] arr, int offset)
arr
- the array to write the matrix values intooffset
- the offset into the arraydouble[] get(double[] arr)
In order to specify an explicit offset into the array, use the method get(double[], int)
.
arr
- the array to write the matrix values intoget(double[], int)
float[] get(float[] arr, int offset)
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given float array.
arr
- the array to write the matrix values intooffset
- the offset into the arrayfloat[] get(float[] arr)
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given float array.
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)
DoubleBuffer getTransposed(DoubleBuffer buffer)
DoubleBuffer
at the current
buffer position
.
This method will not increment the position of the given DoubleBuffer.
In order to specify the offset into the DoubleBuffer at which
the matrix is stored, use getTransposed(int, DoubleBuffer)
, taking
the absolute position as parameter.
buffer
- will receive the values of this matrix in column-major order at its current positiongetTransposed(int, DoubleBuffer)
DoubleBuffer getTransposed(int index, DoubleBuffer buffer)
DoubleBuffer
starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer.
index
- the absolute position into the DoubleBufferbuffer
- 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 orderDoubleBuffer get4x3Transposed(DoubleBuffer buffer)
this
matrix in row-major order into the supplied DoubleBuffer
at the current
buffer position
.
This method will not increment the position of the given DoubleBuffer.
In order to specify the offset into the DoubleBuffer at which
the matrix is stored, use get4x3Transposed(int, DoubleBuffer)
, 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, DoubleBuffer)
DoubleBuffer get4x3Transposed(int index, DoubleBuffer buffer)
this
matrix in row-major order into the supplied DoubleBuffer
starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer.
index
- the absolute position into the DoubleBufferbuffer
- 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 orderVector4d transform(Vector4d v)
v
- the vector to transform and to hold the final resultVector4d.mul(Matrix4dc)
Vector4d transform(Vector4dc v, Vector4d dest)
dest
.v
- the vector to transformdest
- will contain the resultVector4d.mul(Matrix4dc, Vector4d)
Vector4d transform(double x, double y, double z, double w, Vector4d dest)
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 resultVector4d transformProject(Vector4d v)
v
- the vector to transform and to hold the final resultVector4d.mulProject(Matrix4dc)
Vector4d transformProject(Vector4dc v, Vector4d dest)
dest
.v
- the vector to transformdest
- will contain the resultVector4d.mulProject(Matrix4dc, Vector4d)
Vector4d transformProject(double x, double y, double z, double w, Vector4d dest)
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 contain the resultVector3d transformProject(Vector3d v)
This method uses w=1.0 as the fourth vector component.
v
- the vector to transform and to hold the final resultVector3d.mulProject(Matrix4dc)
Vector3d transformProject(Vector3dc v, Vector3d dest)
dest
.
This method uses w=1.0 as the fourth vector component.
v
- the vector to transformdest
- will contain the resultVector3d.mulProject(Matrix4dc, Vector3d)
Vector3d transformProject(double x, double y, double z, Vector3d dest)
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 resultVector3d transformPosition(Vector3d 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(Vector4d)
or
transformProject(Vector3d)
when perspective divide should be applied, too.
In order to store the result in another vector, use transformPosition(Vector3dc, Vector3d)
.
v
- the vector to transform and to hold the final resulttransformPosition(Vector3dc, Vector3d)
,
transform(Vector4d)
,
transformProject(Vector3d)
Vector3d transformPosition(Vector3dc v, Vector3d 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(Vector4dc, Vector4d)
or
transformProject(Vector3dc, Vector3d)
when perspective divide should be applied, too.
In order to store the result in the same vector, use transformPosition(Vector3d)
.
v
- the vector to transformdest
- will hold the resulttransformPosition(Vector3d)
,
transform(Vector4dc, Vector4d)
,
transformProject(Vector3dc, Vector3d)
Vector3d transformPosition(double x, double y, double z, Vector3d 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(double, double, double, double, Vector4d)
or
transformProject(double, double, double, Vector3d)
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(double, double, double, double, Vector4d)
,
transformProject(double, double, double, Vector3d)
Vector3d transformDirection(Vector3d 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(Vector3dc, Vector3d)
.
v
- the vector to transform and to hold the final resultVector3d transformDirection(Vector3dc v, Vector3d 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(Vector3d)
.
v
- the vector to transform and to hold the final resultdest
- will hold the resultVector3d transformDirection(double x, double y, double z, Vector3d 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.
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 resultVector4d transformAffine(Vector4d 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(Vector4dc, Vector4d)
.
v
- the vector to transform and to hold the final resulttransformAffine(Vector4dc, Vector4d)
Vector4d transformAffine(Vector4dc v, Vector4d 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(Vector4d)
.
v
- the vector to transform and to hold the final resultdest
- will hold the resulttransformAffine(Vector4d)
Vector4d transformAffine(double x, double y, double z, double w, Vector4d 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
.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 resultMatrix4d scale(Vector3dc xyz, Matrix4d 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 resultMatrix4d scale(double x, double y, double z, Matrix4d 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 resultMatrix4d scale(double xyz, Matrix4d dest)
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 factor for all componentsdest
- will hold the resultscale(double, double, double, Matrix4d)
Matrix4d scaleAround(double sx, double sy, double sz, double ox, double oy, double oz, Matrix4d 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 resultMatrix4d scaleAround(double factor, double ox, double oy, double oz, Matrix4d 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 resultMatrix4d scaleLocal(double x, double y, double z, Matrix4d 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 resultMatrix4d scaleAroundLocal(double sx, double sy, double sz, double ox, double oy, double oz, Matrix4d 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 Matrix4d().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 resultMatrix4d scaleAroundLocal(double factor, double ox, double oy, double oz, Matrix4d 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 Matrix4d().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 resultMatrix4d rotate(double ang, double x, double y, double z, Matrix4d 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!
ang
- the angle is in radiansx
- the x component of the axisy
- the y component of the axisz
- the z component of the axisdest
- will hold the resultMatrix4d rotateTranslation(double ang, double x, double y, double z, Matrix4d dest)
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 resultMatrix4d rotateAffine(double ang, double x, double y, double z, Matrix4d 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 resultMatrix4d rotateAround(Quaterniondc quat, double ox, double oy, double oz, Matrix4d dest)
Quaterniondc
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 Quaterniondc
ox
- the x coordinate of the rotation originoy
- the y coordinate of the rotation originoz
- the z coordinate of the rotation origindest
- will hold the resultMatrix4d rotateLocal(double ang, double x, double y, double z, Matrix4d dest)
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 resultMatrix4d rotateAroundLocal(Quaterniondc quat, double ox, double oy, double oz, Matrix4d dest)
Quaterniondc
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 Quaterniondc
ox
- the x coordinate of the rotation originoy
- the y coordinate of the rotation originoz
- the z coordinate of the rotation origindest
- will hold the resultMatrix4d translate(Vector3dc offset, Matrix4d 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 resultMatrix4d translate(Vector3fc offset, Matrix4d 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 resultMatrix4d translate(double x, double y, double z, Matrix4d 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 resultMatrix4d translateLocal(Vector3fc offset, Matrix4d 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 resultMatrix4d translateLocal(Vector3dc offset, Matrix4d 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 resultMatrix4d translateLocal(double x, double y, double z, Matrix4d 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 resultMatrix4d rotateX(double ang, Matrix4d 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 resultMatrix4d rotateY(double ang, Matrix4d 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 resultMatrix4d rotateZ(double ang, Matrix4d 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 resultMatrix4d rotateXYZ(double angleX, double angleY, double angleZ, Matrix4d 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 resultMatrix4d rotateAffineXYZ(double angleX, double angleY, double angleZ, Matrix4d 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 resultMatrix4d rotateZYX(double angleZ, double angleY, double angleX, Matrix4d 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 resultMatrix4d rotateAffineZYX(double angleZ, double angleY, double angleX, Matrix4d 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 resultMatrix4d rotateYXZ(double angleY, double angleX, double angleZ, Matrix4d 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 resultMatrix4d rotateAffineYXZ(double angleY, double angleX, double angleZ, Matrix4d 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 resultMatrix4d rotate(Quaterniondc quat, Matrix4d dest)
Quaterniondc
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 Quaterniondc
dest
- will hold the resultMatrix4d rotate(Quaternionfc quat, Matrix4d 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 Quaternionfc
dest
- will hold the resultMatrix4d rotateAffine(Quaterniondc quat, Matrix4d dest)
Quaterniondc
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 Quaterniondc
dest
- will hold the resultMatrix4d rotateTranslation(Quaterniondc quat, Matrix4d dest)
Quaterniondc
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 Quaterniondc
dest
- will hold the resultMatrix4d rotateTranslation(Quaternionfc quat, Matrix4d 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 Quaternionfc
dest
- will hold the resultMatrix4d rotateLocal(Quaterniondc quat, Matrix4d dest)
Quaterniondc
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 Quaterniondc
dest
- will hold the resultMatrix4d rotateAffine(Quaternionfc quat, Matrix4d 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 Quaternionfc
dest
- will hold the resultMatrix4d rotateLocal(Quaternionfc quat, Matrix4d 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 Quaternionfc
dest
- will hold the resultMatrix4d rotate(AxisAngle4f axisAngle, Matrix4d dest)
AxisAngle4f
and store the result in 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 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(double, double, double, double, Matrix4d)
Matrix4d rotate(AxisAngle4d axisAngle, Matrix4d dest)
AxisAngle4d
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 AxisAngle4d
,
then the new matrix will be M * A
. So when transforming a
vector v
with the new matrix by using M * A * v
,
the AxisAngle4d
rotation will be applied first!
Reference: http://en.wikipedia.org
axisAngle
- the AxisAngle4d
(needs to be normalized
)dest
- will hold the resultrotate(double, double, double, double, Matrix4d)
Matrix4d rotate(double angle, Vector3dc axis, Matrix4d 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 A
the rotation matrix obtained from the given angle and axis,
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(double, double, double, double, Matrix4d)
Matrix4d rotate(double angle, Vector3fc axis, Matrix4d 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 A
the rotation matrix obtained from the given angle and axis,
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(double, double, double, double, Matrix4d)
Vector4d getRow(int row, Vector4d 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]Vector4d getColumn(int column, Vector4d 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]Matrix4d normal(Matrix4d 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 resultMatrix3d normal(Matrix3d dest)
this
and store it into dest
.
The normal matrix of m is the transpose of the inverse of m.
dest
- will hold the resultget3x3(Matrix3d)
Matrix4d normalize3x3(Matrix4d 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 resultMatrix3d normalize3x3(Matrix3d 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 resultVector4d unproject(double winX, double winY, double winZ, int[] viewport, Vector4d dest)
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(Matrix4d)
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(double, double, double, int[], Vector4d)
,
invert(Matrix4d)
Vector3d unproject(double winX, double winY, double winZ, int[] viewport, Vector3d dest)
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(Matrix4d)
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(double, double, double, int[], Vector3d)
,
invert(Matrix4d)
Vector4d unproject(Vector3dc winCoords, int[] viewport, Vector4d 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(Matrix4d)
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(double, double, double, int[], Vector4d)
,
unproject(double, double, double, int[], Vector4d)
,
invert(Matrix4d)
Vector3d unproject(Vector3dc winCoords, int[] viewport, Vector3d 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(Matrix4d)
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(double, double, double, int[], Vector4d)
,
unproject(double, double, double, int[], Vector4d)
,
invert(Matrix4d)
Matrix4d unprojectRay(double winX, double winY, int[] viewport, Vector3d originDest, Vector3d dirDest)
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(Matrix4d)
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(double, double, int[], Vector3d, Vector3d)
,
invert(Matrix4d)
Matrix4d unprojectRay(Vector2dc winCoords, int[] viewport, Vector3d originDest, Vector3d 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(Matrix4d)
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(double, double, int[], Vector3d, Vector3d)
,
unprojectRay(double, double, int[], Vector3d, Vector3d)
,
invert(Matrix4d)
Vector4d unprojectInv(Vector3dc winCoords, int[] viewport, Vector4d 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.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by this
matrix.
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(Vector3dc, int[], Vector4d)
Vector4d unprojectInv(double winX, double winY, double winZ, int[] viewport, Vector4d dest)
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.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by this
matrix.
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(double, double, double, int[], Vector4d)
Vector3d unprojectInv(Vector3dc winCoords, int[] viewport, Vector3d 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.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by this
matrix.
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(Vector3dc, int[], Vector3d)
Vector3d unprojectInv(double winX, double winY, double winZ, int[] viewport, Vector3d dest)
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.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by this
matrix.
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(double, double, double, int[], Vector3d)
Matrix4d unprojectInvRay(Vector2dc winCoords, int[] viewport, Vector3d originDest, Vector3d 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(Vector2dc, int[], Vector3d, Vector3d)
Matrix4d unprojectInvRay(double winX, double winY, int[] viewport, Vector3d originDest, Vector3d dirDest)
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(double, double, int[], Vector3d, Vector3d)
Vector4d project(double x, double y, double z, int[] viewport, Vector4d winCoordsDest)
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 coordinatesVector3d project(double x, double y, double z, int[] viewport, Vector3d winCoordsDest)
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 coordinatesVector4d project(Vector3dc position, int[] viewport, Vector4d 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(double, double, double, int[], Vector4d)
Vector3d project(Vector3dc position, int[] viewport, Vector3d 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(double, double, double, int[], Vector4d)
Matrix4d reflect(double a, double b, double c, double d, Matrix4d dest)
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 resultMatrix4d reflect(double nx, double ny, double nz, double px, double py, double pz, Matrix4d 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 resultMatrix4d reflect(Quaterniondc orientation, Vector3dc point, Matrix4d 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 Quaterniondc
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 orientationpoint
- a point on the planedest
- will hold the resultMatrix4d reflect(Vector3dc normal, Vector3dc point, Matrix4d 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 resultMatrix4d ortho(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 false
dest
- will hold the resultMatrix4d ortho(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d 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 distancedest
- will hold the resultMatrix4d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 false
dest
- will hold the resultMatrix4d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d 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 distancedest
- will hold the resultMatrix4d orthoSymmetric(double width, double height, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 false
Matrix4d orthoSymmetric(double width, double height, double zNear, double zFar, Matrix4d 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 resultMatrix4d orthoSymmetricLH(double width, double height, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 false
Matrix4d orthoSymmetricLH(double width, double height, double zNear, double zFar, Matrix4d 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 resultMatrix4d ortho2D(double left, double right, double bottom, double top, Matrix4d 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(double, double, double, double, double, double, Matrix4d)
Matrix4d ortho2DLH(double left, double right, double bottom, double top, Matrix4d 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(double, double, double, double, double, double, Matrix4d)
Matrix4d lookAlong(Vector3dc dir, Vector3dc up, Matrix4d 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(double, double, double, double, double, double, Matrix4d)
,
lookAt(Vector3dc, Vector3dc, Vector3dc, Matrix4d)
Matrix4d lookAlong(double dirX, double dirY, double dirZ, double upX, double upY, double upZ, Matrix4d 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(double, double, double, double, double, double, double, double, double, Matrix4d)
Matrix4d lookAt(Vector3dc eye, Vector3dc center, Vector3dc up, Matrix4d 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(double, double, double, double, double, double, double, double, double, Matrix4d)
Matrix4d lookAt(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ, Matrix4d 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(Vector3dc, Vector3dc, Vector3dc, Matrix4d)
Matrix4d lookAtPerspective(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ, Matrix4d 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 resultMatrix4d lookAtLH(Vector3dc eye, Vector3dc center, Vector3dc up, Matrix4d 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 resultMatrix4d lookAtLH(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ, Matrix4d 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(Vector3dc, Vector3dc, Vector3dc, Matrix4d)
Matrix4d lookAtPerspectiveLH(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ, Matrix4d 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 resultMatrix4d perspective(double fovy, double aspect, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.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 false
Matrix4d perspective(double fovy, double aspect, double zNear, double zFar, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.POSITIVE_INFINITY
.dest
- will hold the resultMatrix4d perspectiveLH(double fovy, double aspect, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.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 false
dest
- will hold the resultMatrix4d perspectiveLH(double fovy, double aspect, double zNear, double zFar, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.POSITIVE_INFINITY
.dest
- will hold the resultMatrix4d frustum(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.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 false
dest
- will hold the resultMatrix4d frustum(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.POSITIVE_INFINITY
.dest
- will hold the resultMatrix4d frustumLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.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 false
dest
- will hold the resultMatrix4d frustumLH(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d 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 Double.POSITIVE_INFINITY
is used, the near clipping plane will be at positive infinity.
In that case, zFar
may not also be Double.POSITIVE_INFINITY
.zFar
- far clipping plane distance. If the special value Double.POSITIVE_INFINITY
is used, the far clipping plane will be at positive infinity.
In that case, zNear
may not also be Double.POSITIVE_INFINITY
.dest
- will hold the resultVector4d frustumPlane(int plane, Vector4d 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 Vector4d
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).
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_PZ
planeEquation
- will hold the computed plane equation.
The plane equation will be normalized, meaning that (a, b, c) will be a unit vectorVector3d frustumCorner(int corner, Vector3d 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_PXPYPZ
point
- will hold the resulting corner point coordinatesVector3d perspectiveOrigin(Vector3d 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 transformationdouble 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
double perspectiveNear()
this
perspective projection matrix.
This method only works if this
is a perspective projection matrix, for example obtained via perspective(double, double, double, double, Matrix4d)
.
double perspectiveFar()
this
perspective projection matrix.
This method only works if this
is a perspective projection matrix, for example obtained via perspective(double, double, double, double, Matrix4d)
.
Vector3d frustumRayDir(double x, double y, Vector3d 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
matrixVector3d positiveZ(Vector3d dir)
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:
Matrix4d inv = new Matrix4d(this).invert(); inv.transformDirection(dir.set(0, 0, 1)).normalize();If
this
is already an orthogonal matrix, then consider using normalizedPositiveZ(Vector3d)
instead.
Reference: http://www.euclideanspace.com
dir
- will hold the direction of +ZVector3d normalizedPositiveZ(Vector3d dir)
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:
Matrix4d inv = new Matrix4d(this).transpose(); inv.transformDirection(dir.set(0, 0, 1));
Reference: http://www.euclideanspace.com
dir
- will hold the direction of +ZVector3d positiveX(Vector3d dir)
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:
Matrix4d inv = new Matrix4d(this).invert(); inv.transformDirection(dir.set(1, 0, 0)).normalize();If
this
is already an orthogonal matrix, then consider using normalizedPositiveX(Vector3d)
instead.
Reference: http://www.euclideanspace.com
dir
- will hold the direction of +XVector3d normalizedPositiveX(Vector3d dir)
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:
Matrix4d inv = new Matrix4d(this).transpose(); inv.transformDirection(dir.set(1, 0, 0));
Reference: http://www.euclideanspace.com
dir
- will hold the direction of +XVector3d positiveY(Vector3d dir)
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:
Matrix4d inv = new Matrix4d(this).invert(); inv.transformDirection(dir.set(0, 1, 0)).normalize();If
this
is already an orthogonal matrix, then consider using normalizedPositiveY(Vector3d)
instead.
Reference: http://www.euclideanspace.com
dir
- will hold the direction of +YVector3d normalizedPositiveY(Vector3d dir)
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:
Matrix4d inv = new Matrix4d(this).transpose(); inv.transformDirection(dir.set(0, 1, 0));
Reference: http://www.euclideanspace.com
dir
- will hold the direction of +YVector3d originAffine(Vector3d 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 originVector3d origin(Vector3d 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 originMatrix4d shadow(Vector4dc light, double a, double b, double c, double d, Matrix4d dest)
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 resultMatrix4d shadow(double lightX, double lightY, double lightZ, double lightW, double a, double b, double c, double d, Matrix4d dest)
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 resultMatrix4d shadow(Vector4dc light, Matrix4dc planeTransform, Matrix4d dest)
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 resultMatrix4d shadow(double lightX, double lightY, double lightZ, double lightW, Matrix4dc planeTransform, Matrix4d dest)
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 resultMatrix4d pick(double x, double y, double width, double height, int[] viewport, Matrix4d dest)
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()
true
iff this matrix is affine; false
otherwiseMatrix4d arcball(double radius, double centerX, double centerY, double centerZ, double angleX, double angleY, Matrix4d 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 resultMatrix4d arcball(double radius, Vector3dc center, double angleX, double angleY, Matrix4d 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 resultMatrix4d projectedGridRange(Matrix4dc projector, double sLower, double sUpper, Matrix4d 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 visibleMatrix4d perspectiveFrustumSlice(double near, double far, Matrix4d 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(double, double, double, double, Matrix4d)
,
frustum(double, double, double, double, double, double, Matrix4d)
Matrix4d orthoCrop(Matrix4dc view, Matrix4d 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 this
dest
- will hold the crop projection transformationMatrix4d transformAab(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, Vector3d outMin, Vector3d outMax)
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 boxMatrix4d transformAab(Vector3dc min, Vector3dc max, Vector3d outMin, Vector3d 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 boxMatrix4d lerp(Matrix4dc other, double t, Matrix4d 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 resultMatrix4d rotateTowards(Vector3dc direction, Vector3dc up, Matrix4d dest)
+Z
axis with direction
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 Matrix4d().lookAt(new Vector3d(), new Vector3d(dir).negate(), up).invertAffine(), dest)
direction
- the direction to rotate towardsup
- the up vectordest
- will hold the resultrotateTowards(double, double, double, double, double, double, Matrix4d)
Matrix4d rotateTowards(double dirX, double dirY, double dirZ, double upX, double upY, double upZ, Matrix4d 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 Matrix4d().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(Vector3dc, Vector3dc, Matrix4d)
Vector3d getEulerAnglesZYX(Vector3d 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(double, double, double, Matrix4d)
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).
Matrix4d m = ...; // <- matrix only representing rotation Matrix4d n = new Matrix4d(); n.rotateZYX(m.getEulerAnglesZYX(new Vector3d()));
Reference: http://nghiaho.com/
dest
- will hold the extracted Euler anglesCopyright © 2015–2016 JOML. All rights reserved.