public class Matrix4d extends Object implements Externalizable, Matrix4dc
m00 m10 m20 m30
m01 m11 m21 m31
m02 m12 m22 m32
m03 m13 m23 m33
CORNER_NXNYNZ, CORNER_NXNYPZ, CORNER_NXPYNZ, CORNER_NXPYPZ, CORNER_PXNYNZ, CORNER_PXNYPZ, CORNER_PXPYNZ, CORNER_PXPYPZ, PLANE_NX, PLANE_NY, PLANE_NZ, PLANE_PX, PLANE_PY, PLANE_PZ, PROPERTY_AFFINE, PROPERTY_IDENTITY, PROPERTY_ORTHONORMAL, PROPERTY_PERSPECTIVE, PROPERTY_TRANSLATION| Constructor and Description |
|---|
Matrix4d()
|
Matrix4d(DoubleBuffer buffer)
Create a new
Matrix4d by reading its 16 double components from the given DoubleBuffer
at the buffer's current position. |
Matrix4d(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)
Create a new 4x4 matrix using the supplied double values.
|
Matrix4d(Matrix3dc mat)
|
Matrix4d(Matrix4dc mat)
Create a new
Matrix4d and make it a copy of the given matrix. |
Matrix4d(Matrix4fc mat)
Create a new
Matrix4d and make it a copy of the given matrix. |
Matrix4d(Matrix4x3dc mat)
Create a new
Matrix4d and set its upper 4x3 submatrix to the given matrix mat
and all other elements to identity. |
Matrix4d(Matrix4x3fc mat)
Create a new
Matrix4d and set its upper 4x3 submatrix to the given matrix mat
and all other elements to identity. |
Matrix4d(Vector4d col0,
Vector4d col1,
Vector4d col2,
Vector4d col3)
Create a new
Matrix4d and initialize its four columns using the supplied vectors. |
| Modifier and Type | Method and Description |
|---|---|
Matrix4d |
_m00(double m00)
Set the value of the matrix element at column 0 and row 0 without updating the properties of the matrix.
|
Matrix4d |
_m01(double m01)
Set the value of the matrix element at column 0 and row 1 without updating the properties of the matrix.
|
Matrix4d |
_m02(double m02)
Set the value of the matrix element at column 0 and row 2 without updating the properties of the matrix.
|
Matrix4d |
_m03(double m03)
Set the value of the matrix element at column 0 and row 3 without updating the properties of the matrix.
|
Matrix4d |
_m10(double m10)
Set the value of the matrix element at column 1 and row 0 without updating the properties of the matrix.
|
Matrix4d |
_m11(double m11)
Set the value of the matrix element at column 1 and row 1 without updating the properties of the matrix.
|
Matrix4d |
_m12(double m12)
Set the value of the matrix element at column 1 and row 2 without updating the properties of the matrix.
|
Matrix4d |
_m13(double m13)
Set the value of the matrix element at column 1 and row 3 without updating the properties of the matrix.
|
Matrix4d |
_m20(double m20)
Set the value of the matrix element at column 2 and row 0 without updating the properties of the matrix.
|
Matrix4d |
_m21(double m21)
Set the value of the matrix element at column 2 and row 1 without updating the properties of the matrix.
|
Matrix4d |
_m22(double m22)
Set the value of the matrix element at column 2 and row 2 without updating the properties of the matrix.
|
Matrix4d |
_m23(double m23)
Set the value of the matrix element at column 2 and row 3 without updating the properties of the matrix.
|
Matrix4d |
_m30(double m30)
Set the value of the matrix element at column 3 and row 0 without updating the properties of the matrix.
|
Matrix4d |
_m31(double m31)
Set the value of the matrix element at column 3 and row 1 without updating the properties of the matrix.
|
Matrix4d |
_m32(double m32)
Set the value of the matrix element at column 3 and row 2 without updating the properties of the matrix.
|
Matrix4d |
_m33(double m33)
Set the value of the matrix element at column 3 and row 3 without updating the properties of the matrix.
|
Matrix4d |
add(Matrix4dc other)
Component-wise add
this and other. |
Matrix4d |
add(Matrix4dc other,
Matrix4d dest)
Component-wise add
this and other and store the result in dest. |
Matrix4d |
add4x3(Matrix4dc other)
Component-wise add the upper 4x3 submatrices of
this and other. |
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)
Component-wise add the upper 4x3 submatrices of
this and other. |
Matrix4d |
add4x3(Matrix4fc other,
Matrix4d dest)
Component-wise add the upper 4x3 submatrices of
this and other
and store the result in dest. |
Matrix4d |
affineSpan(Vector3d corner,
Vector3d xDir,
Vector3d yDir,
Vector3d zDir)
Compute the extents of the coordinate system before this
affine transformation was applied
and store the resulting corner coordinates in corner and the span vectors in
xDir, yDir and zDir. |
Matrix4d |
arcball(double radius,
double centerX,
double centerY,
double centerZ,
double angleX,
double angleY)
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. |
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)
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. |
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. |
Matrix4d |
assume(int properties)
Assume the given properties about this matrix.
|
Matrix4d |
billboardCylindrical(Vector3dc objPos,
Vector3dc targetPos,
Vector3dc up)
Set this matrix to a cylindrical billboard transformation that rotates the local +Z axis of a given object with position
objPos towards
a target position at targetPos while constraining a cylindrical rotation around the given up vector. |
Matrix4d |
billboardSpherical(Vector3dc objPos,
Vector3dc targetPos)
Set this matrix to a spherical billboard transformation that rotates the local +Z axis of a given object with position
objPos towards
a target position at targetPos using a shortest arc rotation by not preserving any up vector of the object. |
Matrix4d |
billboardSpherical(Vector3dc objPos,
Vector3dc targetPos,
Vector3dc up)
Set this matrix to a spherical billboard transformation that rotates the local +Z axis of a given object with position
objPos towards
a target position at targetPos. |
Matrix4d |
cofactor3x3()
Compute the cofactor matrix of the upper left 3x3 submatrix of
this. |
Matrix3d |
cofactor3x3(Matrix3d dest)
Compute the cofactor matrix of the upper left 3x3 submatrix of
this
and store it into dest. |
Matrix4d |
cofactor3x3(Matrix4d dest)
Compute the cofactor matrix of the upper left 3x3 submatrix of
this
and store it into 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 |
determineProperties()
Compute and set the matrix properties returned by
properties() based
on the current matrix element values. |
boolean |
equals(Matrix4dc m,
double delta)
Compare the matrix elements of
this matrix with the given matrix using the given delta
and return whether all of them are equal within a maximum difference of delta. |
boolean |
equals(Object obj) |
Matrix4d |
fma4x3(Matrix4dc other,
double otherFactor)
Component-wise add the upper 4x3 submatrices of
this and other
by first multiplying each component of other's 4x3 submatrix by otherFactor and
adding that result to this. |
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)
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. |
Matrix4d |
frustum(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Apply an arbitrary perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range to this matrix.
|
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. |
Matrix4d |
frustumAabb(Vector3d min,
Vector3d max)
Compute the axis-aligned bounding box of the frustum described by
this matrix and store the minimum corner
coordinates in the given min and the maximum corner coordinates in the given max vector. |
Vector3d |
frustumCorner(int corner,
Vector3d dest)
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)
Apply an arbitrary perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range to this matrix.
|
Matrix4d |
frustumLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Apply an arbitrary perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range to this matrix.
|
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. |
Planed |
frustumPlane(int which,
Planed plane)
Calculate a frustum plane of
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given plane. |
Vector4d |
frustumPlane(int plane,
Vector4d dest)
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 dest)
Obtain the direction of a ray starting at the center of the coordinate system and going
through the near frustum plane.
|
ByteBuffer |
get(ByteBuffer dest)
Store this matrix in column-major order into the supplied
ByteBuffer at the current
buffer position. |
double[] |
get(double[] dest)
Store this matrix into the supplied double array in column-major order.
|
double[] |
get(double[] dest,
int offset)
Store this matrix into the supplied double array in column-major order at the given offset.
|
DoubleBuffer |
get(DoubleBuffer dest)
Store this matrix in column-major order into the supplied
DoubleBuffer at the current
buffer position. |
float[] |
get(float[] dest)
Store the elements of this matrix as float values in column-major order into the supplied float array.
|
float[] |
get(float[] dest,
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 dest)
Store this matrix in column-major order into the supplied
FloatBuffer at the current
buffer position. |
ByteBuffer |
get(int index,
ByteBuffer dest)
Store this matrix in column-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index. |
DoubleBuffer |
get(int index,
DoubleBuffer dest)
Store this matrix in column-major order into the supplied
DoubleBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
get(int index,
FloatBuffer dest)
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 dest)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied ByteBuffer at the current
buffer position. |
DoubleBuffer |
get4x3Transposed(DoubleBuffer dest)
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 dest)
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 dest)
Store the upper 4x3 submatrix of
this matrix in row-major order into the supplied DoubleBuffer starting at the specified
absolute buffer position/index. |
Vector3d |
getColumn(int column,
Vector3d dest)
Get the first three components of the column at the given
column index, starting with 0. |
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 dest)
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 dest)
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. |
Vector3d |
getRow(int row,
Vector3d dest)
Get the first three components of the row at the given
row index, starting with 0. |
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 dest)
Store the transpose of this matrix in column-major order into the supplied
ByteBuffer at the current
buffer position. |
DoubleBuffer |
getTransposed(DoubleBuffer dest)
Store the transpose of this matrix in column-major order into the supplied
DoubleBuffer at the current
buffer position. |
ByteBuffer |
getTransposed(int index,
ByteBuffer dest)
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 dest)
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. |
int |
hashCode() |
Matrix4d |
identity()
Reset this matrix to the identity.
|
Matrix4d |
invert()
Invert this matrix.
|
Matrix4d |
invert(Matrix4d dest)
Invert
this matrix and store the result in dest. |
Matrix4d |
invertAffine()
Invert this matrix by assuming that it is an
affine transformation (i.e. |
Matrix4d |
invertAffine(Matrix4d dest)
Invert this matrix by assuming that it is an
affine transformation (i.e. |
Matrix4d |
invertFrustum()
If
this is an arbitrary perspective projection matrix obtained via one of the frustum() methods
or via setFrustum(),
then this method builds the inverse of this. |
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 |
invertOrtho()
Invert
this orthographic projection matrix. |
Matrix4d |
invertOrtho(Matrix4d dest)
Invert
this orthographic projection matrix and store the result into the given dest. |
Matrix4d |
invertPerspective()
If
this is a perspective projection matrix obtained via one of the perspective() methods
or via setPerspective(), that is, if this is a symmetrical perspective frustum transformation,
then this method builds the inverse of this. |
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. |
Matrix4d |
invertPerspectiveView(Matrix4x3dc 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 has unit scaling,
then this method builds the inverse of this * view and stores it into the given dest. |
boolean |
isAffine()
Determine whether this matrix describes an affine transformation.
|
Matrix4d |
lerp(Matrix4dc other,
double t)
Linearly interpolate
this and other using the given interpolation factor t
and store the result in this. |
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)
Apply a rotation transformation to this matrix to make
-z point along dir. |
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)
Apply a rotation transformation to this matrix to make
-z point along dir. |
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)
Apply a "lookat" transformation to this matrix for a right-handed coordinate system,
that aligns
-z with center - eye. |
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)
Apply a "lookat" transformation to this matrix for a right-handed coordinate system,
that aligns
-z with center - eye. |
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)
Apply a "lookat" transformation to this matrix for a left-handed coordinate system,
that aligns
+z with center - eye. |
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)
Apply a "lookat" transformation to this matrix for a left-handed coordinate system,
that aligns
+z with center - eye. |
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.
|
Matrix4d |
m00(double m00)
Set 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.
|
Matrix4d |
m01(double m01)
Set 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.
|
Matrix4d |
m02(double m02)
Set 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.
|
Matrix4d |
m03(double m03)
Set 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.
|
Matrix4d |
m10(double m10)
Set 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.
|
Matrix4d |
m11(double m11)
Set 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.
|
Matrix4d |
m12(double m12)
Set 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.
|
Matrix4d |
m13(double m13)
Set 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.
|
Matrix4d |
m20(double m20)
Set 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.
|
Matrix4d |
m21(double m21)
Set 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.
|
Matrix4d |
m22(double m22)
Set 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.
|
Matrix4d |
m23(double m23)
Set 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.
|
Matrix4d |
m30(double m30)
Set 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.
|
Matrix4d |
m31(double m31)
Set 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.
|
Matrix4d |
m32(double m32)
Set 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 |
m33(double m33)
Set the value of the matrix element at column 3 and row 3.
|
Matrix4d |
mul(Matrix3x2dc right)
Multiply this matrix by the supplied
right matrix and store the result in this. |
Matrix4d |
mul(Matrix3x2dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4d |
mul(Matrix3x2fc right)
Multiply this matrix by the supplied
right matrix and store the result in this. |
Matrix4d |
mul(Matrix3x2fc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4d |
mul(Matrix4dc right)
Multiply this matrix by the supplied
right matrix. |
Matrix4d |
mul(Matrix4dc right,
Matrix4d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4d |
mul(Matrix4f right)
Multiply this matrix by the supplied parameter matrix.
|
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 |
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)
Component-wise multiply the upper 4x3 submatrices of
this by other. |
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)
Multiply this matrix by the supplied
right matrix, both of which are assumed to be affine, and store the result in this. |
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)
Multiply this matrix by the supplied
right matrix, which is assumed to be affine, and store the result in this. |
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 |
mulComponentWise(Matrix4dc other)
Component-wise multiply
this by other. |
Matrix4d |
mulComponentWise(Matrix4dc other,
Matrix4d dest)
Component-wise multiply
this by other and store the result in dest. |
Matrix4d |
mulLocal(Matrix4dc left)
Pre-multiply this matrix by the supplied
left matrix and store the result in this. |
Matrix4d |
mulLocal(Matrix4dc left,
Matrix4d dest)
Pre-multiply this matrix by the supplied
left matrix and store the result in dest. |
Matrix4d |
mulLocalAffine(Matrix4dc left)
Pre-multiply this matrix by the supplied
left matrix, both of which are assumed to be affine, and store the result in this. |
Matrix4d |
mulLocalAffine(Matrix4dc left,
Matrix4d dest)
Pre-multiply this matrix by the supplied
left matrix, both of which are assumed to be affine, and store the result in dest. |
Matrix4d |
mulOrthoAffine(Matrix4dc view)
|
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 |
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. |
Matrix4d |
normal()
Compute a normal matrix from the upper left 3x3 submatrix of
this
and store it into the upper left 3x3 submatrix of this. |
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. |
Matrix4d |
normalize3x3()
Normalize the upper left 3x3 submatrix of this matrix.
|
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 dest)
Obtain the direction of
+X before the transformation represented by this orthogonal matrix is applied. |
Vector3d |
normalizedPositiveY(Vector3d dest)
Obtain the direction of
+Y before the transformation represented by this orthogonal matrix is applied. |
Vector3d |
normalizedPositiveZ(Vector3d dest)
Obtain the direction of
+Z before the transformation represented by this orthogonal matrix is applied. |
Matrix4d |
obliqueZ(double a,
double b)
Apply an oblique projection transformation to this matrix with the given values for
a and
b. |
Matrix4d |
obliqueZ(double a,
double b,
Matrix4d dest)
Apply an oblique projection transformation to this matrix with the given values for
a and
b and store the result in dest. |
Vector3d |
origin(Vector3d dest)
Obtain the position that gets transformed to the origin by
this matrix. |
Vector3d |
originAffine(Vector3d dest)
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)
Apply an orthographic projection transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4d |
ortho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Apply an orthographic projection transformation for a right-handed coordinate system
using the given NDC z range to this 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)
Apply an orthographic projection transformation for a right-handed coordinate system to this matrix.
|
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)
Apply an orthographic projection transformation for a left-handed coordinate system to this matrix.
|
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)
Apply an orthographic projection transformation for a left-handed coordiante system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4d |
orthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Apply an orthographic projection transformation for a left-handed coordiante system
using the given NDC z range to this matrix.
|
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)
Apply a symmetric orthographic projection transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4d |
orthoSymmetric(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne)
Apply a symmetric orthographic projection transformation for a right-handed coordinate system
using the given NDC z range to this matrix.
|
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)
Apply a symmetric orthographic projection transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4d |
orthoSymmetricLH(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne)
Apply a symmetric orthographic projection transformation for a left-handed coordinate system
using the given NDC z range to this matrix.
|
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)
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. |
Matrix4d |
perspective(double fovy,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne)
Apply a symmetric perspective projection frustum transformation using for a right-handed coordinate system
the given NDC z range to this matrix.
|
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)
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. |
Matrix4d |
perspectiveLH(double fovy,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne)
Apply a symmetric perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range to this matrix.
|
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. |
Matrix4d |
perspectiveOffCenter(double fovy,
double offAngleX,
double offAngleY,
double aspect,
double zNear,
double zFar)
Apply an asymmetric off-center perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4d |
perspectiveOffCenter(double fovy,
double offAngleX,
double offAngleY,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne)
Apply an asymmetric off-center perspective projection frustum transformation using for a right-handed coordinate system
the given NDC z range to this matrix.
|
Matrix4d |
perspectiveOffCenter(double fovy,
double offAngleX,
double offAngleY,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4d dest)
Apply an asymmetric off-center perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range to this matrix and store the result in
dest. |
Matrix4d |
perspectiveOffCenter(double fovy,
double offAngleX,
double offAngleY,
double aspect,
double zNear,
double zFar,
Matrix4d dest)
Apply an asymmetric off-center perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix and store the result in dest. |
Vector3d |
perspectiveOrigin(Vector3d dest)
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 |
perspectiveRect(double width,
double height,
double zNear,
double zFar)
Apply a symmetric perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1] to this matrix. |
Matrix4d |
perspectiveRect(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne)
Apply a symmetric perspective projection frustum transformation using for a right-handed coordinate system
the given NDC z range to this matrix.
|
Matrix4d |
perspectiveRect(double width,
double height,
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 |
perspectiveRect(double width,
double height,
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. |
Matrix4d |
pick(double x,
double y,
double width,
double height,
int[] viewport)
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. |
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 dest)
Obtain the direction of
+X before the transformation represented by this matrix is applied. |
Vector3d |
positiveY(Vector3d dest)
Obtain the direction of
+Y before the transformation represented by this matrix is applied. |
Vector3d |
positiveZ(Vector3d dest)
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 dest)
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 dest)
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 dest)
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 dest)
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. |
static void |
projViewFromRectangle(Vector3d eye,
Vector3d p,
Vector3d x,
Vector3d y,
double nearFarDist,
boolean zeroToOne,
Matrix4d projDest,
Matrix4d viewDest)
Create a view and projection matrix from a given
eye position, a given bottom left corner position p of the near plane rectangle
and the extents of the near plane rectangle along its local x and y axes, and store the resulting matrices
in projDest and viewDest. |
int |
properties()
Return the assumed properties of this matrix.
|
void |
readExternal(ObjectInput in) |
Matrix4d |
reflect(double a,
double b,
double c,
double d)
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. |
Matrix4d |
reflect(double nx,
double ny,
double nz,
double px,
double py,
double pz)
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.
|
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)
Apply a mirror/reflection transformation to this matrix that reflects about a plane
specified via the plane orientation and a point on the plane.
|
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)
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.
|
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 |
reflection(double a,
double b,
double c,
double d)
Set this matrix to a mirror/reflection transformation that reflects about the given plane
specified via the equation
x*a + y*b + z*c + d = 0. |
Matrix4d |
reflection(double nx,
double ny,
double nz,
double px,
double py,
double pz)
Set this matrix to a mirror/reflection transformation that reflects about the given plane
specified via the plane normal and a point on the plane.
|
Matrix4d |
reflection(Quaterniondc orientation,
Vector3dc point)
Set this matrix to a mirror/reflection transformation that reflects about a plane
specified via the plane orientation and a point on the plane.
|
Matrix4d |
reflection(Vector3dc normal,
Vector3dc point)
Set this matrix to a mirror/reflection transformation that reflects about the given plane
specified via the plane normal and a point on the plane.
|
Matrix4d |
rotate(AxisAngle4d axisAngle)
Apply a rotation transformation, rotating about the given
AxisAngle4d, to this matrix. |
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)
Apply a rotation transformation, rotating about the given
AxisAngle4f, to this matrix. |
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)
Apply rotation to this matrix by rotating the given amount of radians
about the given axis specified as x, y and z components.
|
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)
Apply a rotation transformation, rotating the given radians about the specified axis, to this matrix.
|
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)
Apply a rotation transformation, rotating the given radians about the specified axis, to this matrix.
|
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)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix. |
Matrix4d |
rotate(Quaterniondc quat,
Matrix4d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix and store
the result in dest. |
Matrix4d |
rotate(Quaternionfc quat)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix. |
Matrix4d |
rotate(Quaternionfc quat,
Matrix4d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix and store
the result in dest. |
Matrix4d |
rotateAffine(double ang,
double x,
double y,
double z)
Apply rotation to this
affine matrix by rotating the given amount of radians
about the specified (x, y, z) axis. |
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)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix. |
Matrix4d |
rotateAffine(Quaterniondc quat,
Matrix4d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this affine matrix and store
the result in dest. |
Matrix4d |
rotateAffine(Quaternionfc quat)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix. |
Matrix4d |
rotateAffine(Quaternionfc quat,
Matrix4d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this affine matrix and store
the result in dest. |
Matrix4d |
rotateAffineXYZ(double angleX,
double angleY,
double angleZ)
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. |
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)
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. |
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)
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. |
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)
Apply the rotation transformation of the given
Quaterniondc to this matrix while using (ox, oy, oz) as the rotation origin. |
Matrix4d |
rotateAround(Quaterniondc quat,
double ox,
double oy,
double oz,
Matrix4d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix while using (ox, oy, oz) as the rotation origin,
and store the result in dest. |
Matrix4d |
rotateAroundAffine(Quaterniondc quat,
double ox,
double oy,
double oz,
Matrix4d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this affine
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)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix while using (ox, oy, oz)
as the rotation origin. |
Matrix4d |
rotateAroundLocal(Quaterniondc quat,
double ox,
double oy,
double oz,
Matrix4d dest)
Pre-multiply the rotation - and possibly scaling - 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)
Pre-multiply a rotation to this matrix by rotating the given amount of radians
about the specified
(x, y, z) axis. |
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)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix. |
Matrix4d |
rotateLocal(Quaterniondc quat,
Matrix4d dest)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix and store
the result in dest. |
Matrix4d |
rotateLocal(Quaternionfc quat)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix. |
Matrix4d |
rotateLocal(Quaternionfc quat,
Matrix4d dest)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix and store
the result in dest. |
Matrix4d |
rotateLocalX(double ang)
Pre-multiply a rotation to this matrix by rotating the given amount of radians about the X axis.
|
Matrix4d |
rotateLocalX(double ang,
Matrix4d dest)
Pre-multiply a rotation around the X axis to this matrix by rotating the given amount of radians
about the X axis and store the result in
dest. |
Matrix4d |
rotateLocalY(double ang)
Pre-multiply a rotation to this matrix by rotating the given amount of radians about the Y axis.
|
Matrix4d |
rotateLocalY(double ang,
Matrix4d dest)
Pre-multiply a rotation around the Y axis to this matrix by rotating the given amount of radians
about the Y axis and store the result in
dest. |
Matrix4d |
rotateLocalZ(double ang)
Pre-multiply a rotation to this matrix by rotating the given amount of radians about the Z axis.
|
Matrix4d |
rotateLocalZ(double ang,
Matrix4d dest)
Pre-multiply a rotation around the Z axis to this matrix by rotating the given amount of radians
about the Z axis and store the result in
dest. |
Matrix4d |
rotateTowards(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the local
+Z axis with (dirX, dirY, dirZ). |
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)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the local
+Z axis with direction. |
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 |
rotateTowardsXY(double dirX,
double dirY)
Apply rotation about the Z axis to align the local
+X towards (dirX, dirY). |
Matrix4d |
rotateTowardsXY(double dirX,
double dirY,
Matrix4d dest)
Apply rotation about the Z axis to align the local
+X towards (dirX, dirY) 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 - and possibly scaling - 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 - and possibly scaling - 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)
Apply rotation about the X axis to this matrix by rotating the given amount of radians.
|
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)
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. |
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 |
rotateXYZ(Vector3d angles)
Apply rotation of
angles.x radians about the X axis, followed by a rotation of angles.y radians about the Y axis and
followed by a rotation of angles.z radians about the Z axis. |
Matrix4d |
rotateY(double ang)
Apply rotation about the Y axis to this matrix by rotating the given amount of radians.
|
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)
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. |
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 |
rotateYXZ(Vector3d angles)
Apply rotation of
angles.y radians about the Y axis, followed by a rotation of angles.x radians about the X axis and
followed by a rotation of angles.z radians about the Z axis. |
Matrix4d |
rotateZ(double ang)
Apply rotation about the Z axis to this matrix by rotating the given amount of radians.
|
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)
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. |
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 |
rotateZYX(Vector3d angles)
Apply rotation of
angles.z radians about the Z axis, followed by a rotation of angles.y radians about the Y axis and
followed by a rotation of angles.x radians about the X axis. |
Matrix4d |
rotation(AxisAngle4d angleAxis)
Set this matrix to a rotation transformation using the given
AxisAngle4d. |
Matrix4d |
rotation(AxisAngle4f angleAxis)
Set this matrix to a rotation transformation using the given
AxisAngle4f. |
Matrix4d |
rotation(double angle,
double x,
double y,
double z)
Set this matrix to a rotation matrix which rotates the given radians about a given axis.
|
Matrix4d |
rotation(double angle,
Vector3dc axis)
Set this matrix to a rotation matrix which rotates the given radians about a given axis.
|
Matrix4d |
rotation(double angle,
Vector3fc axis)
Set this matrix to a rotation matrix which rotates the given radians about a given axis.
|
Matrix4d |
rotation(Quaterniondc quat)
Set this matrix to the rotation - and possibly scaling - transformation of the given
Quaterniondc. |
Matrix4d |
rotation(Quaternionfc quat)
Set this matrix to the rotation - and possibly scaling - transformation of the given
Quaternionfc. |
Matrix4d |
rotationAround(Quaterniondc quat,
double ox,
double oy,
double oz)
Set this matrix to a transformation composed of a rotation of the specified
Quaterniondc while using (ox, oy, oz) as the rotation origin. |
Matrix4d |
rotationTowards(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ)
Set this matrix to a model transformation for a right-handed coordinate system,
that aligns the local
-z axis with dir. |
Matrix4d |
rotationTowards(Vector3dc dir,
Vector3dc up)
Set this matrix to a model transformation for a right-handed coordinate system,
that aligns the local
-z axis with dir. |
Matrix4d |
rotationTowardsXY(double dirX,
double dirY)
Set this matrix to a rotation transformation about the Z axis to align the local
+X towards (dirX, dirY). |
Matrix4d |
rotationX(double ang)
Set this matrix to a rotation transformation about the X axis.
|
Matrix4d |
rotationXYZ(double angleX,
double angleY,
double angleZ)
Set this matrix to a 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. |
Matrix4d |
rotationY(double ang)
Set this matrix to a rotation transformation about the Y axis.
|
Matrix4d |
rotationYXZ(double angleY,
double angleX,
double angleZ)
Set this matrix to a 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. |
Matrix4d |
rotationZ(double ang)
Set this matrix to a rotation transformation about the Z axis.
|
Matrix4d |
rotationZYX(double angleZ,
double angleY,
double angleX)
Set this matrix to a 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. |
Matrix4d |
scale(double xyz)
Apply scaling to this matrix by uniformly scaling all base axes by the given xyz factor.
|
Matrix4d |
scale(double x,
double y,
double z)
Apply scaling to
this matrix by scaling the base axes by the given x,
y and z factors. |
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)
Apply scaling to this matrix by scaling the base axes by the given
xyz.x,
xyz.y and xyz.z factors, respectively. |
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 factor,
double ox,
double oy,
double oz)
Apply scaling to this matrix by scaling all three base axes by the given
factor
while using (ox, oy, oz) as the scaling origin. |
Matrix4d |
scaleAround(double sx,
double sy,
double sz,
double ox,
double oy,
double oz)
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. |
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 factor,
double ox,
double oy,
double oz)
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. |
Matrix4d |
scaleAroundLocal(double sx,
double sy,
double sz,
double ox,
double oy,
double oz)
Pre-multiply 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. |
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 xyz)
Pre-multiply scaling to this matrix by scaling the base axes by the given xyz factor.
|
Matrix4d |
scaleLocal(double x,
double y,
double z)
Pre-multiply scaling to this matrix by scaling the base axes by the given x,
y and z factors.
|
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 |
scaleLocal(double xyz,
Matrix4d dest)
Pre-multiply scaling to
this matrix by scaling all base axes by the given xyz factor,
and store the result in dest. |
Matrix4d |
scaleXY(double x,
double y)
Apply scaling to this matrix by scaling the X axis by
x and the Y axis by y. |
Matrix4d |
scaleXY(double x,
double y,
Matrix4d dest)
Apply scaling to this matrix by by scaling the X axis by
x and the Y axis by y
and store the result in dest. |
Matrix4d |
scaling(double factor)
Set this matrix to be a simple scale matrix, which scales all axes uniformly by the given factor.
|
Matrix4d |
scaling(double x,
double y,
double z)
Set this matrix to be a simple scale matrix.
|
Matrix4d |
scaling(Vector3dc xyz)
Set this matrix to be a simple scale matrix which scales the base axes by
xyz.x, xyz.y and xyz.z, respectively. |
Matrix4d |
set(AxisAngle4d axisAngle)
Set this matrix to be equivalent to the rotation specified by the given
AxisAngle4d. |
Matrix4d |
set(AxisAngle4f axisAngle)
Set this matrix to be equivalent to the rotation specified by the given
AxisAngle4f. |
Matrix4d |
set(ByteBuffer buffer)
Set the values of this matrix by reading 16 double values from the given
ByteBuffer in column-major order,
starting at its current position. |
Matrix4d |
set(double[] m)
Set the values in the matrix using a double array that contains the matrix elements in column-major order.
|
Matrix4d |
set(double[] m,
int off)
Set the values in the matrix using a double array that contains the matrix elements in column-major order.
|
Matrix4d |
set(DoubleBuffer buffer)
Set the values of this matrix by reading 16 double values from the given
DoubleBuffer in column-major order,
starting at its current position. |
Matrix4d |
set(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)
Set the values within this matrix to the supplied double values.
|
Matrix4d |
set(float[] m)
Set the values in the matrix using a float array that contains the matrix elements in column-major order.
|
Matrix4d |
set(float[] m,
int off)
Set the values in the matrix using a float array that contains the matrix elements in column-major order.
|
Matrix4d |
set(FloatBuffer buffer)
Set the values of this matrix by reading 16 float values from the given
FloatBuffer in column-major order,
starting at its current position. |
Matrix4d |
set(Matrix3dc mat)
|
Matrix4d |
set(Matrix4dc m)
Store the values of the given matrix
m into this matrix. |
Matrix4d |
set(Matrix4fc m)
Store the values of the given matrix
m into this matrix. |
Matrix4d |
set(Matrix4x3dc m)
Store the values of the given matrix
m into this matrix
and set the other matrix elements to identity. |
Matrix4d |
set(Matrix4x3fc m)
Store the values of the given matrix
m into this matrix
and set the other matrix elements to identity. |
Matrix4d |
set(Quaterniondc q)
Set this matrix to be equivalent to the rotation - and possibly scaling - specified by the given
Quaterniondc. |
Matrix4d |
set(Quaternionfc q)
Set this matrix to be equivalent to the rotation - and possibly scaling - specified by the given
Quaternionfc. |
Matrix4d |
set(Vector4d col0,
Vector4d col1,
Vector4d col2,
Vector4d col3)
Set the four columns of this matrix to the supplied vectors, respectively.
|
Matrix4d |
set3x3(Matrix3dc mat)
|
Matrix4d |
set3x3(Matrix4dc mat)
|
Matrix4d |
set4x3(Matrix4dc mat)
|
Matrix4d |
set4x3(Matrix4x3dc mat)
Set the upper 4x3 submatrix of this
Matrix4d to the given Matrix4x3dc
and don't change the other elements. |
Matrix4d |
set4x3(Matrix4x3fc mat)
Set the upper 4x3 submatrix of this
Matrix4d to the given Matrix4x3fc
and don't change the other elements. |
Matrix4d |
setColumn(int column,
Vector4dc src)
Set the column at the given
column index, starting with 0. |
Matrix4d |
setFloats(ByteBuffer buffer)
Set the values of this matrix by reading 16 float values from the given
ByteBuffer in column-major order,
starting at its current position. |
Matrix4d |
setFromIntrinsic(double alphaX,
double alphaY,
double gamma,
double u0,
double v0,
int imgWidth,
int imgHeight,
double near,
double far)
Set this matrix to represent a perspective projection equivalent to the given intrinsic camera calibration parameters.
|
Matrix4d |
setFrustum(double left,
double right,
double bottom,
double top,
double zNear,
double zFar)
Set this matrix to be an arbitrary perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setFrustum(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be an arbitrary perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range.
|
Matrix4d |
setFrustumLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar)
Set this matrix to be an arbitrary perspective projection frustum transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setFrustumLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be an arbitrary perspective projection frustum transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setLookAlong(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ)
Set this matrix to a rotation transformation to make
-z
point along dir. |
Matrix4d |
setLookAlong(Vector3dc dir,
Vector3dc up)
Set this matrix to a rotation transformation to make
-z
point along dir. |
Matrix4d |
setLookAt(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ)
Set this matrix to be a "lookat" transformation for a right-handed coordinate system,
that aligns
-z with center - eye. |
Matrix4d |
setLookAt(Vector3dc eye,
Vector3dc center,
Vector3dc up)
Set this matrix to be a "lookat" transformation for a right-handed coordinate system, that aligns
-z with center - eye. |
Matrix4d |
setLookAtLH(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ)
Set this matrix to be a "lookat" transformation for a left-handed coordinate system,
that aligns
+z with center - eye. |
Matrix4d |
setLookAtLH(Vector3dc eye,
Vector3dc center,
Vector3dc up)
Set this matrix to be a "lookat" transformation for a left-handed coordinate system, that aligns
+z with center - eye. |
Matrix4d |
setOrtho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar)
Set this matrix to be an orthographic projection transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setOrtho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be an orthographic projection transformation for a right-handed coordinate system
using the given NDC z range.
|
Matrix4d |
setOrtho2D(double left,
double right,
double bottom,
double top)
Set this matrix to be an orthographic projection transformation for a right-handed coordinate system.
|
Matrix4d |
setOrtho2DLH(double left,
double right,
double bottom,
double top)
Set this matrix to be an orthographic projection transformation for a left-handed coordinate system.
|
Matrix4d |
setOrthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar)
Set this matrix to be an orthographic projection transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setOrthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be an orthographic projection transformation for a left-handed coordinate system
using the given NDC z range.
|
Matrix4d |
setOrthoSymmetric(double width,
double height,
double zNear,
double zFar)
Set this matrix to be a symmetric orthographic projection transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setOrthoSymmetric(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be a symmetric orthographic projection transformation for a right-handed coordinate system
using the given NDC z range.
|
Matrix4d |
setOrthoSymmetricLH(double width,
double height,
double zNear,
double zFar)
Set this matrix to be a symmetric orthographic projection transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setOrthoSymmetricLH(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be a symmetric orthographic projection transformation for a left-handed coordinate system using the given NDC z range.
|
Matrix4d |
setPerspective(double fovy,
double aspect,
double zNear,
double zFar)
Set this matrix to be a symmetric perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setPerspective(double fovy,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be a symmetric perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range.
|
Matrix4d |
setPerspectiveLH(double fovy,
double aspect,
double zNear,
double zFar)
Set this matrix to be a symmetric perspective projection frustum transformation for a left-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setPerspectiveLH(double fovy,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be a symmetric perspective projection frustum transformation for a left-handed coordinate system
using the given NDC z range of
[-1..+1]. |
Matrix4d |
setPerspectiveOffCenter(double fovy,
double offAngleX,
double offAngleY,
double aspect,
double zNear,
double zFar)
Set this matrix to be an asymmetric off-center perspective projection frustum transformation for a right-handed
coordinate system using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setPerspectiveOffCenter(double fovy,
double offAngleX,
double offAngleY,
double aspect,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be an asymmetric off-center perspective projection frustum transformation for a right-handed
coordinate system using the given NDC z range.
|
Matrix4d |
setPerspectiveRect(double width,
double height,
double zNear,
double zFar)
Set this matrix to be a symmetric perspective projection frustum transformation for a right-handed coordinate system
using OpenGL's NDC z range of
[-1..+1]. |
Matrix4d |
setPerspectiveRect(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne)
Set this matrix to be a symmetric perspective projection frustum transformation for a right-handed coordinate system
using the given NDC z range.
|
Matrix4d |
setRotationXYZ(double angleX,
double angleY,
double angleZ)
Set only the upper left 3x3 submatrix of this matrix to a 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. |
Matrix4d |
setRotationYXZ(double angleY,
double angleX,
double angleZ)
Set only the upper left 3x3 submatrix of this matrix to a 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. |
Matrix4d |
setRotationZYX(double angleZ,
double angleY,
double angleX)
Set only the upper left 3x3 submatrix of this matrix to a 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. |
Matrix4d |
setRow(int row,
Vector4dc src)
Set the row at the given
row index, starting with 0. |
Matrix4d |
setTranslation(double x,
double y,
double z)
Set only the translation components
(m30, m31, m32) of this matrix to the given values (x, y, z). |
Matrix4d |
setTranslation(Vector3dc xyz)
Set only the translation components
(m30, m31, m32) of this matrix to the given values (xyz.x, xyz.y, xyz.z). |
Matrix4d |
shadow(double lightX,
double lightY,
double lightZ,
double lightW,
double a,
double b,
double c,
double d)
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). |
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)
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). |
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)
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. |
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 |
shadow(Vector4d light,
Matrix4d planeTransform)
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. |
Matrix4d |
sub(Matrix4dc subtrahend)
Component-wise subtract
subtrahend from this. |
Matrix4d |
sub(Matrix4dc subtrahend,
Matrix4d dest)
Component-wise subtract
subtrahend from this and store the result in dest. |
Matrix4d |
sub4x3(Matrix4dc subtrahend)
Component-wise subtract the upper 4x3 submatrices of
subtrahend from this. |
Matrix4d |
sub4x3(Matrix4dc subtrahend,
Matrix4d dest)
Component-wise subtract the upper 4x3 submatrices of
subtrahend from this
and store the result in dest. |
Matrix4d |
swap(Matrix4d other)
Exchange the values of
this matrix with the given other matrix. |
boolean |
testAab(double minX,
double minY,
double minZ,
double maxX,
double maxY,
double maxZ)
Test whether the given axis-aligned box is partly or completely within or outside of the frustum defined by
this matrix. |
boolean |
testPoint(double x,
double y,
double z)
Test whether the given point
(x, y, z) is within the frustum defined by this matrix. |
boolean |
testSphere(double x,
double y,
double z,
double r)
Test whether the given sphere is partly or completely within or outside of the frustum defined by
this matrix. |
String |
toString()
Return a string representation of this matrix.
|
String |
toString(NumberFormat formatter)
Return a string representation of this matrix by formatting the matrix elements with the given
NumberFormat. |
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. |
Vector4d |
transformAffine(Vector4d dest)
Transform/multiply the given 4D-vector by assuming that
this matrix represents an affine transformation
(i.e. |
Vector4d |
transformAffine(Vector4dc v,
Vector4d dest)
Transform/multiply the given 4D-vector by assuming that
this matrix represents an affine transformation
(i.e. |
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. |
Vector3f |
transformDirection(double x,
double y,
double z,
Vector3f dest) |
Vector3d |
transformDirection(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 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. |
Vector3f |
transformDirection(Vector3f dest)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=0, by
this matrix and store the result in that vector.
|
Vector3f |
transformDirection(Vector3fc v,
Vector3f dest)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=0, by
this matrix and store the result in
dest. |
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 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 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)
Apply a translation to this matrix by translating by the given number of
units in x, y and z.
|
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)
Apply a translation to this matrix by translating by the given number of
units in x, y and z.
|
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)
Apply a translation to this matrix by translating by the given number of
units in x, y and z.
|
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)
Pre-multiply a translation to this matrix by translating by the given number of
units in x, y and z.
|
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)
Pre-multiply a translation to this matrix by translating by the given number of
units in x, y and z.
|
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)
Pre-multiply a translation to this matrix by translating by the given number of
units in x, y and z.
|
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 |
translation(double x,
double y,
double z)
Set this matrix to be a simple translation matrix.
|
Matrix4d |
translation(Vector3dc offset)
Set this matrix to be a simple translation matrix.
|
Matrix4d |
translation(Vector3fc offset)
Set this matrix to be a simple translation matrix.
|
Matrix4d |
translationRotate(double tx,
double ty,
double tz,
double qx,
double qy,
double qz,
double qw)
Set
this matrix to T * R, where T is a translation by the given (tx, ty, tz) and
R is a rotation - and possibly scaling - transformation specified by the quaternion (qx, qy, qz, qw). |
Matrix4d |
translationRotate(double tx,
double ty,
double tz,
Quaterniondc quat)
Set
this matrix to T * R, where T is a translation by the given (tx, ty, tz) and
R is a rotation - and possibly scaling - transformation specified by the given quaternion. |
Matrix4d |
translationRotateScale(double tx,
double ty,
double tz,
double qx,
double qy,
double qz,
double qw,
double scale)
Set
this matrix to T * R * S, where T is a translation by the given (tx, ty, tz),
R is a rotation transformation specified by the quaternion (qx, qy, qz, qw), and S is a scaling transformation
which scales all three axes by scale. |
Matrix4d |
translationRotateScale(double tx,
double ty,
double tz,
double qx,
double qy,
double qz,
double qw,
double sx,
double sy,
double sz)
Set
this matrix to T * R * S, where T is a translation by the given (tx, ty, tz),
R is a rotation transformation specified by the quaternion (qx, qy, qz, qw), and S is a scaling transformation
which scales the three axes x, y and z by (sx, sy, sz). |
Matrix4d |
translationRotateScale(Vector3dc translation,
Quaterniondc quat,
double scale)
Set
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale. |
Matrix4d |
translationRotateScale(Vector3dc translation,
Quaterniondc quat,
Vector3dc scale)
Set
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale. |
Matrix4d |
translationRotateScale(Vector3fc translation,
Quaternionfc quat,
double scale)
Set
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale. |
Matrix4d |
translationRotateScale(Vector3fc translation,
Quaternionfc quat,
Vector3fc scale)
Set
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale. |
Matrix4d |
translationRotateScaleInvert(double tx,
double ty,
double tz,
double qx,
double qy,
double qz,
double qw,
double sx,
double sy,
double sz)
Set
this matrix to (T * R * S)-1, where T is a translation by the given (tx, ty, tz),
R is a rotation transformation specified by the quaternion (qx, qy, qz, qw), and S is a scaling transformation
which scales the three axes x, y and z by (sx, sy, sz). |
Matrix4d |
translationRotateScaleInvert(Vector3dc translation,
Quaterniondc quat,
double scale)
Set
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale. |
Matrix4d |
translationRotateScaleInvert(Vector3dc translation,
Quaterniondc quat,
Vector3dc scale)
Set
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale. |
Matrix4d |
translationRotateScaleInvert(Vector3fc translation,
Quaternionfc quat,
double scale)
Set
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale. |
Matrix4d |
translationRotateScaleInvert(Vector3fc translation,
Quaternionfc quat,
Vector3fc scale)
Set
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale. |
Matrix4d |
translationRotateScaleMulAffine(double tx,
double ty,
double tz,
double qx,
double qy,
double qz,
double qw,
double sx,
double sy,
double sz,
Matrix4d m)
Set
this matrix to T * R * S * M, where T is a translation by the given (tx, ty, tz),
R is a rotation - and possibly scaling - transformation specified by the quaternion (qx, qy, qz, qw), S is a scaling transformation
which scales the three axes x, y and z by (sx, sy, sz) and M is an affine matrix. |
Matrix4d |
translationRotateScaleMulAffine(Vector3fc translation,
Quaterniondc quat,
Vector3fc scale,
Matrix4d m)
Set
this matrix to T * R * S * M, where T is the given translation,
R is a rotation - and possibly scaling - transformation specified by the given quaternion, S is a scaling transformation
which scales the axes by scale and M is an affine matrix. |
Matrix4d |
translationRotateTowards(double posX,
double posY,
double posZ,
double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ)
Set this matrix to a model transformation for a right-handed coordinate system,
that translates to the given
(posX, posY, posZ) and aligns the local -z
axis with (dirX, dirY, dirZ). |
Matrix4d |
translationRotateTowards(Vector3dc pos,
Vector3dc dir,
Vector3dc up)
Set this matrix to a model transformation for a right-handed coordinate system,
that translates to the given
pos and aligns the local -z
axis with dir. |
Matrix4d |
transpose()
Transpose this matrix.
|
Matrix4d |
transpose(Matrix4d dest)
Transpose
this matrix and store the result into dest. |
Matrix4d |
transpose3x3()
Transpose only the upper left 3x3 submatrix of this matrix.
|
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. |
Matrix4d |
trapezoidCrop(double p0x,
double p0y,
double p1x,
double p1y,
double p2x,
double p2y,
double p3x,
double p3y)
Set
this matrix to a perspective transformation that maps the trapezoid spanned by the four corner coordinates
(p0x, p0y), (p1x, p1y), (p2x, p2y) and (p3x, p3y) to the unit square [(-1, -1)..(+1, +1)]. |
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. |
Matrix4d |
withLookAtUp(double upX,
double upY,
double upZ)
Apply a transformation to this matrix to ensure that the local Y axis (as obtained by
positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3d)) and the
given vector (upX, upY, upZ). |
Matrix4d |
withLookAtUp(double upX,
double upY,
double upZ,
Matrix4d dest)
Apply a transformation to this matrix to ensure that the local Y axis (as obtained by
Matrix4dc.positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by Matrix4dc.positiveZ(Vector3d)) and the
given vector (upX, upY, upZ), and store the result in dest. |
Matrix4d |
withLookAtUp(Vector3dc up)
Apply a transformation to this matrix to ensure that the local Y axis (as obtained by
positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3d)) and the
given vector up. |
Matrix4d |
withLookAtUp(Vector3dc up,
Matrix4d dest)
Apply a transformation to this matrix to ensure that the local Y axis (as obtained by
Matrix4dc.positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by Matrix4dc.positiveZ(Vector3d)) and the
given vector up, and store the result in dest. |
void |
writeExternal(ObjectOutput out) |
Matrix4d |
zero()
Set all the values within this matrix to 0.
|
public Matrix4d()
public Matrix4d(Matrix4dc mat)
Matrix4d and make it a copy of the given matrix.mat - the Matrix4dc to copy the values frompublic Matrix4d(Matrix4fc mat)
Matrix4d and make it a copy of the given matrix.mat - the Matrix4fc to copy the values frompublic Matrix4d(Matrix4x3dc mat)
Matrix4d and set its upper 4x3 submatrix to the given matrix mat
and all other elements to identity.mat - the Matrix4x3dc to copy the values frompublic Matrix4d(Matrix4x3fc mat)
Matrix4d and set its upper 4x3 submatrix to the given matrix mat
and all other elements to identity.mat - the Matrix4x3fc to copy the values frompublic Matrix4d(Matrix3dc mat)
Matrix4d by setting its uppper left 3x3 submatrix to the values of the given Matrix3dc
and the rest to identity.mat - the Matrix3dcpublic Matrix4d(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)
The matrix layout will be:
m00, m10, m20, m30
m01, m11, m21, m31
m02, m12, m22, m32
m03, m13, m23, m33
m00 - the value of m00m01 - the value of m01m02 - the value of m02m03 - the value of m03m10 - the value of m10m11 - the value of m11m12 - the value of m12m13 - the value of m13m20 - the value of m20m21 - the value of m21m22 - the value of m22m23 - the value of m23m30 - the value of m30m31 - the value of m31m32 - the value of m32m33 - the value of m33public Matrix4d(DoubleBuffer buffer)
Matrix4d by reading its 16 double components from the given DoubleBuffer
at the buffer's current position.
That DoubleBuffer is expected to hold the values in column-major order.
The buffer's position will not be changed by this method.
buffer - the DoubleBuffer to read the matrix values frompublic Matrix4d assume(int properties)
Use one or multiple of 0, Matrix4dc.PROPERTY_IDENTITY,
Matrix4dc.PROPERTY_TRANSLATION, Matrix4dc.PROPERTY_AFFINE,
Matrix4dc.PROPERTY_PERSPECTIVE, Matrix4fc.PROPERTY_ORTHONORMAL.
properties - bitset of the properties to assume about this matrixpublic Matrix4d determineProperties()
properties() based
on the current matrix element values.public int properties()
Matrix4dcMatrix4dc.PROPERTY_IDENTITY, Matrix4dc.PROPERTY_AFFINE,
Matrix4dc.PROPERTY_TRANSLATION and Matrix4dc.PROPERTY_PERSPECTIVE.properties in interface Matrix4dcpublic double m00()
Matrix4dcpublic double m01()
Matrix4dcpublic double m02()
Matrix4dcpublic double m03()
Matrix4dcpublic double m10()
Matrix4dcpublic double m11()
Matrix4dcpublic double m12()
Matrix4dcpublic double m13()
Matrix4dcpublic double m20()
Matrix4dcpublic double m21()
Matrix4dcpublic double m22()
Matrix4dcpublic double m23()
Matrix4dcpublic double m30()
Matrix4dcpublic double m31()
Matrix4dcpublic double m32()
Matrix4dcpublic double m33()
Matrix4dcpublic Matrix4d m00(double m00)
m00 - the new valuepublic Matrix4d m01(double m01)
m01 - the new valuepublic Matrix4d m02(double m02)
m02 - the new valuepublic Matrix4d m03(double m03)
m03 - the new valuepublic Matrix4d m10(double m10)
m10 - the new valuepublic Matrix4d m11(double m11)
m11 - the new valuepublic Matrix4d m12(double m12)
m12 - the new valuepublic Matrix4d m13(double m13)
m13 - the new valuepublic Matrix4d m20(double m20)
m20 - the new valuepublic Matrix4d m21(double m21)
m21 - the new valuepublic Matrix4d m22(double m22)
m22 - the new valuepublic Matrix4d m23(double m23)
m23 - the new valuepublic Matrix4d m30(double m30)
m30 - the new valuepublic Matrix4d m31(double m31)
m31 - the new valuepublic Matrix4d m32(double m32)
m32 - the new valuepublic Matrix4d m33(double m33)
m33 - the new valuepublic Matrix4d _m00(double m00)
m00 - the new valuepublic Matrix4d _m01(double m01)
m01 - the new valuepublic Matrix4d _m02(double m02)
m02 - the new valuepublic Matrix4d _m03(double m03)
m03 - the new valuepublic Matrix4d _m10(double m10)
m10 - the new valuepublic Matrix4d _m11(double m11)
m11 - the new valuepublic Matrix4d _m12(double m12)
m12 - the new valuepublic Matrix4d _m13(double m13)
m13 - the new valuepublic Matrix4d _m20(double m20)
m20 - the new valuepublic Matrix4d _m21(double m21)
m21 - the new valuepublic Matrix4d _m22(double m22)
m22 - the new valuepublic Matrix4d _m23(double m23)
m23 - the new valuepublic Matrix4d _m30(double m30)
m30 - the new valuepublic Matrix4d _m31(double m31)
m31 - the new valuepublic Matrix4d _m32(double m32)
m32 - the new valuepublic Matrix4d _m33(double m33)
m33 - the new valuepublic Matrix4d identity()
Please note that if a call to identity() is immediately followed by a call to:
translate,
rotate,
scale,
perspective,
frustum,
ortho,
ortho2D,
lookAt,
lookAlong,
or any of their overloads, then the call to identity() can be omitted and the subsequent call replaced with:
translation,
rotation,
scaling,
setPerspective,
setFrustum,
setOrtho,
setOrtho2D,
setLookAt,
setLookAlong,
or any of their overloads.
public Matrix4d set(Matrix4dc m)
m into this matrix.m - the matrix to copy the values fromMatrix4d(Matrix4dc),
get(Matrix4d)public Matrix4d set(Matrix4fc m)
m into this matrix.m - the matrix to copy the values fromMatrix4d(Matrix4fc)public Matrix4d set(Matrix4x3dc m)
m into this matrix
and set the other matrix elements to identity.m - the matrix to copy the values fromMatrix4d(Matrix4x3dc)public Matrix4d set(Matrix4x3fc m)
m into this matrix
and set the other matrix elements to identity.m - the matrix to copy the values fromMatrix4d(Matrix4x3fc)public Matrix4d set(Matrix3dc mat)
mat - the Matrix3dcMatrix4d(Matrix3dc)public Matrix4d set3x3(Matrix4dc mat)
Matrix4d to that of the given Matrix4dc
and don't change the other elements.mat - the Matrix4dcpublic Matrix4d set4x3(Matrix4x3dc mat)
Matrix4d to the given Matrix4x3dc
and don't change the other elements.mat - the Matrix4x3dcMatrix4x3dc.get(Matrix4d)public Matrix4d set4x3(Matrix4x3fc mat)
Matrix4d to the given Matrix4x3fc
and don't change the other elements.mat - the Matrix4x3fcMatrix4x3fc.get(Matrix4d)public Matrix4d set4x3(Matrix4dc mat)
Matrix4d to the upper 4x3 submatrix of the given Matrix4dc
and don't change the other elements.mat - the Matrix4dcpublic Matrix4d set(AxisAngle4f axisAngle)
AxisAngle4f.axisAngle - the AxisAngle4fpublic Matrix4d set(AxisAngle4d axisAngle)
AxisAngle4d.axisAngle - the AxisAngle4dpublic Matrix4d set(Quaternionfc q)
Quaternionfc.
This method is equivalent to calling: rotation(q)
Reference: http://www.euclideanspace.com/
q - the Quaternionfcrotation(Quaternionfc)public Matrix4d set(Quaterniondc q)
Quaterniondc.
This method is equivalent to calling: rotation(q)
Reference: http://www.euclideanspace.com/
q - the Quaterniondcrotation(Quaterniondc)public Matrix4d mul(Matrix4dc right)
right matrix.
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 multiplicationpublic Matrix4d mul(Matrix4dc right, Matrix4d dest)
Matrix4dcright 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!
public Matrix4d mulLocal(Matrix4dc left)
left matrix and store the result in this.
If M is this matrix and L the left matrix,
then the new matrix will be L * M. So when transforming a
vector v with the new matrix by using L * M * v, the
transformation of this matrix will be applied first!
left - the left operand of the matrix multiplicationpublic Matrix4d mulLocal(Matrix4dc left, Matrix4d dest)
Matrix4dcleft matrix and store the result in dest.
If M is this matrix and L the left matrix,
then the new matrix will be L * M. So when transforming a
vector v with the new matrix by using L * M * v, the
transformation of this matrix will be applied first!
public Matrix4d mulLocalAffine(Matrix4dc left)
left matrix, both of which are assumed to be affine, and store the result in this.
This method assumes that this matrix and the given left matrix both represent an affine transformation
(i.e. their last rows are equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrices only represent affine transformations, such as translation, rotation, scaling and shearing (in any combination).
This method will not modify either the last row of this or the last row of left.
If M is this matrix and L the left matrix,
then the new matrix will be L * M. So when transforming a
vector v with the new matrix by using L * M * v, the
transformation of this matrix will be applied first!
left - the left operand of the matrix multiplication (the last row is assumed to be (0, 0, 0, 1))public Matrix4d mulLocalAffine(Matrix4dc left, Matrix4d dest)
Matrix4dcleft matrix, both of which are assumed to be affine, and store the result in dest.
This method assumes that this matrix and the given left matrix both represent an affine transformation
(i.e. their last rows are equal to (0, 0, 0, 1))
and can be used to speed up matrix multiplication if the matrices only represent affine transformations, such as translation, rotation, scaling and shearing (in any combination).
This method will not modify either the last row of this or the last row of left.
If M is this matrix and L the left matrix,
then the new matrix will be L * M. So when transforming a
vector v with the new matrix by using L * M * v, the
transformation of this matrix will be applied first!
mulLocalAffine in interface Matrix4dcleft - the left operand of the matrix multiplication (the last row is assumed to be (0, 0, 0, 1))dest - the destination matrix, which will hold the resultpublic Matrix4d mul(Matrix4x3dc right)
public Matrix4d mul(Matrix4x3dc right, Matrix4d dest)
Matrix4dcright 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!
public Matrix4d mul(Matrix4x3fc right, Matrix4d dest)
Matrix4dcright 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!
public Matrix4d mul(Matrix3x2dc right)
right matrix and store the result in this.
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 multiplicationpublic Matrix4d mul(Matrix3x2dc right, Matrix4d dest)
Matrix4dcright 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!
public Matrix4d mul(Matrix3x2fc right)
right matrix and store the result in this.
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 multiplicationpublic Matrix4d mul(Matrix3x2fc right, Matrix4d dest)
Matrix4dcright 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!
public Matrix4d mul(Matrix4f 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 multiplicationpublic Matrix4d mul(Matrix4fc right, Matrix4d dest)
Matrix4dcdest.
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!
public Matrix4d mulPerspectiveAffine(Matrix4dc view)
this symmetric perspective projection matrix by the supplied affine view matrix.
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 bypublic Matrix4d mulPerspectiveAffine(Matrix4dc view, Matrix4d dest)
Matrix4dcthis 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!
mulPerspectiveAffine in interface Matrix4dcview - the affine matrix to multiply this symmetric perspective projection matrix bydest - the destination matrix, which will hold the resultpublic Matrix4d mulAffineR(Matrix4dc right)
right matrix, which is assumed to be affine, and store the result in this.
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))public Matrix4d mulAffineR(Matrix4dc right, Matrix4d dest)
Matrix4dcright 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!
mulAffineR in interface Matrix4dcright - 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 resultpublic Matrix4d mulAffine(Matrix4dc right)
right matrix, both of which are assumed to be affine, and store the result in this.
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))public Matrix4d mulAffine(Matrix4dc right, Matrix4d dest)
Matrix4dcright 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!
public Matrix4d mulTranslationAffine(Matrix4dc right, Matrix4d dest)
Matrix4dcright 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!
mulTranslationAffine in interface Matrix4dcright - 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 resultpublic Matrix4d mulOrthoAffine(Matrix4dc view)
this orthographic projection matrix by the supplied affine view matrix.
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 withpublic Matrix4d mulOrthoAffine(Matrix4dc view, Matrix4d dest)
Matrix4dcthis 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!
mulOrthoAffine in interface Matrix4dcview - the affine matrix which to multiply this withdest - the destination matrix, which will hold the resultpublic Matrix4d fma4x3(Matrix4dc other, double otherFactor)
this and other
by first multiplying each component of other's 4x3 submatrix by otherFactor and
adding that result to this.
The matrix other will not be changed.
other - the other matrixotherFactor - the factor to multiply each of the other matrix's 4x3 componentspublic Matrix4d fma4x3(Matrix4dc other, double otherFactor, Matrix4d dest)
Matrix4dcthis 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.
public Matrix4d add(Matrix4dc other)
this and other.other - the other addendpublic Matrix4d add(Matrix4dc other, Matrix4d dest)
Matrix4dcthis and other and store the result in dest.public Matrix4d sub(Matrix4dc subtrahend)
subtrahend from this.subtrahend - the subtrahendpublic Matrix4d sub(Matrix4dc subtrahend, Matrix4d dest)
Matrix4dcsubtrahend from this and store the result in dest.public Matrix4d mulComponentWise(Matrix4dc other)
this by other.other - the other matrixpublic Matrix4d mulComponentWise(Matrix4dc other, Matrix4d dest)
Matrix4dcthis by other and store the result in dest.mulComponentWise in interface Matrix4dcother - the other matrixdest - will hold the resultpublic Matrix4d add4x3(Matrix4dc other)
this and other.other - the other addendpublic Matrix4d add4x3(Matrix4dc other, Matrix4d dest)
Matrix4dcthis and other
and store the result in dest.
The other components of dest will be set to the ones of this.
public Matrix4d add4x3(Matrix4fc other)
this and other.other - the other addendpublic Matrix4d add4x3(Matrix4fc other, Matrix4d dest)
Matrix4dcthis and other
and store the result in dest.
The other components of dest will be set to the ones of this.
public Matrix4d sub4x3(Matrix4dc subtrahend)
subtrahend from this.subtrahend - the subtrahendpublic Matrix4d sub4x3(Matrix4dc subtrahend, Matrix4d dest)
Matrix4dcsubtrahend from this
and store the result in dest.
The other components of dest will be set to the ones of this.
public Matrix4d mul4x3ComponentWise(Matrix4dc other)
this by other.other - the other matrixpublic Matrix4d mul4x3ComponentWise(Matrix4dc other, Matrix4d dest)
Matrix4dcthis by other
and store the result in dest.
The other components of dest will be set to the ones of this.
mul4x3ComponentWise in interface Matrix4dcother - the other matrixdest - will hold the resultpublic Matrix4d set(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)
m00 - the new value of m00m01 - the new value of m01m02 - the new value of m02m03 - the new value of m03m10 - the new value of m10m11 - the new value of m11m12 - the new value of m12m13 - the new value of m13m20 - the new value of m20m21 - the new value of m21m22 - the new value of m22m23 - the new value of m23m30 - the new value of m30m31 - the new value of m31m32 - the new value of m32m33 - the new value of m33public Matrix4d set(double[] m, int off)
The results will look like this:
0, 4, 8, 12
1, 5, 9, 13
2, 6, 10, 14
3, 7, 11, 15
m - the array to read the matrix values fromoff - the offset into the arrayset(double[])public Matrix4d set(double[] m)
The results will look like this:
0, 4, 8, 12
1, 5, 9, 13
2, 6, 10, 14
3, 7, 11, 15
m - the array to read the matrix values fromset(double[], int)public Matrix4d set(float[] m, int off)
The results will look like this:
0, 4, 8, 12
1, 5, 9, 13
2, 6, 10, 14
3, 7, 11, 15
m - the array to read the matrix values fromoff - the offset into the arrayset(float[])public Matrix4d set(float[] m)
The results will look like this:
0, 4, 8, 12
1, 5, 9, 13
2, 6, 10, 14
3, 7, 11, 15
m - the array to read the matrix values fromset(float[], int)public Matrix4d set(DoubleBuffer buffer)
DoubleBuffer in column-major order,
starting at its current position.
The DoubleBuffer is expected to contain the values in column-major order.
The position of the DoubleBuffer will not be changed by this method.
buffer - the DoubleBuffer to read the matrix values from in column-major orderpublic Matrix4d set(FloatBuffer buffer)
FloatBuffer in column-major order,
starting at its current position.
The FloatBuffer is expected to contain the values in column-major order.
The position of the FloatBuffer will not be changed by this method.
buffer - the FloatBuffer to read the matrix values from in column-major orderpublic Matrix4d set(ByteBuffer buffer)
ByteBuffer in column-major order,
starting at its current position.
The ByteBuffer is expected to contain the values in column-major order.
The position of the ByteBuffer will not be changed by this method.
buffer - the ByteBuffer to read the matrix values from in column-major orderpublic Matrix4d setFloats(ByteBuffer buffer)
ByteBuffer in column-major order,
starting at its current position.
The ByteBuffer is expected to contain the values in column-major order.
The position of the ByteBuffer will not be changed by this method.
buffer - the ByteBuffer to read the matrix values from in column-major orderpublic Matrix4d set(Vector4d col0, Vector4d col1, Vector4d col2, Vector4d col3)
col0 - the first columncol1 - the second columncol2 - the third columncol3 - the fourth columnpublic double determinant()
Matrix4dc
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 Matrix4dc.determinantAffine() can be used instead of this method.
determinant in interface Matrix4dcMatrix4dc.determinantAffine()public double determinant3x3()
Matrix4dcdeterminant3x3 in interface Matrix4dcpublic double determinantAffine()
Matrix4dcaffine transformation and thus
its last row is equal to (0, 0, 0, 1).determinantAffine in interface Matrix4dcpublic Matrix4d invert()
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() can be used instead of this method.
invertAffine()public Matrix4d invert(Matrix4d dest)
Matrix4dcthis 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 Matrix4dc.invertAffine(Matrix4d) can be used instead of this method.
invert in interface Matrix4dcdest - will hold the resultMatrix4dc.invertAffine(Matrix4d)public Matrix4d invertPerspective(Matrix4d dest)
Matrix4dcthis 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().
invertPerspective in interface Matrix4dcdest - will hold the inverse of thisMatrix4dc.perspective(double, double, double, double, Matrix4d)public Matrix4d invertPerspective()
this is a perspective projection matrix obtained via one of the perspective() methods
or via setPerspective(), that is, if this is a symmetrical perspective frustum transformation,
then this method builds the inverse of this.
This method can be used to quickly obtain the inverse of a perspective projection matrix when being obtained via perspective().
perspective(double, double, double, double)public Matrix4d invertFrustum(Matrix4d dest)
Matrix4dcthis 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
Matrix4dc.invertPerspective(Matrix4d) should be used instead.
invertFrustum in interface Matrix4dcdest - will hold the inverse of thisMatrix4dc.frustum(double, double, double, double, double, double, Matrix4d),
Matrix4dc.invertPerspective(Matrix4d)public Matrix4d invertFrustum()
this is an arbitrary perspective projection matrix obtained via one of the frustum() methods
or via setFrustum(),
then this method builds the inverse of this.
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() should be used instead.
frustum(double, double, double, double, double, double),
invertPerspective()public Matrix4d invertOrtho(Matrix4d dest)
Matrix4dcthis 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.
invertOrtho in interface Matrix4dcdest - will hold the inverse of thispublic Matrix4d invertOrtho()
this orthographic projection matrix.
This method can be used to quickly obtain the inverse of an orthographic projection matrix.
public Matrix4d invertPerspectiveView(Matrix4dc view, Matrix4d dest)
Matrix4dcthis 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 Matrix4dc.rotate(double, double, double, double, Matrix4d), except for scale().
For the special cases of the matrices this and view mentioned above, this method is equivalent to the following code:
dest.set(this).mul(view).invert();
invertPerspectiveView in interface Matrix4dcview - the view transformation (must be affine and have unit scaling)dest - will hold the inverse of this * viewpublic Matrix4d invertPerspectiveView(Matrix4x3dc view, Matrix4d dest)
Matrix4dcthis is a perspective projection matrix obtained via one of the perspective() methods,
that is, if this is a symmetrical perspective frustum transformation
and the given view matrix has unit scaling,
then this method builds the inverse of this * view and stores it into the given dest.
This method can be used to quickly obtain the inverse of the combination of the view and projection matrices, when both were obtained
via the common methods perspective() and lookAt() or
other methods, that build affine matrices, such as translate and Matrix4dc.rotate(double, double, double, double, Matrix4d), except for scale().
For the special cases of the matrices this and view mentioned above, this method is equivalent to the following code:
dest.set(this).mul(view).invert();
invertPerspectiveView in interface Matrix4dcview - the view transformation (must have unit scaling)dest - will hold the inverse of this * viewpublic Matrix4d invertAffine(Matrix4d dest)
Matrix4dcaffine transformation (i.e. its last row is equal to (0, 0, 0, 1))
and write the result into dest.invertAffine in interface Matrix4dcdest - will hold the resultpublic Matrix4d invertAffine()
affine transformation (i.e. its last row is equal to (0, 0, 0, 1)).public Matrix4d transpose()
public Matrix4d transpose(Matrix4d dest)
Matrix4dcthis matrix and store the result into dest.public Matrix4d transpose3x3()
All other matrix elements are left unchanged.
public Matrix4d transpose3x3(Matrix4d dest)
Matrix4dcdest.
All other matrix elements are left unchanged.
transpose3x3 in interface Matrix4dcdest - will hold the resultpublic Matrix3d transpose3x3(Matrix3d dest)
Matrix4dcdest.transpose3x3 in interface Matrix4dcdest - will hold the resultpublic Matrix4d translation(double x, double y, double z)
The resulting matrix can be multiplied against another transformation matrix to obtain an additional translation.
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in zpublic Matrix4d translation(Vector3fc offset)
The resulting matrix can be multiplied against another transformation matrix to obtain an additional translation.
offset - the offsets in x, y and z to translatepublic Matrix4d translation(Vector3dc offset)
The resulting matrix can be multiplied against another transformation matrix to obtain an additional translation.
offset - the offsets in x, y and z to translatepublic Matrix4d setTranslation(double x, double y, double z)
(m30, m31, m32) of this matrix to the given values (x, y, z).
To build a translation matrix instead, use translation(double, double, double).
To apply a translation, use translate(double, double, double).
x - the units to translate in xy - the units to translate in yz - the units to translate in ztranslation(double, double, double),
translate(double, double, double)public Matrix4d setTranslation(Vector3dc xyz)
(m30, m31, m32) of this matrix to the given values (xyz.x, xyz.y, xyz.z).
To build a translation matrix instead, use translation(Vector3dc).
To apply a translation, use translate(Vector3dc).
xyz - the units to translate in (x, y, z)translation(Vector3dc),
translate(Vector3dc)public Vector3d getTranslation(Vector3d dest)
Matrix4dc(m30, m31, m32) of this matrix and store them in the given vector xyz.getTranslation in interface Matrix4dcdest - will hold the translation components of this matrixpublic Vector3d getScale(Vector3d dest)
Matrix4dcthis matrix for the three base axes.public String toString()
This method creates a new DecimalFormat on every invocation with the format string "0.000E0;-".
public String toString(NumberFormat formatter)
NumberFormat.formatter - the NumberFormat used to format the matrix values withpublic Matrix4d get(Matrix4d dest)
Matrix4dcthis matrix and store them into
dest.public Matrix4x3d get4x3(Matrix4x3d dest)
Matrix4dcthis matrix and store them into
dest.public Matrix3d get3x3(Matrix3d dest)
Matrix4dcthis matrix and store them into
dest.public Quaternionf getUnnormalizedRotation(Quaternionf dest)
Matrix4dcthis 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.
getUnnormalizedRotation in interface Matrix4dcdest - the destination QuaternionfQuaternionf.setFromUnnormalized(Matrix4dc)public Quaternionf getNormalizedRotation(Quaternionf dest)
Matrix4dcthis 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.
getNormalizedRotation in interface Matrix4dcdest - the destination QuaternionfQuaternionf.setFromNormalized(Matrix4dc)public Quaterniond getUnnormalizedRotation(Quaterniond dest)
Matrix4dcthis 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.
getUnnormalizedRotation in interface Matrix4dcdest - the destination QuaterniondQuaterniond.setFromUnnormalized(Matrix4dc)public Quaterniond getNormalizedRotation(Quaterniond dest)
Matrix4dcthis 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.
getNormalizedRotation in interface Matrix4dcdest - the destination QuaterniondQuaterniond.setFromNormalized(Matrix4dc)public DoubleBuffer get(DoubleBuffer dest)
Matrix4dcDoubleBuffer 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 Matrix4dc.get(int, DoubleBuffer), taking
the absolute position as parameter.
get in interface Matrix4dcdest - will receive the values of this matrix in column-major order at its current positionMatrix4dc.get(int, DoubleBuffer)public DoubleBuffer get(int index, DoubleBuffer dest)
Matrix4dcDoubleBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer.
get in interface Matrix4dcindex - the absolute position into the DoubleBufferdest - will receive the values of this matrix in column-major orderpublic FloatBuffer get(FloatBuffer dest)
Matrix4dcFloatBuffer 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 Matrix4dc.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.
get in interface Matrix4dcdest - will receive the values of this matrix in column-major order at its current positionMatrix4dc.get(int, FloatBuffer)public FloatBuffer get(int index, FloatBuffer dest)
Matrix4dcFloatBuffer 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.
public ByteBuffer get(ByteBuffer dest)
Matrix4dcByteBuffer 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 Matrix4dc.get(int, ByteBuffer), taking
the absolute position as parameter.
get in interface Matrix4dcdest - will receive the values of this matrix in column-major order at its current positionMatrix4dc.get(int, ByteBuffer)public ByteBuffer get(int index, ByteBuffer dest)
Matrix4dcByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
public ByteBuffer getFloats(ByteBuffer dest)
Matrix4dcByteBuffer 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 Matrix4dc.getFloats(int, ByteBuffer), taking
the absolute position as parameter.
getFloats in interface Matrix4dcdest - will receive the elements of this matrix as float values in column-major order at its current positionMatrix4dc.getFloats(int, ByteBuffer)public ByteBuffer getFloats(int index, ByteBuffer dest)
Matrix4dcByteBuffer
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.
public double[] get(double[] dest,
int offset)
Matrix4dcpublic double[] get(double[] dest)
Matrix4dc
In order to specify an explicit offset into the array, use the method Matrix4dc.get(double[], int).
get in interface Matrix4dcdest - the array to write the matrix values intoMatrix4dc.get(double[], int)public float[] get(float[] dest,
int offset)
Matrix4dcPlease 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.
public float[] get(float[] dest)
Matrix4dcPlease 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 Matrix4dc.get(float[], int).
get in interface Matrix4dcdest - the array to write the matrix values intoMatrix4dc.get(float[], int)public DoubleBuffer getTransposed(DoubleBuffer dest)
Matrix4dcDoubleBuffer 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 Matrix4dc.getTransposed(int, DoubleBuffer), taking
the absolute position as parameter.
getTransposed in interface Matrix4dcdest - will receive the values of this matrix in column-major order at its current positionMatrix4dc.getTransposed(int, DoubleBuffer)public DoubleBuffer getTransposed(int index, DoubleBuffer dest)
Matrix4dcDoubleBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer.
getTransposed in interface Matrix4dcindex - the absolute position into the DoubleBufferdest - will receive the values of this matrix in column-major orderpublic ByteBuffer getTransposed(ByteBuffer dest)
Matrix4dcByteBuffer 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 Matrix4dc.getTransposed(int, ByteBuffer), taking
the absolute position as parameter.
getTransposed in interface Matrix4dcdest - will receive the values of this matrix in column-major order at its current positionMatrix4dc.getTransposed(int, ByteBuffer)public ByteBuffer getTransposed(int index, ByteBuffer dest)
Matrix4dcByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
getTransposed in interface Matrix4dcindex - the absolute position into the ByteBufferdest - will receive the values of this matrix in column-major orderpublic DoubleBuffer get4x3Transposed(DoubleBuffer dest)
Matrix4dcthis 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 Matrix4dc.get4x3Transposed(int, DoubleBuffer), taking
the absolute position as parameter.
get4x3Transposed in interface Matrix4dcdest - will receive the values of the upper 4x3 submatrix in row-major order at its current positionMatrix4dc.get4x3Transposed(int, DoubleBuffer)public DoubleBuffer get4x3Transposed(int index, DoubleBuffer dest)
Matrix4dcthis 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.
get4x3Transposed in interface Matrix4dcindex - the absolute position into the DoubleBufferdest - will receive the values of the upper 4x3 submatrix in row-major orderpublic ByteBuffer get4x3Transposed(ByteBuffer dest)
Matrix4dcthis 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 Matrix4dc.get4x3Transposed(int, ByteBuffer), taking
the absolute position as parameter.
get4x3Transposed in interface Matrix4dcdest - will receive the values of the upper 4x3 submatrix in row-major order at its current positionMatrix4dc.get4x3Transposed(int, ByteBuffer)public ByteBuffer get4x3Transposed(int index, ByteBuffer dest)
Matrix4dcthis 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.
get4x3Transposed in interface Matrix4dcindex - the absolute position into the ByteBufferdest - will receive the values of the upper 4x3 submatrix in row-major orderpublic Matrix4d zero()
public Matrix4d scaling(double factor)
The resulting matrix can be multiplied against another transformation matrix to obtain an additional scaling.
In order to post-multiply a scaling transformation directly to a
matrix, use scale() instead.
factor - the scale factor in x, y and zscale(double)public Matrix4d scaling(double x, double y, double z)
x - the scale in xy - the scale in yz - the scale in zpublic Matrix4d scaling(Vector3dc xyz)
xyz.x, xyz.y and xyz.z, respectively.
The resulting matrix can be multiplied against another transformation matrix to obtain an additional scaling.
In order to post-multiply a scaling transformation directly to a
matrix use scale() instead.
xyz - the scale in x, y and z, respectivelyscale(Vector3dc)public Matrix4d rotation(double angle, double x, double y, double z)
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.
From Wikipedia
angle - the angle in radiansx - the x-coordinate of the axis to rotate abouty - the y-coordinate of the axis to rotate aboutz - the z-coordinate of the axis to rotate aboutpublic Matrix4d rotationX(double ang)
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.
Reference: http://en.wikipedia.org
ang - the angle in radianspublic Matrix4d rotationY(double ang)
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.
Reference: http://en.wikipedia.org
ang - the angle in radianspublic Matrix4d rotationZ(double ang)
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.
Reference: http://en.wikipedia.org
ang - the angle in radianspublic Matrix4d rotationTowardsXY(double dirX, double dirY)
+X towards (dirX, dirY).
The vector (dirX, dirY) must be a unit vector.
dirX - the x component of the normalized directiondirY - the y component of the normalized directionpublic Matrix4d rotationXYZ(double angleX, double angleY, double angleZ)
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.
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 is equivalent to calling: rotationX(angleX).rotateY(angleY).rotateZ(angleZ)
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zpublic Matrix4d rotationZYX(double angleZ, double angleY, double angleX)
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.
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 is equivalent to calling: rotationZ(angleZ).rotateY(angleY).rotateX(angleX)
angleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xpublic Matrix4d rotationYXZ(double angleY, double angleX, double angleZ)
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.
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 is equivalent to calling: rotationY(angleY).rotateX(angleX).rotateZ(angleZ)
angleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zpublic Matrix4d setRotationXYZ(double angleX, double angleY, double angleZ)
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.
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.
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zpublic Matrix4d setRotationZYX(double angleZ, double angleY, double angleX)
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.
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.
angleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xpublic Matrix4d setRotationYXZ(double angleY, double angleX, double angleZ)
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.
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.
angleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zpublic Matrix4d rotation(double angle, Vector3dc axis)
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.
angle - the angle in radiansaxis - the axis to rotate aboutpublic Matrix4d rotation(double angle, Vector3fc axis)
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.
angle - the angle in radiansaxis - the axis to rotate aboutpublic Vector4d transform(Vector4d v)
Matrix4dctransform in interface Matrix4dcv - the vector to transform and to hold the final resultVector4d.mul(Matrix4dc)public Vector4d transform(Vector4dc v, Vector4d dest)
Matrix4dcdest.transform in interface Matrix4dcv - the vector to transformdest - will contain the resultVector4d.mul(Matrix4dc, Vector4d)public Vector4d transform(double x, double y, double z, double w, Vector4d dest)
Matrix4dc(x, y, z, w) by this matrix and store the result in dest.public Vector4d transformProject(Vector4d v)
Matrix4dctransformProject in interface Matrix4dcv - the vector to transform and to hold the final resultVector4d.mulProject(Matrix4dc)public Vector4d transformProject(Vector4dc v, Vector4d dest)
Matrix4dcdest.transformProject in interface Matrix4dcv - the vector to transformdest - will contain the resultVector4d.mulProject(Matrix4dc, Vector4d)public Vector4d transformProject(double x, double y, double z, double w, Vector4d dest)
Matrix4dc(x, y, z, w) by this matrix, perform perspective divide and store the result in dest.transformProject in interface Matrix4dcx - 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 resultpublic Vector3d transformProject(Vector3d v)
Matrix4dc
This method uses w=1.0 as the fourth vector component.
transformProject in interface Matrix4dcv - the vector to transform and to hold the final resultVector3d.mulProject(Matrix4dc)public Vector3d transformProject(Vector3dc v, Vector3d dest)
Matrix4dcdest.
This method uses w=1.0 as the fourth vector component.
transformProject in interface Matrix4dcv - the vector to transformdest - will contain the resultVector3d.mulProject(Matrix4dc, Vector3d)public Vector3d transformProject(double x, double y, double z, Vector3d dest)
Matrix4dc(x, y, z) by this matrix, perform perspective divide and store the result in dest.
This method uses w=1.0 as the fourth vector component.
transformProject in interface Matrix4dcx - 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 resultpublic Vector3d transformPosition(Vector3d dest)
Matrix4dc
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 Matrix4dc.transform(Vector4d) or
Matrix4dc.transformProject(Vector3d) when perspective divide should be applied, too.
In order to store the result in another vector, use Matrix4dc.transformPosition(Vector3dc, Vector3d).
transformPosition in interface Matrix4dcdest - the vector to transform and to hold the final resultMatrix4dc.transformPosition(Vector3dc, Vector3d),
Matrix4dc.transform(Vector4d),
Matrix4dc.transformProject(Vector3d)public Vector3d transformPosition(Vector3dc v, Vector3d dest)
Matrix4dcdest.
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 Matrix4dc.transform(Vector4dc, Vector4d) or
Matrix4dc.transformProject(Vector3dc, Vector3d) when perspective divide should be applied, too.
In order to store the result in the same vector, use Matrix4dc.transformPosition(Vector3d).
transformPosition in interface Matrix4dcv - the vector to transformdest - will hold the resultMatrix4dc.transformPosition(Vector3d),
Matrix4dc.transform(Vector4dc, Vector4d),
Matrix4dc.transformProject(Vector3dc, Vector3d)public Vector3d transformPosition(double x, double y, double z, Vector3d dest)
Matrix4dc(x, y, z), as if it was a 4D-vector with w=1, by
this matrix and store the result in dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 1.0, so it
will represent a position/location in 3D-space rather than a direction. This method is therefore
not suited for perspective projection transformations as it will not save the
w component of the transformed vector.
For perspective projection use Matrix4dc.transform(double, double, double, double, Vector4d) or
Matrix4dc.transformProject(double, double, double, Vector3d) when perspective divide should be applied, too.
transformPosition in interface Matrix4dcx - the x coordinate of the positiony - the y coordinate of the positionz - the z coordinate of the positiondest - will hold the resultMatrix4dc.transform(double, double, double, double, Vector4d),
Matrix4dc.transformProject(double, double, double, Vector3d)public Vector3d transformDirection(Vector3d dest)
Matrix4dc
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 Matrix4dc.transformDirection(Vector3dc, Vector3d).
transformDirection in interface Matrix4dcdest - the vector to transform and to hold the final resultpublic Vector3d transformDirection(Vector3dc v, Vector3d dest)
Matrix4dcdest.
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 Matrix4dc.transformDirection(Vector3d).
transformDirection in interface Matrix4dcv - the vector to transform and to hold the final resultdest - will hold the resultpublic Vector3d transformDirection(double x, double y, double z, Vector3d dest)
Matrix4dc(x, y, z), as if it was a 4D-vector with w=0, by
this matrix and store the result in dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 0.0, so it
will represent a direction in 3D-space rather than a position. This method will therefore
not take the translation part of the matrix into account.
transformDirection in interface Matrix4dcx - 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 resultpublic Vector3f transformDirection(Vector3f dest)
Matrix4dc
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 Matrix4dc.transformDirection(Vector3fc, Vector3f).
transformDirection in interface Matrix4dcdest - the vector to transform and to hold the final resultpublic Vector3f transformDirection(Vector3fc v, Vector3f dest)
Matrix4dcdest.
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 Matrix4dc.transformDirection(Vector3f).
transformDirection in interface Matrix4dcv - the vector to transform and to hold the final resultdest - will hold the resultpublic Vector4d transformAffine(Vector4d dest)
Matrix4dcthis 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 Matrix4dc.transformAffine(Vector4dc, Vector4d).
transformAffine in interface Matrix4dcdest - the vector to transform and to hold the final resultMatrix4dc.transformAffine(Vector4dc, Vector4d)public Vector4d transformAffine(Vector4dc v, Vector4d dest)
Matrix4dcthis 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 Matrix4dc.transformAffine(Vector4d).
transformAffine in interface Matrix4dcv - the vector to transform and to hold the final resultdest - will hold the resultMatrix4dc.transformAffine(Vector4d)public Vector4d transformAffine(double x, double y, double z, double w, Vector4d dest)
Matrix4dc(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.transformAffine in interface Matrix4dcx - 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 resultpublic Matrix4d set3x3(Matrix3dc mat)
Matrix4d to the given Matrix3dc and don't change the other elements.mat - the 3x3 matrixpublic Matrix4d scale(Vector3dc xyz, Matrix4d dest)
Matrix4dcthis 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!
public Matrix4d scale(Vector3dc xyz)
xyz.x,
xyz.y and xyz.z factors, respectively.
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, respectivelypublic Matrix4d scale(double x, double y, double z, Matrix4d dest)
Matrix4dcthis 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!
public Matrix4d scale(double x, double y, double z)
this matrix by scaling the base axes by the given x,
y and z factors.
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 componentpublic Matrix4d scale(double xyz, Matrix4d dest)
Matrix4dcdest.
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!
scale in interface Matrix4dcxyz - the factor for all componentsdest - will hold the resultMatrix4dc.scale(double, double, double, Matrix4d)public Matrix4d scale(double xyz)
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 componentsscale(double, double, double)public Matrix4d scaleXY(double x, double y, Matrix4d dest)
Matrix4dcx and the Y axis by y
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
scaling will be applied first!
public Matrix4d scaleXY(double x, double y)
x and the Y axis by y.
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 componentpublic Matrix4d scaleAround(double sx, double sy, double sz, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcthis 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)
scaleAround in interface Matrix4dcsx - 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 resultpublic Matrix4d scaleAround(double sx, double sy, double sz, double ox, double oy, double oz)
(ox, oy, oz) as the scaling origin.
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).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 originpublic Matrix4d scaleAround(double factor, double ox, double oy, double oz)
factor
while using (ox, oy, oz) as the scaling origin.
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).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 originpublic Matrix4d scaleAround(double factor, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcfactor
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)
scaleAround in interface Matrix4dcfactor - 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 resultpublic Matrix4d scaleLocal(double x, double y, double z, Matrix4d dest)
Matrix4dcthis 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!
scaleLocal in interface Matrix4dcx - the factor of the x componenty - the factor of the y componentz - the factor of the z componentdest - will hold the resultpublic Matrix4d scaleLocal(double xyz, Matrix4d dest)
Matrix4dcthis matrix by scaling all base axes by the given xyz factor,
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v
, the scaling will be applied last!
scaleLocal in interface Matrix4dcxyz - the factor to scale all three base axes bydest - will hold the resultpublic Matrix4d scaleLocal(double xyz)
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v, the
scaling will be applied last!
xyz - the factor of the x, y and z componentpublic Matrix4d scaleLocal(double x, double y, double z)
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 componentpublic Matrix4d scaleAroundLocal(double sx, double sy, double sz, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcthis 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)
scaleAroundLocal in interface Matrix4dcsx - 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 resultpublic Matrix4d scaleAroundLocal(double sx, double sy, double sz, double ox, double oy, double oz)
(ox, oy, oz) as the scaling origin.
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, this)
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 originpublic Matrix4d scaleAroundLocal(double factor, double ox, double oy, double oz)
factor
while using (ox, oy, oz) as the scaling origin.
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, this)
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 originpublic Matrix4d scaleAroundLocal(double factor, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcfactor
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)
scaleAroundLocal in interface Matrix4dcfactor - 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 resultpublic Matrix4d rotate(double ang, double x, double y, double z, Matrix4d dest)
Matrix4dcdest.
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!
public Matrix4d rotate(double ang, double x, double y, double z)
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!
In order to set the matrix to a rotation matrix without post-multiplying the rotation
transformation, use rotation().
ang - the angle is in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisrotation(double, double, double, double)public Matrix4d rotateTranslation(double ang, double x, double y, double z, Matrix4d dest)
(x, y, z) axis and store the result in dest.
This method assumes this to only contain a translation.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
In order to set the matrix to a rotation matrix without post-multiplying the rotation
transformation, use rotation().
Reference: http://en.wikipedia.org
rotateTranslation in interface Matrix4dcang - 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 resultrotation(double, double, double, double)public Matrix4d 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!
In order to set the matrix to a rotation matrix without post-multiplying the rotation
transformation, use rotation().
Reference: http://en.wikipedia.org
rotateAffine in interface Matrix4dcang - 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 resultrotation(double, double, double, double)public Matrix4d rotateAffine(double ang, double x, double y, double z)
affine matrix by rotating the given amount of radians
about the specified (x, y, z) axis.
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!
In order to set the matrix to a rotation matrix without post-multiplying the rotation
transformation, use rotation().
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 axisrotation(double, double, double, double)public Matrix4d rotateAround(Quaterniondc quat, double ox, double oy, double oz)
Quaterniondc to this matrix while using (ox, oy, oz) as the rotation origin.
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).rotate(quat).translate(-ox, -oy, -oz)
Reference: http://en.wikipedia.org
quat - the Quaterniondcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation originpublic Matrix4d rotateAroundAffine(Quaterniondc quat, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcQuaterniondc to this affine
matrix while using (ox, oy, oz) as the rotation origin, and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
This method is only applicable if this is an affine matrix.
This method is equivalent to calling: translate(ox, oy, oz, dest).rotate(quat).translate(-ox, -oy, -oz)
Reference: http://en.wikipedia.org
rotateAroundAffine in interface Matrix4dcquat - the Quaterniondcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation origindest - will hold the resultpublic Matrix4d rotateAround(Quaterniondc quat, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcQuaterniondc 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
rotateAround in interface Matrix4dcquat - the Quaterniondcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation origindest - will hold the resultpublic Matrix4d rotationAround(Quaterniondc quat, double ox, double oy, double oz)
Quaterniondc while using (ox, oy, oz) as the rotation origin.
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 is equivalent to calling: translation(ox, oy, oz).rotate(quat).translate(-ox, -oy, -oz)
Reference: http://en.wikipedia.org
quat - the Quaterniondcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation originpublic Matrix4d rotateLocal(double ang, double x, double y, double z, Matrix4d dest)
(x, y, z) axis and store the result in dest.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotation().
Reference: http://en.wikipedia.org
rotateLocal in interface Matrix4dcang - 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 resultrotation(double, double, double, double)public Matrix4d rotateLocal(double ang, double x, double y, double z)
(x, y, z) axis.
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!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotation().
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 axisrotation(double, double, double, double)public Matrix4d rotateAroundLocal(Quaterniondc quat, double ox, double oy, double oz, Matrix4d dest)
Matrix4dcQuaterniondc 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
rotateAroundLocal in interface Matrix4dcquat - the Quaterniondcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation origindest - will hold the resultpublic Matrix4d rotateAroundLocal(Quaterniondc quat, double ox, double oy, double oz)
Quaterniondc to this matrix while using (ox, oy, oz)
as the rotation origin.
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).rotateLocal(quat).translateLocal(ox, oy, oz)
Reference: http://en.wikipedia.org
quat - the Quaterniondcox - the x coordinate of the rotation originoy - the y coordinate of the rotation originoz - the z coordinate of the rotation originpublic Matrix4d translate(Vector3dc offset)
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!
In order to set the matrix to a translation transformation without post-multiplying
it, use translation(Vector3dc).
offset - the number of units in x, y and z by which to translatetranslation(Vector3dc)public Matrix4d 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!
In order to set the matrix to a translation transformation without post-multiplying
it, use translation(Vector3dc).
translate in interface Matrix4dcoffset - the number of units in x, y and z by which to translatedest - will hold the resulttranslation(Vector3dc)public Matrix4d translate(Vector3fc offset)
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!
In order to set the matrix to a translation transformation without post-multiplying
it, use translation(Vector3fc).
offset - the number of units in x, y and z by which to translatetranslation(Vector3fc)public Matrix4d 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!
In order to set the matrix to a translation transformation without post-multiplying
it, use translation(Vector3fc).
translate in interface Matrix4dcoffset - the number of units in x, y and z by which to translatedest - will hold the resulttranslation(Vector3fc)public Matrix4d 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!
In order to set the matrix to a translation transformation without post-multiplying
it, use translation(double, double, double).
translate in interface Matrix4dcx - the offset to translate in xy - the offset to translate in yz - the offset to translate in zdest - will hold the resulttranslation(double, double, double)public Matrix4d translate(double x, double y, double z)
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!
In order to set the matrix to a translation transformation without post-multiplying
it, use translation(double, double, double).
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in ztranslation(double, double, double)public Matrix4d translateLocal(Vector3fc offset)
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!
In order to set the matrix to a translation transformation without pre-multiplying
it, use translation(Vector3fc).
offset - the number of units in x, y and z by which to translatetranslation(Vector3fc)public Matrix4d 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!
In order to set the matrix to a translation transformation without pre-multiplying
it, use translation(Vector3fc).
translateLocal in interface Matrix4dcoffset - the number of units in x, y and z by which to translatedest - will hold the resulttranslation(Vector3fc)public Matrix4d translateLocal(Vector3dc offset)
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!
In order to set the matrix to a translation transformation without pre-multiplying
it, use translation(Vector3dc).
offset - the number of units in x, y and z by which to translatetranslation(Vector3dc)public Matrix4d 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!
In order to set the matrix to a translation transformation without pre-multiplying
it, use translation(Vector3dc).
translateLocal in interface Matrix4dcoffset - the number of units in x, y and z by which to translatedest - will hold the resulttranslation(Vector3dc)public Matrix4d 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!
In order to set the matrix to a translation transformation without pre-multiplying
it, use translation(double, double, double).
translateLocal in interface Matrix4dcx - the offset to translate in xy - the offset to translate in yz - the offset to translate in zdest - will hold the resulttranslation(double, double, double)public Matrix4d translateLocal(double x, double y, double z)
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!
In order to set the matrix to a translation transformation without pre-multiplying
it, use translation(double, double, double).
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in ztranslation(double, double, double)public Matrix4d rotateLocalX(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 R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotationX().
Reference: http://en.wikipedia.org
rotateLocalX in interface Matrix4dcang - the angle in radians to rotate about the X axisdest - will hold the resultrotationX(double)public Matrix4d rotateLocalX(double ang)
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!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotationX().
Reference: http://en.wikipedia.org
ang - the angle in radians to rotate about the X axisrotationX(double)public Matrix4d rotateLocalY(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 R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotationY().
Reference: http://en.wikipedia.org
rotateLocalY in interface Matrix4dcang - the angle in radians to rotate about the Y axisdest - will hold the resultrotationY(double)public Matrix4d rotateLocalY(double ang)
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!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotationY().
Reference: http://en.wikipedia.org
ang - the angle in radians to rotate about the Y axisrotationY(double)public Matrix4d rotateLocalZ(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 R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotationZ().
Reference: http://en.wikipedia.org
rotateLocalZ in interface Matrix4dcang - the angle in radians to rotate about the Z axisdest - will hold the resultrotationZ(double)public Matrix4d rotateLocalZ(double ang)
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!
In order to set the matrix to a rotation matrix without pre-multiplying the rotation
transformation, use rotationY().
Reference: http://en.wikipedia.org
ang - the angle in radians to rotate about the Z axisrotationY(double)public void writeExternal(ObjectOutput out) throws IOException
writeExternal in interface ExternalizableIOExceptionpublic void readExternal(ObjectInput in) throws IOException
readExternal in interface ExternalizableIOExceptionpublic Matrix4d rotateX(double ang, Matrix4d dest)
Matrix4dcdest.
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
public Matrix4d rotateX(double ang)
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 radianspublic Matrix4d rotateY(double ang, Matrix4d dest)
Matrix4dcdest.
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
public Matrix4d rotateY(double ang)
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 radianspublic Matrix4d rotateZ(double ang, Matrix4d dest)
Matrix4dcdest.
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
public Matrix4d rotateZ(double ang)
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 radianspublic Matrix4d rotateTowardsXY(double dirX, double dirY)
+X towards (dirX, dirY).
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
The vector (dirX, dirY) must be a unit vector.
dirX - the x component of the normalized directiondirY - the y component of the normalized directionpublic Matrix4d rotateTowardsXY(double dirX, double dirY, Matrix4d dest)
Matrix4dc+X towards (dirX, dirY) and store the result in dest.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
The vector (dirX, dirY) must be a unit vector.
rotateTowardsXY in interface Matrix4dcdirX - the x component of the normalized directiondirY - the y component of the normalized directiondest - will hold the resultpublic Matrix4d rotateXYZ(Vector3d angles)
angles.x radians about the X axis, followed by a rotation of angles.y radians about the Y axis and
followed by a rotation of angles.z radians about the Z axis.
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(angles.x).rotateY(angles.y).rotateZ(angles.z)
angles - the Euler anglespublic Matrix4d rotateXYZ(double angleX, double angleY, double angleZ)
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.
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).rotateY(angleY).rotateZ(angleZ)
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zpublic Matrix4d rotateXYZ(double angleX, double angleY, double angleZ, Matrix4d dest)
Matrix4dcangleX 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)
public Matrix4d rotateAffineXYZ(double angleX, double angleY, double angleZ)
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.
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!
This method is equivalent to calling: rotateX(angleX).rotateY(angleY).rotateZ(angleZ)
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zpublic Matrix4d rotateAffineXYZ(double angleX, double angleY, double angleZ, Matrix4d dest)
Matrix4dcangleX 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!
rotateAffineXYZ in interface Matrix4dcangleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zdest - will hold the resultpublic Matrix4d rotateZYX(Vector3d angles)
angles.z radians about the Z axis, followed by a rotation of angles.y radians about the Y axis and
followed by a rotation of angles.x radians about the X axis.
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(angles.z).rotateY(angles.y).rotateX(angles.x)
angles - the Euler anglespublic Matrix4d rotateZYX(double angleZ, double angleY, double angleX)
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.
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).rotateY(angleY).rotateX(angleX)
angleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xpublic Matrix4d rotateZYX(double angleZ, double angleY, double angleX, Matrix4d dest)
Matrix4dcangleZ 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)
public Matrix4d rotateAffineZYX(double angleZ, double angleY, double angleX)
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.
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 Xpublic Matrix4d rotateAffineZYX(double angleZ, double angleY, double angleX, Matrix4d dest)
Matrix4dcangleZ 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!
rotateAffineZYX in interface Matrix4dcangleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xdest - will hold the resultpublic Matrix4d rotateYXZ(Vector3d angles)
angles.y radians about the Y axis, followed by a rotation of angles.x radians about the X axis and
followed by a rotation of angles.z radians about the Z axis.
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(angles.y).rotateX(angles.x).rotateZ(angles.z)
angles - the Euler anglespublic Matrix4d rotateYXZ(double angleY, double angleX, double angleZ)
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.
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).rotateX(angleX).rotateZ(angleZ)
angleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zpublic Matrix4d rotateYXZ(double angleY, double angleX, double angleZ, Matrix4d dest)
Matrix4dcangleY 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)
public Matrix4d rotateAffineYXZ(double angleY, double angleX, double angleZ)
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.
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 Zpublic Matrix4d rotateAffineYXZ(double angleY, double angleX, double angleZ, Matrix4d dest)
Matrix4dcangleY 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!
rotateAffineYXZ in interface Matrix4dcangleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zdest - will hold the resultpublic Matrix4d rotation(AxisAngle4f angleAxis)
AxisAngle4f.
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.
The resulting matrix can be multiplied against another transformation matrix to obtain an additional rotation.
In order to apply the rotation transformation to an existing transformation,
use rotate() instead.
Reference: http://en.wikipedia.org
angleAxis - the AxisAngle4f (needs to be normalized)rotate(AxisAngle4f)public Matrix4d rotation(AxisAngle4d angleAxis)
AxisAngle4d.
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.
The resulting matrix can be multiplied against another transformation matrix to obtain an additional rotation.
In order to apply the rotation transformation to an existing transformation,
use rotate() instead.
Reference: http://en.wikipedia.org
angleAxis - the AxisAngle4d (needs to be normalized)rotate(AxisAngle4d)public Matrix4d rotation(Quaterniondc quat)
Quaterniondc.
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.
The resulting matrix can be multiplied against another transformation matrix to obtain an additional rotation.
In order to apply the rotation transformation to an existing transformation,
use rotate() instead.
Reference: http://en.wikipedia.org
quat - the Quaterniondcrotate(Quaterniondc)public Matrix4d rotation(Quaternionfc quat)
Quaternionfc.
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.
The resulting matrix can be multiplied against another transformation matrix to obtain an additional rotation.
In order to apply the rotation transformation to an existing transformation,
use rotate() instead.
Reference: http://en.wikipedia.org
quat - the Quaternionfcrotate(Quaternionfc)public Matrix4d translationRotateScale(double tx, double ty, double tz, double qx, double qy, double qz, double qw, double sx, double sy, double sz)
this matrix to T * R * S, where T is a translation by the given (tx, ty, tz),
R is a rotation transformation specified by the quaternion (qx, qy, qz, qw), and S is a scaling transformation
which scales the three axes x, y and z by (sx, sy, sz).
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and at last the 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.
This method is equivalent to calling: translation(tx, ty, tz).rotate(quat).scale(sx, sy, sz)
tx - the number of units by which to translate the x-componentty - the number of units by which to translate the y-componenttz - the number of units by which to translate the z-componentqx - the x-coordinate of the vector part of the quaternionqy - the y-coordinate of the vector part of the quaternionqz - the z-coordinate of the vector part of the quaternionqw - the scalar part of the quaternionsx - the scaling factor for the x-axissy - the scaling factor for the y-axissz - the scaling factor for the z-axistranslation(double, double, double),
rotate(Quaterniondc),
scale(double, double, double)public Matrix4d translationRotateScale(Vector3fc translation, Quaternionfc quat, Vector3fc scale)
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale.
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and at last the 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.
This method is equivalent to calling: translation(translation).rotate(quat).scale(scale)
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslation(Vector3fc),
rotate(Quaternionfc)public Matrix4d translationRotateScale(Vector3dc translation, Quaterniondc quat, Vector3dc scale)
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale.
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and at last the 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.
This method is equivalent to calling: translation(translation).rotate(quat).scale(scale)
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslation(Vector3dc),
rotate(Quaterniondc),
scale(Vector3dc)public Matrix4d translationRotateScale(double tx, double ty, double tz, double qx, double qy, double qz, double qw, double scale)
this matrix to T * R * S, where T is a translation by the given (tx, ty, tz),
R is a rotation transformation specified by the quaternion (qx, qy, qz, qw), and S is a scaling transformation
which scales all three axes by scale.
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and at last the 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.
This method is equivalent to calling: translation(tx, ty, tz).rotate(quat).scale(scale)
tx - the number of units by which to translate the x-componentty - the number of units by which to translate the y-componenttz - the number of units by which to translate the z-componentqx - the x-coordinate of the vector part of the quaternionqy - the y-coordinate of the vector part of the quaternionqz - the z-coordinate of the vector part of the quaternionqw - the scalar part of the quaternionscale - the scaling factor for all three axestranslation(double, double, double),
rotate(Quaterniondc),
scale(double)public Matrix4d translationRotateScale(Vector3dc translation, Quaterniondc quat, double scale)
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale.
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and at last the 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.
This method is equivalent to calling: translation(translation).rotate(quat).scale(scale)
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslation(Vector3dc),
rotate(Quaterniondc),
scale(double)public Matrix4d translationRotateScale(Vector3fc translation, Quaternionfc quat, double scale)
this matrix to T * R * S, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale.
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and at last the 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.
This method is equivalent to calling: translation(translation).rotate(quat).scale(scale)
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslation(Vector3fc),
rotate(Quaternionfc),
scale(double)public Matrix4d translationRotateScaleInvert(double tx, double ty, double tz, double qx, double qy, double qz, double qw, double sx, double sy, double sz)
this matrix to (T * R * S)-1, where T is a translation by the given (tx, ty, tz),
R is a rotation transformation specified by the quaternion (qx, qy, qz, qw), and S is a scaling transformation
which scales the three axes x, y and z by (sx, sy, sz).
This method is equivalent to calling: translationRotateScale(...).invert()
tx - the number of units by which to translate the x-componentty - the number of units by which to translate the y-componenttz - the number of units by which to translate the z-componentqx - the x-coordinate of the vector part of the quaternionqy - the y-coordinate of the vector part of the quaternionqz - the z-coordinate of the vector part of the quaternionqw - the scalar part of the quaternionsx - the scaling factor for the x-axissy - the scaling factor for the y-axissz - the scaling factor for the z-axistranslationRotateScale(double, double, double, double, double, double, double, double, double, double),
invert()public Matrix4d translationRotateScaleInvert(Vector3dc translation, Quaterniondc quat, Vector3dc scale)
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale.
This method is equivalent to calling: translationRotateScale(...).invert()
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslationRotateScale(Vector3dc, Quaterniondc, Vector3dc),
invert()public Matrix4d translationRotateScaleInvert(Vector3fc translation, Quaternionfc quat, Vector3fc scale)
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales the axes by scale.
This method is equivalent to calling: translationRotateScale(...).invert()
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslationRotateScale(Vector3fc, Quaternionfc, Vector3fc),
invert()public Matrix4d translationRotateScaleInvert(Vector3dc translation, Quaterniondc quat, double scale)
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale.
This method is equivalent to calling: translationRotateScale(...).invert()
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslationRotateScale(Vector3dc, Quaterniondc, double),
invert()public Matrix4d translationRotateScaleInvert(Vector3fc translation, Quaternionfc quat, double scale)
this matrix to (T * R * S)-1, where T is the given translation,
R is a rotation transformation specified by the given quaternion, and S is a scaling transformation
which scales all three axes by scale.
This method is equivalent to calling: translationRotateScale(...).invert()
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorstranslationRotateScale(Vector3fc, Quaternionfc, double),
invert()public Matrix4d translationRotateScaleMulAffine(double tx, double ty, double tz, double qx, double qy, double qz, double qw, double sx, double sy, double sz, Matrix4d m)
this matrix to T * R * S * M, where T is a translation by the given (tx, ty, tz),
R is a rotation - and possibly scaling - transformation specified by the quaternion (qx, qy, qz, qw), S is a scaling transformation
which scales the three axes x, y and z by (sx, sy, sz) and M is an affine matrix.
When transforming a vector by the resulting matrix the transformation described by M will be applied first, then the scaling, then rotation and
at last the 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.
This method is equivalent to calling: translation(tx, ty, tz).rotate(quat).scale(sx, sy, sz).mulAffine(m)
tx - the number of units by which to translate the x-componentty - the number of units by which to translate the y-componenttz - the number of units by which to translate the z-componentqx - the x-coordinate of the vector part of the quaternionqy - the y-coordinate of the vector part of the quaternionqz - the z-coordinate of the vector part of the quaternionqw - the scalar part of the quaternionsx - the scaling factor for the x-axissy - the scaling factor for the y-axissz - the scaling factor for the z-axism - the affine matrix to multiply bytranslation(double, double, double),
rotate(Quaterniondc),
scale(double, double, double),
mulAffine(Matrix4dc)public Matrix4d translationRotateScaleMulAffine(Vector3fc translation, Quaterniondc quat, Vector3fc scale, Matrix4d m)
this matrix to T * R * S * M, where T is the given translation,
R is a rotation - and possibly scaling - transformation specified by the given quaternion, S is a scaling transformation
which scales the axes by scale and M is an affine matrix.
When transforming a vector by the resulting matrix the transformation described by M will be applied first, then the scaling, then rotation and
at last the 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.
This method is equivalent to calling: translation(translation).rotate(quat).scale(scale).mulAffine(m)
translation - the translationquat - the quaternion representing a rotationscale - the scaling factorsm - the affine matrix to multiply bytranslation(Vector3fc),
rotate(Quaterniondc),
mulAffine(Matrix4dc)public Matrix4d translationRotate(double tx, double ty, double tz, double qx, double qy, double qz, double qw)
this matrix to T * R, where T is a translation by the given (tx, ty, tz) and
R is a rotation - and possibly scaling - transformation specified by the quaternion (qx, qy, qz, qw).
When transforming a vector by the resulting matrix the rotation - and possibly scaling - transformation will be applied first and then the 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.
This method is equivalent to calling: translation(tx, ty, tz).rotate(quat)
tx - the number of units by which to translate the x-componentty - the number of units by which to translate the y-componenttz - the number of units by which to translate the z-componentqx - the x-coordinate of the vector part of the quaternionqy - the y-coordinate of the vector part of the quaternionqz - the z-coordinate of the vector part of the quaternionqw - the scalar part of the quaterniontranslation(double, double, double),
rotate(Quaterniondc)public Matrix4d translationRotate(double tx, double ty, double tz, Quaterniondc quat)
this matrix to T * R, where T is a translation by the given (tx, ty, tz) and
R is a rotation - and possibly scaling - transformation specified by the given quaternion.
When transforming a vector by the resulting matrix the rotation - and possibly scaling - transformation will be applied first and then the 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.
This method is equivalent to calling: translation(tx, ty, tz).rotate(quat)
tx - the number of units by which to translate the x-componentty - the number of units by which to translate the y-componenttz - the number of units by which to translate the z-componentquat - the quaternion representing a rotationtranslation(double, double, double),
rotate(Quaterniondc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
rotate in interface Matrix4dcquat - the Quaterniondcdest - will hold the resultrotation(Quaterniondc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
rotate in interface Matrix4dcquat - the Quaternionfcdest - will hold the resultrotation(Quaternionfc)public Matrix4d rotate(Quaterniondc quat)
Quaterniondc to this matrix.
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
quat - the Quaterniondcrotation(Quaterniondc)public Matrix4d rotate(Quaternionfc quat)
Quaternionfc to this matrix.
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
quat - the Quaternionfcrotation(Quaternionfc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
rotateAffine in interface Matrix4dcquat - the Quaterniondcdest - will hold the resultrotation(Quaterniondc)public Matrix4d rotateAffine(Quaterniondc quat)
Quaterniondc to this matrix.
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
quat - the Quaterniondcrotation(Quaterniondc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
rotateTranslation in interface Matrix4dcquat - the Quaterniondcdest - will hold the resultrotation(Quaterniondc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
rotateTranslation in interface Matrix4dcquat - the Quaternionfcdest - will hold the resultrotation(Quaternionfc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without pre-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
rotateLocal in interface Matrix4dcquat - the Quaterniondcdest - will hold the resultrotation(Quaterniondc)public Matrix4d rotateLocal(Quaterniondc quat)
Quaterniondc to this matrix.
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!
In order to set the matrix to a rotation transformation without pre-multiplying,
use rotation(Quaterniondc).
Reference: http://en.wikipedia.org
quat - the Quaterniondcrotation(Quaterniondc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
rotateAffine in interface Matrix4dcquat - the Quaternionfcdest - will hold the resultrotation(Quaternionfc)public Matrix4d rotateAffine(Quaternionfc quat)
Quaternionfc to this matrix.
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
quat - the Quaternionfcrotation(Quaternionfc)public Matrix4d 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!
In order to set the matrix to a rotation transformation without pre-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
rotateLocal in interface Matrix4dcquat - the Quaternionfcdest - will hold the resultrotation(Quaternionfc)public Matrix4d rotateLocal(Quaternionfc quat)
Quaternionfc to this matrix.
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!
In order to set the matrix to a rotation transformation without pre-multiplying,
use rotation(Quaternionfc).
Reference: http://en.wikipedia.org
quat - the Quaternionfcrotation(Quaternionfc)public Matrix4d rotate(AxisAngle4f axisAngle)
AxisAngle4f, to this matrix.
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(AxisAngle4f).
Reference: http://en.wikipedia.org
axisAngle - the AxisAngle4f (needs to be normalized)rotate(double, double, double, double),
rotation(AxisAngle4f)public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(AxisAngle4f).
Reference: http://en.wikipedia.org
rotate in interface Matrix4dcaxisAngle - the AxisAngle4f (needs to be normalized)dest - will hold the resultrotate(double, double, double, double),
rotation(AxisAngle4f)public Matrix4d rotate(AxisAngle4d axisAngle)
AxisAngle4d, to this matrix.
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(AxisAngle4d).
Reference: http://en.wikipedia.org
axisAngle - the AxisAngle4d (needs to be normalized)rotate(double, double, double, double),
rotation(AxisAngle4d)public 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(AxisAngle4d).
Reference: http://en.wikipedia.org
rotate in interface Matrix4dcaxisAngle - the AxisAngle4d (needs to be normalized)dest - will hold the resultrotate(double, double, double, double),
rotation(AxisAngle4d)public Matrix4d rotate(double angle, Vector3dc axis)
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(double, Vector3dc).
Reference: http://en.wikipedia.org
angle - the angle in radiansaxis - the rotation axis (needs to be normalized)rotate(double, double, double, double),
rotation(double, Vector3dc)public 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(double, Vector3dc).
Reference: http://en.wikipedia.org
rotate in interface Matrix4dcangle - the angle in radiansaxis - the rotation axis (needs to be normalized)dest - will hold the resultrotate(double, double, double, double),
rotation(double, Vector3dc)public Matrix4d rotate(double angle, Vector3fc axis)
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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(double, Vector3fc).
Reference: http://en.wikipedia.org
angle - the angle in radiansaxis - the rotation axis (needs to be normalized)rotate(double, double, double, double),
rotation(double, Vector3fc)public 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!
In order to set the matrix to a rotation transformation without post-multiplying,
use rotation(double, Vector3fc).
Reference: http://en.wikipedia.org
rotate in interface Matrix4dcangle - the angle in radiansaxis - the rotation axis (needs to be normalized)dest - will hold the resultrotate(double, double, double, double),
rotation(double, Vector3fc)public Vector4d getRow(int row, Vector4d dest) throws IndexOutOfBoundsException
Matrix4dcrow index, starting with 0.getRow in interface Matrix4dcrow - the row index in [0..3]dest - will hold the row componentsIndexOutOfBoundsException - if row is not in [0..3]public Vector3d getRow(int row, Vector3d dest) throws IndexOutOfBoundsException
Matrix4dcrow index, starting with 0.getRow in interface Matrix4dcrow - the row index in [0..3]dest - will hold the first three row componentsIndexOutOfBoundsException - if row is not in [0..3]public Matrix4d setRow(int row, Vector4dc src) throws IndexOutOfBoundsException
row index, starting with 0.row - the row index in [0..3]src - the row components to setIndexOutOfBoundsException - if row is not in [0..3]public Vector4d getColumn(int column, Vector4d dest) throws IndexOutOfBoundsException
Matrix4dccolumn index, starting with 0.getColumn in interface Matrix4dccolumn - the column index in [0..3]dest - will hold the column componentsIndexOutOfBoundsException - if column is not in [0..3]public Vector3d getColumn(int column, Vector3d dest) throws IndexOutOfBoundsException
Matrix4dccolumn index, starting with 0.getColumn in interface Matrix4dccolumn - the column index in [0..3]dest - will hold the first three column componentsIndexOutOfBoundsException - if column is not in [0..3]public Matrix4d setColumn(int column, Vector4dc src) throws IndexOutOfBoundsException
column index, starting with 0.column - the column index in [0..3]src - the column components to setIndexOutOfBoundsException - if column is not in [0..3]public Matrix4d normal()
this
and store it into the upper left 3x3 submatrix of this.
All other values of this will be set to identity.
The normal matrix of m is the transpose of the inverse of m.
Please note that, if this is an orthogonal matrix or a matrix whose columns are orthogonal vectors,
then this method need not be invoked, since in that case this itself is its normal matrix.
In that case, use set3x3(Matrix4dc) to set a given Matrix4f to only the upper left 3x3 submatrix
of this matrix.
set3x3(Matrix4dc)public 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.
Please note that, if this is an orthogonal matrix or a matrix whose columns are orthogonal vectors,
then this method need not be invoked, since in that case this itself is its normal matrix.
In that case, use set3x3(Matrix4dc) to set a given Matrix4d to only the upper left 3x3 submatrix
of a given matrix.
normal in interface Matrix4dcdest - will hold the resultset3x3(Matrix4dc)public Matrix3d normal(Matrix3d dest)
this
and store it into dest.
The normal matrix of m is the transpose of the inverse of m.
Please note that, if this is an orthogonal matrix or a matrix whose columns are orthogonal vectors,
then this method need not be invoked, since in that case this itself is its normal matrix.
In that case, use Matrix3d.set(Matrix4dc) to set a given Matrix3d to only the upper left 3x3 submatrix
of this matrix.
normal in interface Matrix4dcdest - will hold the resultMatrix3d.set(Matrix4dc),
get3x3(Matrix3d)public Matrix4d cofactor3x3()
this.
The cofactor matrix can be used instead of normal() to transform normals
when the orientation of the normals with respect to the surface should be preserved.
public Matrix3d cofactor3x3(Matrix3d dest)
this
and store it into dest.
The cofactor matrix can be used instead of normal(Matrix3d) to transform normals
when the orientation of the normals with respect to the surface should be preserved.
cofactor3x3 in interface Matrix4dcdest - will hold the resultpublic Matrix4d cofactor3x3(Matrix4d dest)
this
and store it into dest.
All other values of dest will be set to identity.
The cofactor matrix can be used instead of normal(Matrix4d) to transform normals
when the orientation of the normals with respect to the surface should be preserved.
cofactor3x3 in interface Matrix4dcdest - will hold the resultpublic Matrix4d normalize3x3()
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).
public Matrix4d normalize3x3(Matrix4d dest)
Matrix4dcdest.
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).
normalize3x3 in interface Matrix4dcdest - will hold the resultpublic Matrix3d normalize3x3(Matrix3d dest)
Matrix4dcdest.
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).
normalize3x3 in interface Matrix4dcdest - will hold the resultpublic Vector4d unproject(double winX, double winY, double winZ, int[] viewport, Vector4d dest)
Matrix4dc(winX, winY, winZ) by this matrix using the specified viewport.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
The depth range of winZ is assumed to be [0..1], which is also the OpenGL default.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using Matrix4dc.invert(Matrix4d) and then the method unprojectInv() can be invoked on it.
unproject in interface Matrix4dcwinX - 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 positionMatrix4dc.unprojectInv(double, double, double, int[], Vector4d),
Matrix4dc.invert(Matrix4d)public Vector3d unproject(double winX, double winY, double winZ, int[] viewport, Vector3d dest)
Matrix4dc(winX, winY, winZ) by this matrix using the specified viewport.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
The depth range of winZ is assumed to be [0..1], which is also the OpenGL default.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using Matrix4dc.invert(Matrix4d) and then the method unprojectInv() can be invoked on it.
unproject in interface Matrix4dcwinX - 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 positionMatrix4dc.unprojectInv(double, double, double, int[], Vector3d),
Matrix4dc.invert(Matrix4d)public Vector4d unproject(Vector3dc winCoords, int[] viewport, Vector4d dest)
Matrix4dcwinCoords 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 Matrix4dc.invert(Matrix4d) and then the method unprojectInv() can be invoked on it.
unproject in interface Matrix4dcwinCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionMatrix4dc.unprojectInv(double, double, double, int[], Vector4d),
Matrix4dc.unproject(double, double, double, int[], Vector4d),
Matrix4dc.invert(Matrix4d)public Vector3d unproject(Vector3dc winCoords, int[] viewport, Vector3d dest)
Matrix4dcwinCoords 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 Matrix4dc.invert(Matrix4d) and then the method unprojectInv() can be invoked on it.
unproject in interface Matrix4dcwinCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionMatrix4dc.unprojectInv(double, double, double, int[], Vector4d),
Matrix4dc.unproject(double, double, double, int[], Vector4d),
Matrix4dc.invert(Matrix4d)public Matrix4d unprojectRay(double winX, double winY, int[] viewport, Vector3d originDest, Vector3d dirDest)
Matrix4dc(winX, winY) by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0.
This method first converts the given window coordinates to normalized device coordinates in the range [-1..1]
and then transforms those NDC coordinates by the inverse of this matrix.
As a necessary computation step for unprojecting, this method computes the inverse of this matrix.
In order to avoid computing the matrix inverse with every invocation, the inverse of this matrix can be built
once outside using Matrix4dc.invert(Matrix4d) and then the method unprojectInvRay() can be invoked on it.
unprojectRay in interface Matrix4dcwinX - 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 directionMatrix4dc.unprojectInvRay(double, double, int[], Vector3d, Vector3d),
Matrix4dc.invert(Matrix4d)public Matrix4d unprojectRay(Vector2dc winCoords, int[] viewport, Vector3d originDest, Vector3d dirDest)
Matrix4dcwinCoords 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 Matrix4dc.invert(Matrix4d) and then the method unprojectInvRay() can be invoked on it.
unprojectRay in interface Matrix4dcwinCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]originDest - will hold the ray origindirDest - will hold the (unnormalized) ray directionMatrix4dc.unprojectInvRay(double, double, int[], Vector3d, Vector3d),
Matrix4dc.unprojectRay(double, double, int[], Vector3d, Vector3d),
Matrix4dc.invert(Matrix4d)public Vector4d unprojectInv(Vector3dc winCoords, int[] viewport, Vector4d dest)
Matrix4dcwinCoords 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.
unprojectInv in interface Matrix4dcwinCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionMatrix4dc.unproject(Vector3dc, int[], Vector4d)public Vector4d unprojectInv(double winX, double winY, double winZ, int[] viewport, Vector4d dest)
Matrix4dc(winX, winY, winZ) by this matrix using the specified viewport.
This method differs from unproject()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
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.
unprojectInv in interface Matrix4dcwinX - 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 positionMatrix4dc.unproject(double, double, double, int[], Vector4d)public Vector3d unprojectInv(Vector3dc winCoords, int[] viewport, Vector3d dest)
Matrix4dcwinCoords 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.
unprojectInv in interface Matrix4dcwinCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]dest - will hold the unprojected positionMatrix4dc.unproject(Vector3dc, int[], Vector3d)public Vector3d unprojectInv(double winX, double winY, double winZ, int[] viewport, Vector3d dest)
Matrix4dc(winX, winY, winZ) by this matrix using the specified viewport.
This method differs from unproject()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
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.
unprojectInv in interface Matrix4dcwinX - 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 positionMatrix4dc.unproject(double, double, double, int[], Vector3d)public Matrix4d unprojectInvRay(Vector2dc winCoords, int[] viewport, Vector3d originDest, Vector3d dirDest)
Matrix4dcwinCoords 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.
unprojectInvRay in interface Matrix4dcwinCoords - the window coordinates to unprojectviewport - the viewport described by [x, y, width, height]originDest - will hold the ray origindirDest - will hold the (unnormalized) ray directionMatrix4dc.unprojectRay(Vector2dc, int[], Vector3d, Vector3d)public Matrix4d unprojectInvRay(double winX, double winY, int[] viewport, Vector3d originDest, Vector3d dirDest)
Matrix4dc(winX, winY) by this matrix using the specified viewport
and compute the origin and the direction of the resulting ray which starts at NDC z = -1.0 and goes through NDC z = +1.0.
This method differs from unprojectRay()
in that it assumes that this is already the inverse matrix of the original projection matrix.
It exists to avoid recomputing the matrix inverse with every invocation.
unprojectInvRay in interface Matrix4dcwinX - 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 directionMatrix4dc.unprojectRay(double, double, int[], Vector3d, Vector3d)public Vector4d project(double x, double y, double z, int[] viewport, Vector4d dest)
Matrix4dc(x, y, z) position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest.
This method transforms the given coordinates by this matrix including perspective division to
obtain normalized device coordinates, and then translates these into window coordinates by using the
given viewport settings [x, y, width, height].
The depth range of the returned winCoordsDest.z will be [0..1], which is also the OpenGL default.
project in interface Matrix4dcx - 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]dest - will hold the projected window coordinatespublic Vector3d project(double x, double y, double z, int[] viewport, Vector3d dest)
Matrix4dc(x, y, z) position via this matrix using the specified viewport
and store the resulting window coordinates in winCoordsDest.
This method transforms the given coordinates by this matrix including perspective division to
obtain normalized device coordinates, and then translates these into window coordinates by using the
given viewport settings [x, y, width, height].
The depth range of the returned winCoordsDest.z will be [0..1], which is also the OpenGL default.
project in interface Matrix4dcx - 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]dest - will hold the projected window coordinatespublic Vector4d project(Vector3dc position, int[] viewport, Vector4d dest)
Matrix4dcposition 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.
project in interface Matrix4dcposition - the position to project into window coordinatesviewport - the viewport described by [x, y, width, height]dest - will hold the projected window coordinatesMatrix4dc.project(double, double, double, int[], Vector4d)public Vector3d project(Vector3dc position, int[] viewport, Vector3d dest)
Matrix4dcposition 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.
project in interface Matrix4dcposition - the position to project into window coordinatesviewport - the viewport described by [x, y, width, height]dest - will hold the projected window coordinatesMatrix4dc.project(double, double, double, int[], Vector4d)public Matrix4d reflect(double a, double b, double c, double d, Matrix4d dest)
Matrix4dcx*a + y*b + z*c + d = 0 and store the result in dest.
The vector (a, b, c) must be a unit vector.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
Reference: msdn.microsoft.com
public Matrix4d reflect(double a, double b, double c, double d)
x*a + y*b + z*c + d = 0.
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 equationpublic Matrix4d reflect(double nx, double ny, double nz, double px, double py, double pz)
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 planepublic Matrix4d reflect(double nx, double ny, double nz, double px, double py, double pz, Matrix4d dest)
Matrix4dcdest.
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!
reflect in interface Matrix4dcnx - 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 resultpublic Matrix4d reflect(Vector3dc normal, Vector3dc 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!
normal - the plane normalpoint - a point on the planepublic Matrix4d reflect(Quaterniondc orientation, Vector3dc point)
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 orientation relative to an implied normal vector of (0, 0, 1)point - a point on the planepublic Matrix4d reflect(Quaterniondc orientation, Vector3dc point, Matrix4d dest)
Matrix4dcdest.
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!
public Matrix4d reflect(Vector3dc normal, Vector3dc point, Matrix4d dest)
Matrix4dcdest.
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!
public Matrix4d reflection(double a, double b, double c, double d)
x*a + y*b + z*c + d = 0.
The vector (a, b, c) must be a unit vector.
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 equationpublic Matrix4d reflection(double nx, double ny, double nz, double px, double py, double pz)
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 planepublic Matrix4d reflection(Vector3dc normal, Vector3dc point)
normal - the plane normalpoint - a point on the planepublic Matrix4d reflection(Quaterniondc orientation, Vector3dc point)
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.
orientation - the plane orientationpoint - a point on the planepublic Matrix4d 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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho().
Reference: http://www.songho.ca
ortho in interface Matrix4dcleft - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancezZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultsetOrtho(double, double, double, double, double, double, boolean)public Matrix4d ortho(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho().
Reference: http://www.songho.ca
ortho in interface Matrix4dcleft - 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 resultsetOrtho(double, double, double, double, double, double)public Matrix4d ortho(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho().
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 falsesetOrtho(double, double, double, double, double, double, boolean)public Matrix4d ortho(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1] to this matrix.
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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho().
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 distancesetOrtho(double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrthoLH().
Reference: http://www.songho.ca
orthoLH in interface Matrix4dcleft - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancezZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultsetOrthoLH(double, double, double, double, double, double, boolean)public Matrix4d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrthoLH().
Reference: http://www.songho.ca
orthoLH in interface Matrix4dcleft - 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 resultsetOrthoLH(double, double, double, double, double, double)public Matrix4d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrthoLH().
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 falsesetOrthoLH(double, double, double, double, double, double, boolean)public Matrix4d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1] to this matrix.
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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrthoLH().
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 distancesetOrthoLH(double, double, double, double, double, double)public Matrix4d setOrtho(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
In order to apply the orthographic projection to an already existing transformation,
use ortho().
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 falseortho(double, double, double, double, double, double, boolean)public Matrix4d setOrtho(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1].
In order to apply the orthographic projection to an already existing transformation,
use ortho().
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 distanceortho(double, double, double, double, double, double)public Matrix4d setOrthoLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
In order to apply the orthographic projection to an already existing transformation,
use orthoLH().
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 falseorthoLH(double, double, double, double, double, double, boolean)public Matrix4d setOrthoLH(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1].
In order to apply the orthographic projection to an already existing transformation,
use orthoLH().
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 distanceorthoLH(double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetric().
Reference: http://www.songho.ca
orthoSymmetric in interface Matrix4dcwidth - 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 falsesetOrthoSymmetric(double, double, double, double, boolean)public Matrix4d orthoSymmetric(double width, double height, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
This method is equivalent to calling ortho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetric().
Reference: http://www.songho.ca
orthoSymmetric in interface Matrix4dcwidth - 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 resultsetOrthoSymmetric(double, double, double, double)public Matrix4d orthoSymmetric(double width, double height, double zNear, double zFar, boolean zZeroToOne)
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!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetric().
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 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 falsesetOrthoSymmetric(double, double, double, double, boolean)public Matrix4d orthoSymmetric(double width, double height, double zNear, double zFar)
[-1..+1] to this matrix.
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!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetric().
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 distancesetOrthoSymmetric(double, double, double, double)public Matrix4d 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!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetricLH().
Reference: http://www.songho.ca
orthoSymmetricLH in interface Matrix4dcwidth - 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 falsesetOrthoSymmetricLH(double, double, double, double, boolean)public Matrix4d orthoSymmetricLH(double width, double height, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
This method is equivalent to calling orthoLH() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetricLH().
Reference: http://www.songho.ca
orthoSymmetricLH in interface Matrix4dcwidth - 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 resultsetOrthoSymmetricLH(double, double, double, double)public Matrix4d orthoSymmetricLH(double width, double height, double zNear, double zFar, boolean zZeroToOne)
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!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetricLH().
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 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 falsesetOrthoSymmetricLH(double, double, double, double, boolean)public Matrix4d orthoSymmetricLH(double width, double height, double zNear, double zFar)
[-1..+1] to this matrix.
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!
In order to set the matrix to a symmetric orthographic projection without post-multiplying it,
use setOrthoSymmetricLH().
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 distancesetOrthoSymmetricLH(double, double, double, double)public Matrix4d setOrthoSymmetric(double width, double height, double zNear, double zFar, boolean zZeroToOne)
This method is equivalent to calling setOrtho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
In order to apply the symmetric orthographic projection to an already existing transformation,
use orthoSymmetric().
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 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 falseorthoSymmetric(double, double, double, double, boolean)public Matrix4d setOrthoSymmetric(double width, double height, double zNear, double zFar)
[-1..+1].
This method is equivalent to calling setOrtho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
In order to apply the symmetric orthographic projection to an already existing transformation,
use orthoSymmetric().
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 distanceorthoSymmetric(double, double, double, double)public Matrix4d setOrthoSymmetricLH(double width, double height, double zNear, double zFar, boolean zZeroToOne)
This method is equivalent to calling setOrtho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
In order to apply the symmetric orthographic projection to an already existing transformation,
use orthoSymmetricLH().
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 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 falseorthoSymmetricLH(double, double, double, double, boolean)public Matrix4d setOrthoSymmetricLH(double width, double height, double zNear, double zFar)
[-1..+1].
This method is equivalent to calling setOrthoLH() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
In order to apply the symmetric orthographic projection to an already existing transformation,
use orthoSymmetricLH().
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 distanceorthoSymmetricLH(double, double, double, double)public Matrix4d 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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho().
Reference: http://www.songho.ca
ortho2D in interface Matrix4dcleft - 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),
setOrtho2D(double, double, double, double)public Matrix4d ortho2D(double left, double right, double bottom, double top)
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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho2D().
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 edgeortho(double, double, double, double, double, double),
setOrtho2D(double, double, double, double)public 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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrthoLH().
Reference: http://www.songho.ca
ortho2DLH in interface Matrix4dcleft - 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),
setOrtho2DLH(double, double, double, double)public Matrix4d ortho2DLH(double left, double right, double bottom, double top)
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!
In order to set the matrix to an orthographic projection without post-multiplying it,
use setOrtho2DLH().
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 edgeorthoLH(double, double, double, double, double, double),
setOrtho2DLH(double, double, double, double)public Matrix4d setOrtho2D(double left, double right, double bottom, double top)
This method is equivalent to calling setOrtho() with
zNear=-1 and zFar=+1.
In order to apply the orthographic projection to an already existing transformation,
use ortho2D().
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 edgesetOrtho(double, double, double, double, double, double),
ortho2D(double, double, double, double)public Matrix4d setOrtho2DLH(double left, double right, double bottom, double top)
This method is equivalent to calling setOrthoLH() with
zNear=-1 and zFar=+1.
In order to apply the orthographic projection to an already existing transformation,
use ortho2DLH().
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 edgesetOrthoLH(double, double, double, double, double, double),
ortho2DLH(double, double, double, double)public Matrix4d lookAlong(Vector3dc dir, Vector3dc up)
-z point along dir.
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.
In order to set the matrix to a lookalong transformation without post-multiplying it,
use setLookAlong().
dir - the direction in space to look alongup - the direction of 'up'lookAlong(double, double, double, double, double, double),
lookAt(Vector3dc, Vector3dc, Vector3dc),
setLookAlong(Vector3dc, Vector3dc)public 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.
In order to set the matrix to a lookalong transformation without post-multiplying it,
use setLookAlong().
lookAlong in interface Matrix4dcdir - the direction in space to look alongup - the direction of 'up'dest - will hold the resultlookAlong(double, double, double, double, double, double),
lookAt(Vector3dc, Vector3dc, Vector3dc),
setLookAlong(Vector3dc, Vector3dc)public 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.
In order to set the matrix to a lookalong transformation without post-multiplying it,
use setLookAlong()
lookAlong in interface Matrix4dcdirX - 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),
setLookAlong(double, double, double, double, double, double)public Matrix4d lookAlong(double dirX, double dirY, double dirZ, double upX, double upY, double upZ)
-z point along dir.
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.
In order to set the matrix to a lookalong transformation without post-multiplying it,
use setLookAlong()
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 vectorlookAt(double, double, double, double, double, double, double, double, double),
setLookAlong(double, double, double, double, double, double)public Matrix4d setLookAlong(Vector3dc dir, Vector3dc up)
-z
point along dir.
This is equivalent to calling
setLookAt()
with eye = (0, 0, 0) and center = dir.
In order to apply the lookalong transformation to any previous existing transformation,
use lookAlong(Vector3dc, Vector3dc).
dir - the direction in space to look alongup - the direction of 'up'setLookAlong(Vector3dc, Vector3dc),
lookAlong(Vector3dc, Vector3dc)public Matrix4d setLookAlong(double dirX, double dirY, double dirZ, double upX, double upY, double upZ)
-z
point along dir.
This is equivalent to calling
setLookAt() with eye = (0, 0, 0) and center = dir.
In order to apply the lookalong transformation to any previous existing transformation,
use lookAlong()
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 vectorsetLookAlong(double, double, double, double, double, double),
lookAlong(double, double, double, double, double, double)public Matrix4d setLookAt(Vector3dc eye, Vector3dc center, Vector3dc up)
-z with center - eye.
In order to not make use of vectors to specify eye, center and up but use primitives,
like in the GLU function, use setLookAt()
instead.
In order to apply the lookat transformation to a previous existing transformation,
use lookAt().
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'setLookAt(double, double, double, double, double, double, double, double, double),
lookAt(Vector3dc, Vector3dc, Vector3dc)public Matrix4d setLookAt(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ)
-z with center - eye.
In order to apply the lookat transformation to a previous existing transformation,
use lookAt.
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 vectorsetLookAt(Vector3dc, Vector3dc, Vector3dc),
lookAt(double, double, double, double, double, double, double, double, double)public 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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAt(Vector3dc, Vector3dc, Vector3dc).
lookAt in interface Matrix4dceye - 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),
setLookAlong(Vector3dc, Vector3dc)public Matrix4d lookAt(Vector3dc eye, Vector3dc center, Vector3dc up)
-z with center - eye.
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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAt(Vector3dc, Vector3dc, Vector3dc).
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'lookAt(double, double, double, double, double, double, double, double, double),
setLookAlong(Vector3dc, Vector3dc)public 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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAt().
lookAt in interface Matrix4dceyeX - 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),
setLookAt(double, double, double, double, double, double, double, double, double)public Matrix4d lookAt(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ)
-z with center - eye.
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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAt().
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 vectorlookAt(Vector3dc, Vector3dc, Vector3dc),
setLookAt(double, double, double, double, double, double, double, double, double)public 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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAt().
lookAtPerspective in interface Matrix4dceyeX - 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 resultsetLookAt(double, double, double, double, double, double, double, double, double)public Matrix4d setLookAtLH(Vector3dc eye, Vector3dc center, Vector3dc up)
+z with center - eye.
In order to not make use of vectors to specify eye, center and up but use primitives,
like in the GLU function, use setLookAtLH()
instead.
In order to apply the lookat transformation to a previous existing transformation,
use lookAt().
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'setLookAtLH(double, double, double, double, double, double, double, double, double),
lookAtLH(Vector3dc, Vector3dc, Vector3dc)public Matrix4d setLookAtLH(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ)
+z with center - eye.
In order to apply the lookat transformation to a previous existing transformation,
use lookAtLH.
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 vectorsetLookAtLH(Vector3dc, Vector3dc, Vector3dc),
lookAtLH(double, double, double, double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAtLH(Vector3dc, Vector3dc, Vector3dc).
lookAtLH in interface Matrix4dceye - the position of the cameracenter - the point in space to look atup - the direction of 'up'dest - will hold the resultlookAtLH(double, double, double, double, double, double, double, double, double),
setLookAtLH(Vector3dc, Vector3dc, Vector3dc)public Matrix4d lookAtLH(Vector3dc eye, Vector3dc center, Vector3dc up)
+z with center - eye.
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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAtLH(Vector3dc, Vector3dc, Vector3dc).
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'lookAtLH(double, double, double, double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAtLH().
lookAtLH in interface Matrix4dceyeX - 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),
setLookAtLH(double, double, double, double, double, double, double, double, double)public Matrix4d lookAtLH(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ)
+z with center - eye.
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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAtLH().
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 vectorlookAtLH(Vector3dc, Vector3dc, Vector3dc),
setLookAtLH(double, double, double, double, double, double, double, double, double)public 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!
In order to set the matrix to a lookat transformation without post-multiplying it,
use setLookAtLH().
lookAtPerspectiveLH in interface Matrix4dceyeX - 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 resultsetLookAtLH(double, double, double, double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspective.
perspective in interface Matrix4dcfovy - 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 falsesetPerspective(double, double, double, double, boolean)public Matrix4d perspective(double fovy, double aspect, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspective.
perspective in interface Matrix4dcfovy - 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 resultsetPerspective(double, double, double, double)public Matrix4d perspective(double fovy, double aspect, double zNear, double zFar, boolean zZeroToOne)
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspective.
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 falsesetPerspective(double, double, double, double, boolean)public Matrix4d perspective(double fovy, double aspect, double zNear, double zFar)
[-1..+1] to this matrix.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspective.
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.setPerspective(double, double, double, double)public Matrix4d perspectiveRect(double width, double height, 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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveRect.
perspectiveRect in interface Matrix4dcwidth - the width of the near frustum planeheight - the height of the near frustum planezNear - 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 falsesetPerspectiveRect(double, double, double, double, boolean)public Matrix4d perspectiveRect(double width, double height, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveRect.
perspectiveRect in interface Matrix4dcwidth - the width of the near frustum planeheight - the height of the near frustum planezNear - 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 resultsetPerspectiveRect(double, double, double, double)public Matrix4d perspectiveRect(double width, double height, double zNear, double zFar, boolean zZeroToOne)
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveRect.
perspectiveRect in interface Matrix4dcwidth - the width of the near frustum planeheight - the height of the near frustum planezNear - 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 falsesetPerspectiveRect(double, double, double, double, boolean)public Matrix4d perspectiveRect(double width, double height, double zNear, double zFar)
[-1..+1] to this matrix.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveRect.
perspectiveRect in interface Matrix4dcwidth - the width of the near frustum planeheight - the height of the near frustum planezNear - 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.setPerspectiveRect(double, double, double, double)public Matrix4d perspectiveOffCenter(double fovy, double offAngleX, double offAngleY, double aspect, double zNear, double zFar, boolean zZeroToOne, Matrix4d dest)
dest.
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveOffCenter.
perspectiveOffCenter in interface Matrix4dcfovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value 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 falsesetPerspectiveOffCenter(double, double, double, double, double, double, boolean)public Matrix4d perspectiveOffCenter(double fovy, double offAngleX, double offAngleY, double aspect, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveOffCenter.
perspectiveOffCenter in interface Matrix4dcfovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value 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 resultsetPerspectiveOffCenter(double, double, double, double, double, double)public Matrix4d perspectiveOffCenter(double fovy, double offAngleX, double offAngleY, double aspect, double zNear, double zFar, boolean zZeroToOne)
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveOffCenter.
perspectiveOffCenter in interface Matrix4dcfovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value 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 falsesetPerspectiveOffCenter(double, double, double, double, double, double, boolean)public Matrix4d perspectiveOffCenter(double fovy, double offAngleX, double offAngleY, double aspect, double zNear, double zFar)
[-1..+1] to this matrix.
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveOffCenter.
perspectiveOffCenter in interface Matrix4dcfovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value 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.setPerspectiveOffCenter(double, double, double, double, double, double)public Matrix4d setPerspective(double fovy, double aspect, double zNear, double zFar, boolean zZeroToOne)
In order to apply the perspective projection transformation to an existing transformation,
use perspective().
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 falseperspective(double, double, double, double, boolean)public Matrix4d setPerspective(double fovy, double aspect, double zNear, double zFar)
[-1..+1].
In order to apply the perspective projection transformation to an existing transformation,
use perspective().
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.perspective(double, double, double, double)public Matrix4d setPerspectiveRect(double width, double height, double zNear, double zFar, boolean zZeroToOne)
In order to apply the perspective projection transformation to an existing transformation,
use perspectiveRect().
width - the width of the near frustum planeheight - the height of the near frustum planezNear - 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 falseperspectiveRect(double, double, double, double, boolean)public Matrix4d setPerspectiveRect(double width, double height, double zNear, double zFar)
[-1..+1].
In order to apply the perspective projection transformation to an existing transformation,
use perspectiveRect().
width - the width of the near frustum planeheight - the height of the near frustum planezNear - near clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the near clipping plane will be at positive infinity.
In that case, zFar may not also be Float.POSITIVE_INFINITY.zFar - far clipping plane distance. If the special value Float.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
In that case, zNear may not also be Float.POSITIVE_INFINITY.perspectiveRect(double, double, double, double)public Matrix4d setPerspectiveOffCenter(double fovy, double offAngleX, double offAngleY, double aspect, double zNear, double zFar)
[-1..+1].
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
In order to apply the perspective projection transformation to an existing transformation,
use perspectiveOffCenter().
fovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value 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.perspectiveOffCenter(double, double, double, double, double, double)public Matrix4d setPerspectiveOffCenter(double fovy, double offAngleX, double offAngleY, double aspect, double zNear, double zFar, boolean zZeroToOne)
The given angles offAngleX and offAngleY are the horizontal and vertical angles between
the line of sight and the line given by the center of the near and far frustum planes. So, when offAngleY
is just fovy/2 then the projection frustum is rotated towards +Y and the bottom frustum plane
is parallel to the XZ-plane.
In order to apply the perspective projection transformation to an existing transformation,
use perspectiveOffCenter().
fovy - the vertical field of view in radians (must be greater than zero and less than PI)offAngleX - the horizontal angle between the line of sight and the line crossing the center of the near and far frustum planesoffAngleY - the vertical angle between the line of sight and the line crossing the center of the near and far frustum planesaspect - the aspect ratio (i.e. width / height; must be greater than zero)zNear - near clipping plane distance. If the special value 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 falseperspectiveOffCenter(double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveLH.
perspectiveLH in interface Matrix4dcfovy - 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 falsedest - will hold the resultsetPerspectiveLH(double, double, double, double, boolean)public Matrix4d perspectiveLH(double fovy, double aspect, double zNear, double zFar, boolean zZeroToOne)
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveLH.
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 falsesetPerspectiveLH(double, double, double, double, boolean)public Matrix4d perspectiveLH(double fovy, double aspect, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveLH.
perspectiveLH in interface Matrix4dcfovy - 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 resultsetPerspectiveLH(double, double, double, double)public Matrix4d perspectiveLH(double fovy, double aspect, double zNear, double zFar)
[-1..+1] to this matrix.
If M is this matrix and P the perspective projection matrix,
then the new matrix will be M * P. So when transforming a
vector v with the new matrix by using M * P * v,
the perspective projection will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setPerspectiveLH.
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.setPerspectiveLH(double, double, double, double)public Matrix4d setPerspectiveLH(double fovy, double aspect, double zNear, double zFar, boolean zZeroToOne)
[-1..+1].
In order to apply the perspective projection transformation to an existing transformation,
use perspectiveLH().
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 falseperspectiveLH(double, double, double, double, boolean)public Matrix4d setPerspectiveLH(double fovy, double aspect, double zNear, double zFar)
[-1..+1].
In order to apply the perspective projection transformation to an existing transformation,
use perspectiveLH().
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.perspectiveLH(double, double, double, double)public Matrix4d 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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustum().
Reference: http://www.songho.ca
frustum in interface Matrix4dcleft - 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 falsedest - will hold the resultsetFrustum(double, double, double, double, double, double, boolean)public Matrix4d frustum(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and F the frustum matrix,
then the new matrix will be M * F. So when transforming a
vector v with the new matrix by using M * F * v,
the frustum transformation will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustum().
Reference: http://www.songho.ca
frustum in interface Matrix4dcleft - 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 resultsetFrustum(double, double, double, double, double, double)public Matrix4d frustum(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustum().
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 falsesetFrustum(double, double, double, double, double, double, boolean)public Matrix4d frustum(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1] to this matrix.
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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustum().
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.setFrustum(double, double, double, double, double, double)public Matrix4d setFrustum(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
In order to apply the perspective frustum transformation to an existing transformation,
use frustum().
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 falsefrustum(double, double, double, double, double, double, boolean)public Matrix4d setFrustum(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1].
In order to apply the perspective frustum transformation to an existing transformation,
use frustum().
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.frustum(double, double, double, double, double, double)public Matrix4d 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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustumLH().
Reference: http://www.songho.ca
frustumLH in interface Matrix4dcleft - 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 falsedest - will hold the resultsetFrustumLH(double, double, double, double, double, double, boolean)public Matrix4d frustumLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustumLH().
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 falsesetFrustumLH(double, double, double, double, double, double, boolean)public Matrix4d frustumLH(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and F the frustum matrix,
then the new matrix will be M * F. So when transforming a
vector v with the new matrix by using M * F * v,
the frustum transformation will be applied first!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustumLH().
Reference: http://www.songho.ca
frustumLH in interface Matrix4dcleft - 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 resultsetFrustumLH(double, double, double, double, double, double)public Matrix4d frustumLH(double left, double right, double bottom, double top, double zNear, double zFar)
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!
In order to set the matrix to a perspective frustum transformation without post-multiplying,
use setFrustumLH().
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.setFrustumLH(double, double, double, double, double, double)public Matrix4d setFrustumLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne)
[-1..+1].
In order to apply the perspective frustum transformation to an existing transformation,
use frustumLH().
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 falsefrustumLH(double, double, double, double, double, double, boolean)public Matrix4d setFrustumLH(double left, double right, double bottom, double top, double zNear, double zFar)
[-1..+1].
In order to apply the perspective frustum transformation to an existing transformation,
use frustumLH().
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.frustumLH(double, double, double, double, double, double)public Matrix4d setFromIntrinsic(double alphaX, double alphaY, double gamma, double u0, double v0, int imgWidth, int imgHeight, double near, double far)
[-1..+1].
See: https://en.wikipedia.org/
Reference: http://ksimek.github.io/
alphaX - specifies the focal length and scale along the X axisalphaY - specifies the focal length and scale along the Y axisgamma - the skew coefficient between the X and Y axis (may be 0)u0 - the X coordinate of the principal point in image/sensor unitsv0 - the Y coordinate of the principal point in image/sensor unitsimgWidth - the width of the sensor/image image/sensor unitsimgHeight - the height of the sensor/image image/sensor unitsnear - the distance to the near planefar - the distance to the far planepublic Vector4d frustumPlane(int plane, Vector4d dest)
Matrix4dcthis 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).
For performing frustum culling, the class FrustumIntersection should be used instead of
manually obtaining the frustum planes and testing them against points, spheres or axis-aligned boxes.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
frustumPlane in interface Matrix4dcplane - one of the six possible planes, given as numeric constants
Matrix4dc.PLANE_NX, Matrix4dc.PLANE_PX,
Matrix4dc.PLANE_NY, Matrix4dc.PLANE_PY,
Matrix4dc.PLANE_NZ and Matrix4dc.PLANE_PZdest - will hold the computed plane equation.
The plane equation will be normalized, meaning that (a, b, c) will be a unit vectorpublic Planed frustumPlane(int which, Planed plane)
Matrix4dcthis matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given plane.
Generally, this method computes the frustum plane in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
The plane normal, which is (a, b, c), is directed "inwards" of the frustum.
Any plane/point test using a*x + b*y + c*z + d therefore will yield a result greater than zero
if the point is within the frustum (i.e. at the positive side of the frustum plane).
For performing frustum culling, the class FrustumIntersection should be used instead of
manually obtaining the frustum planes and testing them against points, spheres or axis-aligned boxes.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
frustumPlane in interface Matrix4dcwhich - one of the six possible planes, given as numeric constants
Matrix4dc.PLANE_NX, Matrix4dc.PLANE_PX,
Matrix4dc.PLANE_NY, Matrix4dc.PLANE_PY,
Matrix4dc.PLANE_NZ and Matrix4dc.PLANE_PZplane - will hold the computed plane equation.
The plane equation will be normalized, meaning that (a, b, c) will be a unit vectorpublic Vector3d frustumCorner(int corner, Vector3d dest)
Matrix4dcthis 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
frustumCorner in interface Matrix4dccorner - one of the eight possible corners, given as numeric constants
Matrix4dc.CORNER_NXNYNZ, Matrix4dc.CORNER_PXNYNZ, Matrix4dc.CORNER_PXPYNZ, Matrix4dc.CORNER_NXPYNZ,
Matrix4dc.CORNER_PXNYPZ, Matrix4dc.CORNER_NXNYPZ, Matrix4dc.CORNER_NXPYPZ, Matrix4dc.CORNER_PXPYPZdest - will hold the resulting corner point coordinatespublic Vector3d perspectiveOrigin(Vector3d dest)
Matrix4dcthis 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
perspectiveOrigin in interface Matrix4dcdest - will hold the origin of the coordinate system before applying this
perspective projection transformationpublic double perspectiveFov()
Matrix4dc
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
perspectiveFov in interface Matrix4dcpublic double perspectiveNear()
Matrix4dcthis perspective projection matrix.
This method only works if this is a perspective projection matrix, for example obtained via Matrix4dc.perspective(double, double, double, double, Matrix4d).
perspectiveNear in interface Matrix4dcpublic double perspectiveFar()
Matrix4dcthis perspective projection matrix.
This method only works if this is a perspective projection matrix, for example obtained via Matrix4dc.perspective(double, double, double, double, Matrix4d).
perspectiveFar in interface Matrix4dcpublic Vector3d frustumRayDir(double x, double y, Vector3d dest)
Matrix4dc
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
frustumRayDir in interface Matrix4dcx - 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]dest - will hold the normalized ray direction in the local frame of the coordinate system before
transforming to homogeneous clipping space using this matrixpublic Vector3d positiveZ(Vector3d dest)
Matrix4dc+Z before the transformation represented by this matrix is applied.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Z by this matrix.
This method is equivalent to the following code:
Matrix4d inv = new Matrix4d(this).invert(); inv.transformDirection(dir.set(0, 0, 1)).normalize();If
this is already an orthogonal matrix, then consider using Matrix4dc.normalizedPositiveZ(Vector3d) instead.
Reference: http://www.euclideanspace.com
public Vector3d normalizedPositiveZ(Vector3d dest)
Matrix4dc+Z before the transformation represented by this orthogonal matrix is applied.
This method only produces correct results if this is an orthogonal matrix.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Z by this matrix.
This method is equivalent to the following code:
Matrix4d inv = new Matrix4d(this).transpose(); inv.transformDirection(dir.set(0, 0, 1));
Reference: http://www.euclideanspace.com
normalizedPositiveZ in interface Matrix4dcdest - will hold the direction of +Zpublic Vector3d positiveX(Vector3d dest)
Matrix4dc+X before the transformation represented by this matrix is applied.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +X by this matrix.
This method is equivalent to the following code:
Matrix4d inv = new Matrix4d(this).invert(); inv.transformDirection(dir.set(1, 0, 0)).normalize();If
this is already an orthogonal matrix, then consider using Matrix4dc.normalizedPositiveX(Vector3d) instead.
Reference: http://www.euclideanspace.com
public Vector3d normalizedPositiveX(Vector3d dest)
Matrix4dc+X before the transformation represented by this orthogonal matrix is applied.
This method only produces correct results if this is an orthogonal matrix.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +X by this matrix.
This method is equivalent to the following code:
Matrix4d inv = new Matrix4d(this).transpose(); inv.transformDirection(dir.set(1, 0, 0));
Reference: http://www.euclideanspace.com
normalizedPositiveX in interface Matrix4dcdest - will hold the direction of +Xpublic Vector3d positiveY(Vector3d dest)
Matrix4dc+Y before the transformation represented by this matrix is applied.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Y by this matrix.
This method is equivalent to the following code:
Matrix4d inv = new Matrix4d(this).invert(); inv.transformDirection(dir.set(0, 1, 0)).normalize();If
this is already an orthogonal matrix, then consider using Matrix4dc.normalizedPositiveY(Vector3d) instead.
Reference: http://www.euclideanspace.com
public Vector3d normalizedPositiveY(Vector3d dest)
Matrix4dc+Y before the transformation represented by this orthogonal matrix is applied.
This method only produces correct results if this is an orthogonal matrix.
This method uses the rotation component of the upper left 3x3 submatrix to obtain the direction
that is transformed to +Y by this matrix.
This method is equivalent to the following code:
Matrix4d inv = new Matrix4d(this).transpose(); inv.transformDirection(dir.set(0, 1, 0));
Reference: http://www.euclideanspace.com
normalizedPositiveY in interface Matrix4dcdest - will hold the direction of +Ypublic Vector3d originAffine(Vector3d dest)
Matrix4dcthis 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));
originAffine in interface Matrix4dcdest - will hold the position transformed to the originpublic Vector3d origin(Vector3d dest)
Matrix4dcthis 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));
public Matrix4d shadow(Vector4dc light, double a, double b, double c, double d)
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction light.
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 equationpublic Matrix4d shadow(Vector4dc light, double a, double b, double c, double d, Matrix4d dest)
Matrix4dcx*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction light
and store the result in dest.
If light.w is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
Reference: ftp.sgi.com
public Matrix4d shadow(double lightX, double lightY, double lightZ, double lightW, double a, double b, double c, double d)
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW).
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 equationpublic Matrix4d shadow(double lightX, double lightY, double lightZ, double lightW, double a, double b, double c, double d, Matrix4d dest)
Matrix4dcx*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest.
If lightW is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
Reference: ftp.sgi.com
shadow in interface Matrix4dclightX - 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 resultpublic Matrix4d shadow(Vector4dc light, Matrix4dc planeTransform, Matrix4d dest)
Matrix4dcy = 0 as if casting a shadow from a given light position/direction light
and store the result in dest.
Before the shadow projection is applied, the plane is transformed via the specified planeTransformation.
If light.w is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
public Matrix4d shadow(Vector4d light, Matrix4d planeTransform)
y = 0 as if casting a shadow from a given light position/direction light.
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 projectionpublic Matrix4d shadow(double lightX, double lightY, double lightZ, double lightW, Matrix4dc planeTransform, Matrix4d dest)
Matrix4dcy = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest.
Before the shadow projection is applied, the plane is transformed via the specified planeTransformation.
If lightW is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
shadow in interface Matrix4dclightX - 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 resultpublic Matrix4d shadow(double lightX, double lightY, double lightZ, double lightW, Matrix4dc planeTransform)
y = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW).
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 projectionpublic Matrix4d billboardCylindrical(Vector3dc objPos, Vector3dc targetPos, Vector3dc up)
objPos towards
a target position at targetPos while constraining a cylindrical rotation around the given up vector.
This method can be used to create the complete model transformation for a given object, including the translation of the object to
its position objPos.
objPos - the position of the object to rotate towards targetPostargetPos - the position of the target (for example the camera) towards which to rotate the objectup - the rotation axis (must be normalized)public Matrix4d billboardSpherical(Vector3dc objPos, Vector3dc targetPos, Vector3dc up)
objPos towards
a target position at targetPos.
This method can be used to create the complete model transformation for a given object, including the translation of the object to
its position objPos.
If preserving an up vector is not necessary when rotating the +Z axis, then a shortest arc rotation can be obtained
using billboardSpherical(Vector3dc, Vector3dc).
objPos - the position of the object to rotate towards targetPostargetPos - the position of the target (for example the camera) towards which to rotate the objectup - the up axis used to orient the objectbillboardSpherical(Vector3dc, Vector3dc)public Matrix4d billboardSpherical(Vector3dc objPos, Vector3dc targetPos)
objPos towards
a target position at targetPos using a shortest arc rotation by not preserving any up vector of the object.
This method can be used to create the complete model transformation for a given object, including the translation of the object to
its position objPos.
In order to specify an up vector which needs to be maintained when rotating the +Z axis of the object,
use billboardSpherical(Vector3dc, Vector3dc, Vector3dc).
objPos - the position of the object to rotate towards targetPostargetPos - the position of the target (for example the camera) towards which to rotate the objectbillboardSpherical(Vector3dc, Vector3dc, Vector3dc)public boolean equals(Matrix4dc m, double delta)
Matrix4dcthis matrix with the given matrix using the given delta
and return whether all of them are equal within a maximum difference of delta.
Please note that this method is not used by any data structure such as ArrayList HashSet or HashMap
and their operations, such as ArrayList.contains(Object) or HashSet.remove(Object), since those
data structures only use the Object.equals(Object) and Object.hashCode() methods.
public Matrix4d pick(double x, double y, double width, double height, int[] viewport, Matrix4d dest)
Matrix4dc(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.pick in interface Matrix4dcx - 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 resultpublic Matrix4d pick(double x, double y, double width, double height, int[] viewport)
(x, y) as the pick center
and the given (width, height) as the size of the picking region in window coordinates.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]public boolean isAffine()
Matrix4dc(0, 0, 0, 1).public Matrix4d swap(Matrix4d other)
this matrix with the given other matrix.other - the other matrix to exchange the values withpublic Matrix4d arcball(double radius, double centerX, double centerY, double centerZ, double angleX, double angleY, Matrix4d dest)
Matrix4dcradius 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)
arcball in interface Matrix4dcradius - 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 resultpublic Matrix4d arcball(double radius, Vector3dc center, double angleX, double angleY, Matrix4d dest)
Matrix4dcradius 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)
public Matrix4d arcball(double radius, double centerX, double centerY, double centerZ, double angleX, double angleY)
radius and center (centerX, centerY, centerZ)
position of the arcball and the specified X and Y rotation angles.
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 radianspublic Matrix4d arcball(double radius, Vector3dc center, double angleX, double angleY)
radius and center
position of the arcball and the specified X and Y rotation angles.
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 radianspublic Matrix4d frustumAabb(Vector3d min, Vector3d max)
this matrix and store the minimum corner
coordinates in the given min and the maximum corner coordinates in the given max vector.
The matrix this is assumed to be the inverse of the origial view-projection matrix
for which to compute the axis-aligned bounding box in world-space.
The axis-aligned bounding box of the unit frustum is (-1, -1, -1), (1, 1, 1).
min - will hold the minimum corner coordinates of the axis-aligned bounding boxmax - will hold the maximum corner coordinates of the axis-aligned bounding boxpublic Matrix4d projectedGridRange(Matrix4dc projector, double sLower, double sUpper, Matrix4d dest)
Matrix4dcthis, 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.
projectedGridRange in interface Matrix4dcprojector - 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 visiblepublic Matrix4d perspectiveFrustumSlice(double near, double far, Matrix4d dest)
Matrix4dcthis 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().
perspectiveFrustumSlice in interface Matrix4dcnear - the new near clip plane distancefar - the new far clip plane distancedest - will hold the resulting matrixMatrix4dc.perspective(double, double, double, double, Matrix4d),
Matrix4dc.frustum(double, double, double, double, double, double, Matrix4d)public Matrix4d orthoCrop(Matrix4dc view, Matrix4d dest)
Matrix4dcthis
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
public Matrix4d trapezoidCrop(double p0x, double p0y, double p1x, double p1y, double p2x, double p2y, double p3x, double p3y)
this matrix to a perspective transformation that maps the trapezoid spanned by the four corner coordinates
(p0x, p0y), (p1x, p1y), (p2x, p2y) and (p3x, p3y) to the unit square [(-1, -1)..(+1, +1)].
The corner coordinates are given in counter-clockwise order starting from the left corner on the smaller parallel side of the trapezoid seen when looking at the trapezoid oriented with its shorter parallel edge at the bottom and its longer parallel edge at the top.
Reference: Trapezoidal Shadow Maps (TSM) - Recipe
p0x - the x coordinate of the left corner at the shorter edge of the trapezoidp0y - the y coordinate of the left corner at the shorter edge of the trapezoidp1x - the x coordinate of the right corner at the shorter edge of the trapezoidp1y - the y coordinate of the right corner at the shorter edge of the trapezoidp2x - the x coordinate of the right corner at the longer edge of the trapezoidp2y - the y coordinate of the right corner at the longer edge of the trapezoidp3x - the x coordinate of the left corner at the longer edge of the trapezoidp3y - the y coordinate of the left corner at the longer edge of the trapezoidpublic Matrix4d transformAab(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, Vector3d outMin, Vector3d outMax)
Matrix4dc(minX, minY, minZ) and maximum corner (maxX, maxY, maxZ)
by this affine matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax.
Reference: http://dev.theomader.com
transformAab in interface Matrix4dcminX - 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 boxpublic Matrix4d transformAab(Vector3dc min, Vector3dc max, Vector3d outMin, Vector3d outMax)
Matrix4dcmin 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.transformAab in interface Matrix4dcmin - 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 boxpublic Matrix4d lerp(Matrix4dc other, double t)
this and other using the given interpolation factor t
and store the result in this.
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.0public Matrix4d lerp(Matrix4dc other, double t, Matrix4d dest)
Matrix4dcthis 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.
public Matrix4d 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!
In order to set the matrix to a rotation transformation without post-multiplying it,
use rotationTowards().
This method is equivalent to calling: mulAffine(new Matrix4d().lookAt(new Vector3d(), new Vector3d(dir).negate(), up).invertAffine(), dest)
rotateTowards in interface Matrix4dcdirection - the direction to rotate towardsup - the up vectordest - will hold the resultrotateTowards(double, double, double, double, double, double, Matrix4d),
rotationTowards(Vector3dc, Vector3dc)public Matrix4d rotateTowards(Vector3dc direction, Vector3dc up)
+Z axis with direction.
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!
In order to set the matrix to a rotation transformation without post-multiplying it,
use rotationTowards().
This method is equivalent to calling: mulAffine(new Matrix4d().lookAt(new Vector3d(), new Vector3d(dir).negate(), up).invertAffine())
direction - the direction to orient towardsup - the up vectorrotateTowards(double, double, double, double, double, double),
rotationTowards(Vector3dc, Vector3dc)public Matrix4d rotateTowards(double dirX, double dirY, double dirZ, double upX, double upY, double upZ)
+Z axis with (dirX, dirY, dirZ).
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!
In order to set the matrix to a rotation transformation without post-multiplying it,
use rotationTowards().
This method is equivalent to calling: mulAffine(new Matrix4d().lookAt(0, 0, 0, -dirX, -dirY, -dirZ, upX, upY, upZ).invertAffine())
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 vectorrotateTowards(Vector3dc, Vector3dc),
rotationTowards(double, double, double, double, double, double)public 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!
In order to set the matrix to a rotation transformation without post-multiplying it,
use rotationTowards().
This method is equivalent to calling: mulAffine(new Matrix4d().lookAt(0, 0, 0, -dirX, -dirY, -dirZ, upX, upY, upZ).invertAffine(), dest)
rotateTowards in interface Matrix4dcdirX - 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),
rotationTowards(double, double, double, double, double, double)public Matrix4d rotationTowards(Vector3dc dir, Vector3dc up)
-z axis with dir.
In order to apply the rotation transformation to a previous existing transformation,
use rotateTowards.
This method is equivalent to calling: setLookAt(new Vector3d(), new Vector3d(dir).negate(), up).invertAffine()
dir - the direction to orient the local -z axis towardsup - the up vectorrotationTowards(Vector3dc, Vector3dc),
rotateTowards(double, double, double, double, double, double)public Matrix4d rotationTowards(double dirX, double dirY, double dirZ, double upX, double upY, double upZ)
-z axis with dir.
In order to apply the rotation transformation to a previous existing transformation,
use rotateTowards.
This method is equivalent to calling: setLookAt(0, 0, 0, -dirX, -dirY, -dirZ, upX, upY, upZ).invertAffine()
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 vectorrotateTowards(Vector3dc, Vector3dc),
rotationTowards(double, double, double, double, double, double)public Matrix4d translationRotateTowards(Vector3dc pos, Vector3dc dir, Vector3dc up)
pos and aligns the local -z
axis with dir.
This method is equivalent to calling: translation(pos).rotateTowards(dir, up)
pos - the position to translate todir - the direction to rotate towardsup - the up vectortranslation(Vector3dc),
rotateTowards(Vector3dc, Vector3dc)public Matrix4d translationRotateTowards(double posX, double posY, double posZ, double dirX, double dirY, double dirZ, double upX, double upY, double upZ)
(posX, posY, posZ) and aligns the local -z
axis with (dirX, dirY, dirZ).
This method is equivalent to calling: translation(posX, posY, posZ).rotateTowards(dirX, dirY, dirZ, upX, upY, upZ)
posX - the x-coordinate of the position to translate toposY - the y-coordinate of the position to translate toposZ - the z-coordinate of the position to translate todirX - 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 vectortranslation(double, double, double),
rotateTowards(double, double, double, double, double, double)public 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) 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/
getEulerAnglesZYX in interface Matrix4dcdest - will hold the extracted Euler anglespublic Matrix4d affineSpan(Vector3d corner, Vector3d xDir, Vector3d yDir, Vector3d zDir)
affine transformation was applied
and store the resulting corner coordinates in corner and the span vectors in
xDir, yDir and zDir.
That means, given the maximum extents of the coordinate system between [-1..+1] in all dimensions,
this method returns one corner and the length and direction of the three base axis vectors in the coordinate
system before this transformation is applied, which transforms into the corner coordinates [-1, +1].
This method is equivalent to computing at least three adjacent corners using frustumCorner(int, Vector3d)
and subtracting them to obtain the length and direction of the span vectors.
corner - will hold one corner of the span (usually the corner Matrix4dc.CORNER_NXNYNZ)xDir - will hold the direction and length of the span along the positive X axisyDir - will hold the direction and length of the span along the positive Y axiszDir - will hold the direction and length of the span along the positive z axispublic boolean testPoint(double x,
double y,
double z)
Matrix4dc(x, y, z) is within the frustum defined by this matrix.
This method assumes this matrix to be a transformation from any arbitrary coordinate system/space M
into standard OpenGL clip space and tests whether the given point with the coordinates (x, y, z) given
in space M is within the clip space.
When testing multiple points using the same transformation matrix, FrustumIntersection should be used instead.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
public boolean testSphere(double x,
double y,
double z,
double r)
Matrix4dcthis matrix.
This method assumes this matrix to be a transformation from any arbitrary coordinate system/space M
into standard OpenGL clip space and tests whether the given sphere with the coordinates (x, y, z) given
in space M is within the clip space.
When testing multiple spheres using the same transformation matrix, or more sophisticated/optimized intersection algorithms are required,
FrustumIntersection should be used instead.
The algorithm implemented by this method is conservative. This means that in certain circumstances a false positive
can occur, when the method returns true for spheres that are actually not visible.
See iquilezles.org for an examination of this problem.
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
testSphere in interface Matrix4dcx - the x-coordinate of the sphere's centery - the y-coordinate of the sphere's centerz - the z-coordinate of the sphere's centerr - the sphere's radiustrue if the given sphere is partly or completely inside the frustum; false otherwisepublic boolean testAab(double minX,
double minY,
double minZ,
double maxX,
double maxY,
double maxZ)
Matrix4dcthis matrix.
The box is specified via its min and max corner coordinates.
This method assumes this matrix to be a transformation from any arbitrary coordinate system/space M
into standard OpenGL clip space and tests whether the given axis-aligned box with its minimum corner coordinates (minX, minY, minZ)
and maximum corner coordinates (maxX, maxY, maxZ) given in space M is within the clip space.
When testing multiple axis-aligned boxes using the same transformation matrix, or more sophisticated/optimized intersection algorithms are required,
FrustumIntersection should be used instead.
The algorithm implemented by this method is conservative. This means that in certain circumstances a false positive
can occur, when the method returns -1 for boxes that are actually not visible/do not intersect the frustum.
See iquilezles.org for an examination of this problem.
Reference: Efficient View Frustum Culling
Reference:
Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
testAab in interface Matrix4dcminX - the x-coordinate of the minimum cornerminY - the y-coordinate of the minimum cornerminZ - the z-coordinate of the minimum cornermaxX - the x-coordinate of the maximum cornermaxY - the y-coordinate of the maximum cornermaxZ - the z-coordinate of the maximum cornertrue if the axis-aligned box is completely or partly inside of the frustum; false otherwisepublic Matrix4d obliqueZ(double a, double b)
a and
b.
If M is this matrix and O the oblique transformation matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
oblique transformation will be applied first!
The oblique transformation is defined as:
x' = x + a*z y' = y + a*z z' = zor in matrix form:
1 0 a 0 0 1 b 0 0 0 1 0 0 0 0 1
a - the value for the z factor that applies to xb - the value for the z factor that applies to ypublic Matrix4d obliqueZ(double a, double b, Matrix4d dest)
a and
b and store the result in dest.
If M is this matrix and O the oblique transformation matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
oblique transformation will be applied first!
The oblique transformation is defined as:
x' = x + a*z y' = y + a*z z' = zor in matrix form:
1 0 a 0 0 1 b 0 0 0 1 0 0 0 0 1
public static void projViewFromRectangle(Vector3d eye, Vector3d p, Vector3d x, Vector3d y, double nearFarDist, boolean zeroToOne, Matrix4d projDest, Matrix4d viewDest)
eye position, a given bottom left corner position p of the near plane rectangle
and the extents of the near plane rectangle along its local x and y axes, and store the resulting matrices
in projDest and viewDest.
This method creates a view and perspective projection matrix assuming that there is a pinhole camera at position eye
projecting the scene onto the near plane defined by the rectangle.
All positions and lengths are in the same (world) unit.
eye - the position of the camerap - the bottom left corner of the near plane rectangle (will map to the bottom left corner in window coordinates)x - the direction and length of the local "bottom/top" X axis/side of the near plane rectangley - the direction and length of the local "left/right" Y axis/side of the near plane rectanglenearFarDist - the distance between the far and near plane (the near plane will be calculated by this method).
If the special value Double.POSITIVE_INFINITY is used, the far clipping plane will be at positive infinity.
If the special value Double.NEGATIVE_INFINITY is used, the near and far planes will be swapped and
the near clipping plane will be at positive infinity.
If a negative value is used (except for Double.NEGATIVE_INFINITY) the near and far planes will be swappedzeroToOne - 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 falseprojDest - will hold the resulting projection matrixviewDest - will hold the resulting view matrixpublic Matrix4d withLookAtUp(Vector3dc up)
positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3d)) and the
given vector up.
This effectively ensures that the resulting matrix will be equal to the one obtained from
setLookAt(Vector3dc, Vector3dc, Vector3dc) called with the current
local origin of this matrix (as obtained by originAffine(Vector3d)), the sum of this position and the
negated local Z axis as well as the given vector up.
This method must only be called on isAffine() matrices.
up - the up vectorpublic Matrix4d withLookAtUp(Vector3dc up, Matrix4d dest)
Matrix4dcMatrix4dc.positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by Matrix4dc.positiveZ(Vector3d)) and the
given vector up, and store the result in dest.
This effectively ensures that the resulting matrix will be equal to the one obtained from calling
setLookAt(Vector3dc, Vector3dc, Vector3dc) with the current
local origin of this matrix (as obtained by Matrix4dc.originAffine(Vector3d)), the sum of this position and the
negated local Z axis as well as the given vector up.
This method must only be called on Matrix4dc.isAffine() matrices.
withLookAtUp in interface Matrix4dcup - the up vectordest - will hold the resultpublic Matrix4d withLookAtUp(double upX, double upY, double upZ)
positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by positiveZ(Vector3d)) and the
given vector (upX, upY, upZ).
This effectively ensures that the resulting matrix will be equal to the one obtained from
setLookAt(double, double, double, double, double, double, double, double, double) called with the current
local origin of this matrix (as obtained by originAffine(Vector3d)), the sum of this position and the
negated local Z axis as well as the given vector (upX, upY, upZ).
This method must only be called on isAffine() matrices.
upX - the x coordinate of the up vectorupY - the y coordinate of the up vectorupZ - the z coordinate of the up vectorpublic Matrix4d withLookAtUp(double upX, double upY, double upZ, Matrix4d dest)
Matrix4dcMatrix4dc.positiveY(Vector3d))
will be coplanar to the plane spanned by the local Z axis (as obtained by Matrix4dc.positiveZ(Vector3d)) and the
given vector (upX, upY, upZ), and store the result in dest.
This effectively ensures that the resulting matrix will be equal to the one obtained from calling
setLookAt(double, double, double, double, double, double, double, double, double) called with the current
local origin of this matrix (as obtained by Matrix4dc.originAffine(Vector3d)), the sum of this position and the
negated local Z axis as well as the given vector (upX, upY, upZ).
This method must only be called on Matrix4dc.isAffine() matrices.
withLookAtUp in interface Matrix4dcupX - the x coordinate of the up vectorupY - the y coordinate of the up vectorupZ - the z coordinate of the up vectordest - will hold the resultCopyright © 2015–2019 JOML. All rights reserved.