public interface Matrix4x3dc
| Modifier and Type | Field and Description |
|---|---|
static int |
PLANE_NX
Argument to the first parameter of
frustumPlane(int, Planed)
identifying the plane with equation x=-1 when using the identity matrix. |
static int |
PLANE_NY
Argument to the first parameter of
frustumPlane(int, Planed)
identifying the plane with equation y=-1 when using the identity matrix. |
static int |
PLANE_NZ
Argument to the first parameter of
frustumPlane(int, Planed)
identifying the plane with equation z=-1 when using the identity matrix. |
static int |
PLANE_PX
Argument to the first parameter of
frustumPlane(int, Planed)
identifying the plane with equation x=1 when using the identity matrix. |
static int |
PLANE_PY
Argument to the first parameter of
frustumPlane(int, Planed)
identifying the plane with equation y=1 when using the identity matrix. |
static int |
PLANE_PZ
Argument to the first parameter of
frustumPlane(int, Planed)
identifying the plane with equation z=1 when using the identity matrix. |
static byte |
PROPERTY_IDENTITY
Bit returned by
properties() to indicate that the matrix represents the identity transformation. |
static byte |
PROPERTY_ORTHONORMAL
Bit returned by
properties() to indicate that the left 3x3 submatrix represents an orthogonal
matrix (i.e. |
static byte |
PROPERTY_TRANSLATION
Bit returned by
properties() to indicate that the matrix represents a pure translation transformation. |
| Modifier and Type | Method and Description |
|---|---|
Matrix4x3d |
add(Matrix4x3dc other,
Matrix4x3d dest)
Component-wise add
this and other and store the result in dest. |
Matrix4x3d |
add(Matrix4x3fc other,
Matrix4x3d dest)
Component-wise add
this and other and store the result in dest. |
Matrix4x3d |
arcball(double radius,
double centerX,
double centerY,
double centerZ,
double angleX,
double angleY,
Matrix4x3d 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. |
Matrix4x3d |
arcball(double radius,
Vector3dc center,
double angleX,
double angleY,
Matrix4x3d 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. |
Matrix3d |
cofactor3x3(Matrix3d dest)
Compute the cofactor matrix of the upper left 3x3 submatrix of
this
and store it into dest. |
Matrix4x3d |
cofactor3x3(Matrix4x3d 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.
|
boolean |
equals(Matrix4x3dc 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. |
Matrix4x3d |
fma(Matrix4x3dc other,
double otherFactor,
Matrix4x3d dest)
Component-wise add
this and other
by first multiplying each component of other by otherFactor,
adding that to this and storing the final result in dest. |
Matrix4x3d |
fma(Matrix4x3fc other,
double otherFactor,
Matrix4x3d dest)
Component-wise add
this and other
by first multiplying each component of other by otherFactor,
adding that to this and storing the final 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. |
ByteBuffer |
get(ByteBuffer buffer)
Store this matrix in column-major order into the supplied
ByteBuffer at the current
buffer position. |
double[] |
get(double[] arr)
Store this matrix into the supplied double array in column-major order.
|
double[] |
get(double[] arr,
int offset)
Store this matrix into the supplied double array in column-major order at the given offset.
|
DoubleBuffer |
get(DoubleBuffer buffer)
Store this matrix in column-major order into the supplied
DoubleBuffer at the current
buffer position. |
float[] |
get(float[] arr)
Store the elements of this matrix as float values in column-major order into the supplied float array.
|
float[] |
get(float[] arr,
int offset)
Store the elements of this matrix as float values in column-major order into the supplied float array at the given offset.
|
FloatBuffer |
get(FloatBuffer buffer)
Store this matrix in column-major order into the supplied
FloatBuffer at the current
buffer position. |
ByteBuffer |
get(int index,
ByteBuffer buffer)
Store this matrix in column-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index. |
DoubleBuffer |
get(int index,
DoubleBuffer buffer)
Store this matrix in column-major order into the supplied
DoubleBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
get(int index,
FloatBuffer buffer)
Store this matrix in column-major order into the supplied
FloatBuffer starting at the specified
absolute buffer position/index. |
Matrix4d |
get(Matrix4d dest)
Get the current values of
this matrix and store them into the upper 4x3 submatrix of dest. |
Matrix4x3d |
get(Matrix4x3d dest)
Get the current values of
this matrix and store them into
dest. |
ByteBuffer |
get4x4(ByteBuffer buffer)
Store a 4x4 matrix in column-major order into the supplied
ByteBuffer at the current
buffer position, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1). |
double[] |
get4x4(double[] arr)
Store a 4x4 matrix in column-major order into the supplied array,
where the upper 4x3 submatrix is
this and the last row is (0, 0, 0, 1). |
double[] |
get4x4(double[] arr,
int offset)
Store a 4x4 matrix in column-major order into the supplied array at the given offset,
where the upper 4x3 submatrix is
this and the last row is (0, 0, 0, 1). |
DoubleBuffer |
get4x4(DoubleBuffer buffer)
Store a 4x4 matrix in column-major order into the supplied
DoubleBuffer at the current
buffer position, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1). |
float[] |
get4x4(float[] arr)
Store a 4x4 matrix in column-major order into the supplied array,
where the upper 4x3 submatrix is
this and the last row is (0, 0, 0, 1). |
float[] |
get4x4(float[] arr,
int offset)
Store a 4x4 matrix in column-major order into the supplied array at the given offset,
where the upper 4x3 submatrix is
this and the last row is (0, 0, 0, 1). |
ByteBuffer |
get4x4(int index,
ByteBuffer buffer)
Store a 4x4 matrix in column-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1). |
DoubleBuffer |
get4x4(int index,
DoubleBuffer buffer)
Store a 4x4 matrix in column-major order into the supplied
DoubleBuffer starting at the specified
absolute buffer position/index, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1). |
Vector3d |
getColumn(int column,
Vector3d dest)
Get the column at the given
column index, starting with 0. |
Vector3d |
getEulerAnglesZYX(Vector3d dest)
Extract the Euler angles from the rotation represented by the upper left 3x3 submatrix of
this
and store the extracted Euler angles in dest. |
ByteBuffer |
getFloats(ByteBuffer buffer)
Store the elements of this matrix as float values in column-major order into the supplied
ByteBuffer at the current
buffer position. |
ByteBuffer |
getFloats(int index,
ByteBuffer buffer)
Store the elements of this matrix as float values in column-major order into the supplied
ByteBuffer
starting at the specified absolute buffer position/index. |
Quaterniond |
getNormalizedRotation(Quaterniond dest)
Get the current values of
this matrix and store the represented rotation
into the given Quaterniond. |
Quaternionf |
getNormalizedRotation(Quaternionf dest)
Get the current values of
this matrix and store the represented rotation
into the given Quaternionf. |
Vector4d |
getRow(int row,
Vector4d dest)
Get the row at the given
row index, starting with 0. |
Vector3d |
getScale(Vector3d dest)
Get the scaling factors of
this matrix for the three base axes. |
Vector3d |
getTranslation(Vector3d dest)
Get only the translation components
(m30, m31, m32) of this matrix and store them in the given vector xyz. |
ByteBuffer |
getTransposed(ByteBuffer buffer)
Store this matrix in row-major order into the supplied
ByteBuffer at the current
buffer position. |
double[] |
getTransposed(double[] arr)
Store this matrix into the supplied float array in row-major order.
|
double[] |
getTransposed(double[] arr,
int offset)
Store this matrix into the supplied float array in row-major order at the given offset.
|
DoubleBuffer |
getTransposed(DoubleBuffer buffer)
Store this matrix in row-major order into the supplied
DoubleBuffer at the current
buffer position. |
FloatBuffer |
getTransposed(FloatBuffer buffer)
Store this matrix in row-major order into the supplied
FloatBuffer at the current
buffer position. |
ByteBuffer |
getTransposed(int index,
ByteBuffer buffer)
Store this matrix in row-major order into the supplied
ByteBuffer starting at the specified
absolute buffer position/index. |
DoubleBuffer |
getTransposed(int index,
DoubleBuffer buffer)
Store this matrix in row-major order into the supplied
DoubleBuffer starting at the specified
absolute buffer position/index. |
FloatBuffer |
getTransposed(int index,
FloatBuffer buffer)
Store this matrix in row-major order into the supplied
FloatBuffer starting at the specified
absolute buffer position/index. |
ByteBuffer |
getTransposedFloats(ByteBuffer buffer)
Store this matrix as float values in row-major order into the supplied
ByteBuffer at the current
buffer position. |
ByteBuffer |
getTransposedFloats(int index,
ByteBuffer buffer)
Store this matrix in row-major order into the supplied
ByteBuffer 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. |
Matrix4x3d |
invert(Matrix4x3d dest)
Invert
this matrix and store the result in dest. |
Matrix4x3d |
invertOrtho(Matrix4x3d dest)
Invert
this orthographic projection matrix and store the result into the given dest. |
Matrix4x3d |
lerp(Matrix4x3dc other,
double t,
Matrix4x3d dest)
Linearly interpolate
this and other using the given interpolation factor t
and store the result in dest. |
Matrix4x3d |
lookAlong(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ,
Matrix4x3d dest)
Apply a rotation transformation to this matrix to make
-z point along dir
and store the result in dest. |
Matrix4x3d |
lookAlong(Vector3dc dir,
Vector3dc up,
Matrix4x3d dest)
Apply a rotation transformation to this matrix to make
-z point along dir
and store the result in dest. |
Matrix4x3d |
lookAt(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ,
Matrix4x3d 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. |
Matrix4x3d |
lookAt(Vector3dc eye,
Vector3dc center,
Vector3dc up,
Matrix4x3d 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. |
Matrix4x3d |
lookAtLH(double eyeX,
double eyeY,
double eyeZ,
double centerX,
double centerY,
double centerZ,
double upX,
double upY,
double upZ,
Matrix4x3d 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. |
Matrix4x3d |
lookAtLH(Vector3dc eye,
Vector3dc center,
Vector3dc up,
Matrix4x3d dest)
Apply a "lookat" transformation to this matrix for a left-handed coordinate system,
that aligns
+z with center - eye and store the result in dest. |
double |
m00()
Return the value of the matrix element at column 0 and row 0.
|
double |
m01()
Return the value of the matrix element at column 0 and row 1.
|
double |
m02()
Return the value of the matrix element at column 0 and row 2.
|
double |
m10()
Return the value of the matrix element at column 1 and row 0.
|
double |
m11()
Return the value of the matrix element at column 1 and row 1.
|
double |
m12()
Return the value of the matrix element at column 1 and row 2.
|
double |
m20()
Return the value of the matrix element at column 2 and row 0.
|
double |
m21()
Return the value of the matrix element at column 2 and row 1.
|
double |
m22()
Return the value of the matrix element at column 2 and row 2.
|
double |
m30()
Return the value of the matrix element at column 3 and row 0.
|
double |
m31()
Return the value of the matrix element at column 3 and row 1.
|
double |
m32()
Return the value of the matrix element at column 3 and row 2.
|
Matrix4x3d |
mul(Matrix4x3dc right,
Matrix4x3d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4x3d |
mul(Matrix4x3fc right,
Matrix4x3d dest)
Multiply this matrix by the supplied
right matrix and store the result in dest. |
Matrix4x3d |
mulComponentWise(Matrix4x3dc other,
Matrix4x3d dest)
Component-wise multiply
this by other and store the result in dest. |
Matrix4x3d |
mulOrtho(Matrix4x3dc view,
Matrix4x3d dest)
Multiply
this orthographic projection matrix by the supplied view matrix
and store the result in dest. |
Matrix4x3d |
mulTranslation(Matrix4x3dc right,
Matrix4x3d dest)
Multiply this matrix, which is assumed to only contain a translation, by the supplied
right matrix and store the result in dest. |
Matrix4x3d |
mulTranslation(Matrix4x3fc right,
Matrix4x3d dest)
Multiply this matrix, which is assumed to only contain a translation, by the supplied
right matrix and store the result in dest. |
Matrix3d |
normal(Matrix3d dest)
Compute a normal matrix from the left 3x3 submatrix of
this
and store it into dest. |
Matrix4x3d |
normal(Matrix4x3d dest)
Compute a normal matrix from the left 3x3 submatrix of
this
and store it into the left 3x3 submatrix of dest. |
Matrix3d |
normalize3x3(Matrix3d dest)
Normalize the left 3x3 submatrix of this matrix and store the result in
dest. |
Matrix4x3d |
normalize3x3(Matrix4x3d dest)
Normalize the left 3x3 submatrix of this matrix and store the result in
dest. |
Vector3d |
normalizedPositiveX(Vector3d dir)
Obtain the direction of
+X before the transformation represented by this orthogonal matrix is applied. |
Vector3d |
normalizedPositiveY(Vector3d dir)
Obtain the direction of
+Y before the transformation represented by this orthogonal matrix is applied. |
Vector3d |
normalizedPositiveZ(Vector3d dir)
Obtain the direction of
+Z before the transformation represented by this orthogonal matrix is applied. |
Matrix4x3d |
obliqueZ(double a,
double b,
Matrix4x3d 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 origin)
Obtain the position that gets transformed to the origin by
this matrix. |
Matrix4x3d |
ortho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4x3d 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. |
Matrix4x3d |
ortho(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
Matrix4x3d 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. |
Matrix4x3d |
ortho2D(double left,
double right,
double bottom,
double top,
Matrix4x3d dest)
Apply an orthographic projection transformation for a right-handed coordinate system
to this matrix and store the result in
dest. |
Matrix4x3d |
ortho2DLH(double left,
double right,
double bottom,
double top,
Matrix4x3d dest)
Apply an orthographic projection transformation for a left-handed coordinate system to this matrix and store the result in
dest. |
Matrix4x3d |
orthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4x3d 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. |
Matrix4x3d |
orthoLH(double left,
double right,
double bottom,
double top,
double zNear,
double zFar,
Matrix4x3d 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. |
Matrix4x3d |
orthoSymmetric(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4x3d 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. |
Matrix4x3d |
orthoSymmetric(double width,
double height,
double zNear,
double zFar,
Matrix4x3d 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. |
Matrix4x3d |
orthoSymmetricLH(double width,
double height,
double zNear,
double zFar,
boolean zZeroToOne,
Matrix4x3d 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. |
Matrix4x3d |
orthoSymmetricLH(double width,
double height,
double zNear,
double zFar,
Matrix4x3d 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. |
Matrix4x3d |
pick(double x,
double y,
double width,
double height,
int[] viewport,
Matrix4x3d dest)
Apply a picking transformation to this matrix using the given window coordinates
(x, y) as the pick center
and the given (width, height) as the size of the picking region in window coordinates, and store the result
in dest. |
Vector3d |
positiveX(Vector3d dir)
Obtain the direction of
+X before the transformation represented by this matrix is applied. |
Vector3d |
positiveY(Vector3d dir)
Obtain the direction of
+Y before the transformation represented by this matrix is applied. |
Vector3d |
positiveZ(Vector3d dir)
Obtain the direction of
+Z before the transformation represented by this matrix is applied. |
int |
properties() |
Matrix4x3d |
reflect(double nx,
double ny,
double nz,
double px,
double py,
double pz,
Matrix4x3d 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. |
Matrix4x3d |
reflect(double a,
double b,
double c,
double d,
Matrix4x3d 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. |
Matrix4x3d |
reflect(Quaterniondc orientation,
Vector3dc point,
Matrix4x3d 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. |
Matrix4x3d |
reflect(Vector3dc normal,
Vector3dc point,
Matrix4x3d 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. |
Matrix4x3d |
rotate(AxisAngle4d axisAngle,
Matrix4x3d dest)
Apply a rotation transformation, rotating about the given
AxisAngle4d and store the result in dest. |
Matrix4x3d |
rotate(AxisAngle4f axisAngle,
Matrix4x3d dest)
Apply a rotation transformation, rotating about the given
AxisAngle4f and store the result in dest. |
Matrix4x3d |
rotate(double ang,
double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
rotate(double angle,
Vector3dc axis,
Matrix4x3d dest)
Apply a rotation transformation, rotating the given radians about the specified axis and store the result in
dest. |
Matrix4x3d |
rotate(double angle,
Vector3fc axis,
Matrix4x3d dest)
Apply a rotation transformation, rotating the given radians about the specified axis and store the result in
dest. |
Matrix4x3d |
rotate(Quaterniondc quat,
Matrix4x3d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix and store
the result in dest. |
Matrix4x3d |
rotate(Quaternionfc quat,
Matrix4x3d dest)
Apply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix and store
the result in dest. |
Matrix4x3d |
rotateAround(Quaterniondc quat,
double ox,
double oy,
double oz,
Matrix4x3d 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. |
Matrix4x3d |
rotateLocal(double ang,
double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
rotateLocal(Quaterniondc quat,
Matrix4x3d dest)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaterniondc to this matrix and store
the result in dest. |
Matrix4x3d |
rotateLocal(Quaternionfc quat,
Matrix4x3d dest)
Pre-multiply the rotation - and possibly scaling - transformation of the given
Quaternionfc to this matrix and store
the result in dest. |
Matrix4x3d |
rotateTowards(double dirX,
double dirY,
double dirZ,
double upX,
double upY,
double upZ,
Matrix4x3d dest)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the
-z axis with (dirX, dirY, dirZ)
and store the result in dest. |
Matrix4x3d |
rotateTowards(Vector3dc dir,
Vector3dc up,
Matrix4x3d dest)
Apply a model transformation to this matrix for a right-handed coordinate system,
that aligns the
-z axis with dir
and store the result in dest. |
Matrix4x3d |
rotateTranslation(double ang,
double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
rotateTranslation(Quaterniondc quat,
Matrix4x3d 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. |
Matrix4x3d |
rotateTranslation(Quaternionfc quat,
Matrix4x3d 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. |
Matrix4x3d |
rotateX(double ang,
Matrix4x3d dest)
Apply rotation about the X axis to this matrix by rotating the given amount of radians
and store the result in
dest. |
Matrix4x3d |
rotateXYZ(double angleX,
double angleY,
double angleZ,
Matrix4x3d 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. |
Matrix4x3d |
rotateY(double ang,
Matrix4x3d dest)
Apply rotation about the Y axis to this matrix by rotating the given amount of radians
and store the result in
dest. |
Matrix4x3d |
rotateYXZ(double angleY,
double angleX,
double angleZ,
Matrix4x3d 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. |
Matrix4x3d |
rotateZ(double ang,
Matrix4x3d dest)
Apply rotation about the Z axis to this matrix by rotating the given amount of radians
and store the result in
dest. |
Matrix4x3d |
rotateZYX(double angleZ,
double angleY,
double angleX,
Matrix4x3d 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. |
Matrix4x3d |
scale(double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
scale(double xyz,
Matrix4x3d dest)
Apply scaling to this matrix by uniformly scaling all base axes by the given xyz factor
and store the result in
dest. |
Matrix4x3d |
scale(Vector3dc xyz,
Matrix4x3d 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. |
Matrix4x3d |
scaleLocal(double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
scaleXY(double x,
double y,
Matrix4x3d 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. |
Matrix4x3d |
shadow(double lightX,
double lightY,
double lightZ,
double lightW,
double a,
double b,
double c,
double d,
Matrix4x3d 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. |
Matrix4x3d |
shadow(double lightX,
double lightY,
double lightZ,
double lightW,
Matrix4x3dc planeTransform,
Matrix4x3d 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. |
Matrix4x3d |
shadow(Vector4dc light,
double a,
double b,
double c,
double d,
Matrix4x3d 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. |
Matrix4x3d |
shadow(Vector4dc light,
Matrix4x3dc planeTransform,
Matrix4x3d 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. |
Matrix4x3d |
sub(Matrix4x3dc subtrahend,
Matrix4x3d dest)
Component-wise subtract
subtrahend from this and store the result in dest. |
Matrix4x3d |
sub(Matrix4x3fc subtrahend,
Matrix4x3d dest)
Component-wise subtract
subtrahend from this 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. |
Matrix4x3d |
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 matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax. |
Matrix4x3d |
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 matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax. |
Vector3d |
transformDirection(Vector3d v)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=0, by
this matrix and store the result in that vector.
|
Vector3d |
transformDirection(Vector3dc v,
Vector3d dest)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=0, by
this matrix and store the result in
dest. |
Vector3d |
transformPosition(Vector3d v)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=1, by
this matrix and store the result in that vector.
|
Vector3d |
transformPosition(Vector3dc v,
Vector3d dest)
Transform/multiply the given 3D-vector, as if it was a 4D-vector with w=1, by
this matrix and store the result in
dest. |
Matrix4x3d |
translate(double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
translate(Vector3dc offset,
Matrix4x3d 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. |
Matrix4x3d |
translate(Vector3fc offset,
Matrix4x3d 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. |
Matrix4x3d |
translateLocal(double x,
double y,
double z,
Matrix4x3d 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. |
Matrix4x3d |
translateLocal(Vector3dc offset,
Matrix4x3d 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. |
Matrix4x3d |
translateLocal(Vector3fc offset,
Matrix4x3d 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. |
Matrix3d |
transpose3x3(Matrix3d dest)
Transpose only the left 3x3 submatrix of this matrix and store the result in
dest. |
Matrix4x3d |
transpose3x3(Matrix4x3d dest)
Transpose only the left 3x3 submatrix of this matrix and store the result in
dest. |
static final int PLANE_NX
frustumPlane(int, Planed)
identifying the plane with equation x=-1 when using the identity matrix.static final int PLANE_PX
frustumPlane(int, Planed)
identifying the plane with equation x=1 when using the identity matrix.static final int PLANE_NY
frustumPlane(int, Planed)
identifying the plane with equation y=-1 when using the identity matrix.static final int PLANE_PY
frustumPlane(int, Planed)
identifying the plane with equation y=1 when using the identity matrix.static final int PLANE_NZ
frustumPlane(int, Planed)
identifying the plane with equation z=-1 when using the identity matrix.static final int PLANE_PZ
frustumPlane(int, Planed)
identifying the plane with equation z=1 when using the identity matrix.static final byte PROPERTY_IDENTITY
properties() to indicate that the matrix represents the identity transformation.static final byte PROPERTY_TRANSLATION
properties() to indicate that the matrix represents a pure translation transformation.static final byte PROPERTY_ORTHONORMAL
properties() to indicate that the left 3x3 submatrix represents an orthogonal
matrix (i.e. orthonormal basis).int properties()
double m00()
double m01()
double m02()
double m10()
double m11()
double m12()
double m20()
double m21()
double m22()
double m30()
double m31()
double m32()
Matrix4d get(Matrix4d dest)
this matrix and store them into the upper 4x3 submatrix of dest.
The other elements of dest will not be modified.
dest - the destination matrixMatrix4d.set4x3(Matrix4x3dc)Matrix4x3d mul(Matrix4x3dc right, Matrix4x3d dest)
right matrix and store the result in dest.
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the multiplicationdest - will hold the resultMatrix4x3d mul(Matrix4x3fc right, Matrix4x3d dest)
right matrix and store the result in dest.
If M is this matrix and R the right matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
transformation of the right matrix will be applied first!
right - the right operand of the multiplicationdest - will hold the resultMatrix4x3d mulTranslation(Matrix4x3dc right, Matrix4x3d dest)
right matrix and store the result in dest.
This method assumes that this matrix only contains a translation.
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 multiplicationdest - the destination matrix, which will hold the resultMatrix4x3d mulTranslation(Matrix4x3fc right, Matrix4x3d dest)
right matrix and store the result in dest.
This method assumes that this matrix only contains a translation.
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 multiplicationdest - the destination matrix, which will hold the resultMatrix4x3d mulOrtho(Matrix4x3dc view, Matrix4x3d dest)
this orthographic projection matrix by the supplied view matrix
and store the result in dest.
If M is this matrix and V the view matrix,
then the new matrix will be M * V. So when transforming a
vector v with the new matrix by using M * V * v, the
transformation of the view matrix will be applied first!
view - the matrix which to multiply this withdest - the destination matrix, which will hold the resultMatrix4x3d fma(Matrix4x3dc other, double otherFactor, Matrix4x3d dest)
this and other
by first multiplying each component of other by otherFactor,
adding that to this and storing the final result in dest.
The other components of dest will be set to the ones of this.
The matrices this and other will not be changed.
other - the other matrixotherFactor - the factor to multiply each of the other matrix's componentsdest - will hold the resultMatrix4x3d fma(Matrix4x3fc other, double otherFactor, Matrix4x3d dest)
this and other
by first multiplying each component of other by otherFactor,
adding that to this and storing the final result in dest.
The other components of dest will be set to the ones of this.
The matrices this and other will not be changed.
other - the other matrixotherFactor - the factor to multiply each of the other matrix's componentsdest - will hold the resultMatrix4x3d add(Matrix4x3dc other, Matrix4x3d dest)
this and other and store the result in dest.other - the other addenddest - will hold the resultMatrix4x3d add(Matrix4x3fc other, Matrix4x3d dest)
this and other and store the result in dest.other - the other addenddest - will hold the resultMatrix4x3d sub(Matrix4x3dc subtrahend, Matrix4x3d dest)
subtrahend from this and store the result in dest.subtrahend - the subtrahenddest - will hold the resultMatrix4x3d sub(Matrix4x3fc subtrahend, Matrix4x3d dest)
subtrahend from this and store the result in dest.subtrahend - the subtrahenddest - will hold the resultMatrix4x3d mulComponentWise(Matrix4x3dc other, Matrix4x3d dest)
this by other and store the result in dest.other - the other matrixdest - will hold the resultdouble determinant()
Matrix4x3d invert(Matrix4x3d dest)
this matrix and store the result in dest.dest - will hold the resultMatrix4x3d invertOrtho(Matrix4x3d dest)
this orthographic projection matrix and store the result into the given dest.
This method can be used to quickly obtain the inverse of an orthographic projection matrix.
dest - will hold the inverse of thisMatrix4x3d transpose3x3(Matrix4x3d dest)
dest.
All other matrix elements are left unchanged.
dest - will hold the resultMatrix3d transpose3x3(Matrix3d dest)
dest.dest - will hold the resultVector3d getTranslation(Vector3d dest)
(m30, m31, m32) of this matrix and store them in the given vector xyz.dest - will hold the translation components of this matrixVector3d getScale(Vector3d dest)
this matrix for the three base axes.dest - will hold the scaling factors for x, y and zMatrix4x3d get(Matrix4x3d dest)
this matrix and store them into
dest.dest - the destination matrixQuaternionf getUnnormalizedRotation(Quaternionf dest)
this matrix and store the represented rotation
into the given Quaternionf.
This method assumes that the first three column vectors of the left 3x3 submatrix are not normalized and thus allows to ignore any additional scaling factor that is applied to the matrix.
dest - the destination QuaternionfQuaternionf.setFromUnnormalized(Matrix4x3dc)Quaternionf getNormalizedRotation(Quaternionf dest)
this matrix and store the represented rotation
into the given Quaternionf.
This method assumes that the first three column vectors of the left 3x3 submatrix are normalized.
dest - the destination QuaternionfQuaternionf.setFromNormalized(Matrix4x3dc)Quaterniond getUnnormalizedRotation(Quaterniond dest)
this matrix and store the represented rotation
into the given Quaterniond.
This method assumes that the first three column vectors of the left 3x3 submatrix are not normalized and thus allows to ignore any additional scaling factor that is applied to the matrix.
dest - the destination QuaterniondQuaterniond.setFromUnnormalized(Matrix4x3dc)Quaterniond getNormalizedRotation(Quaterniond dest)
this matrix and store the represented rotation
into the given Quaterniond.
This method assumes that the first three column vectors of the left 3x3 submatrix are normalized.
dest - the destination QuaterniondQuaterniond.setFromNormalized(Matrix4x3dc)DoubleBuffer get(DoubleBuffer buffer)
DoubleBuffer at the current
buffer position.
This method will not increment the position of the given DoubleBuffer.
In order to specify the offset into the DoubleBuffer at which
the matrix is stored, use get(int, DoubleBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positionget(int, DoubleBuffer)DoubleBuffer get(int index, DoubleBuffer buffer)
DoubleBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer.
index - the absolute position into the DoubleBufferbuffer - will receive the values of this matrix in column-major orderFloatBuffer get(FloatBuffer buffer)
FloatBuffer at the current
buffer position.
This method will not increment the position of the given FloatBuffer.
In order to specify the offset into the FloatBuffer at which
the matrix is stored, use get(int, FloatBuffer), taking
the absolute position as parameter.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given FloatBuffer.
buffer - will receive the values of this matrix in column-major order at its current positionget(int, FloatBuffer)FloatBuffer get(int index, FloatBuffer buffer)
FloatBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given FloatBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given FloatBuffer.
index - the absolute position into the FloatBufferbuffer - will receive the values of this matrix in column-major orderByteBuffer get(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use get(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positionget(int, ByteBuffer)ByteBuffer get(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of this matrix in column-major orderByteBuffer getFloats(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use getFloats(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the elements of this matrix as float values in column-major order at its current positiongetFloats(int, ByteBuffer)ByteBuffer getFloats(int index, ByteBuffer buffer)
ByteBuffer
starting at the specified absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the elements of this matrix as float values in column-major orderdouble[] get(double[] arr,
int offset)
arr - the array to write the matrix values intooffset - the offset into the arraydouble[] get(double[] arr)
In order to specify an explicit offset into the array, use the method get(double[], int).
arr - the array to write the matrix values intoget(double[], int)float[] get(float[] arr,
int offset)
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given float array.
arr - the array to write the matrix values intooffset - the offset into the arrayfloat[] get(float[] arr)
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given float array.
In order to specify an explicit offset into the array, use the method get(float[], int).
arr - the array to write the matrix values intoget(float[], int)double[] get4x4(double[] arr,
int offset)
this and the last row is (0, 0, 0, 1).arr - the array to write the matrix values intooffset - the offset into the arraydouble[] get4x4(double[] arr)
this and the last row is (0, 0, 0, 1).
In order to specify an explicit offset into the array, use the method get4x4(double[], int).
arr - the array to write the matrix values intoget4x4(double[], int)float[] get4x4(float[] arr,
int offset)
this and the last row is (0, 0, 0, 1).
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given float array.
arr - the array to write the matrix values intooffset - the offset into the arrayfloat[] get4x4(float[] arr)
this and the last row is (0, 0, 0, 1).
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given float array.
In order to specify an explicit offset into the array, use the method get4x4(float[], int).
arr - the array to write the matrix values intoget4x4(float[], int)DoubleBuffer get4x4(DoubleBuffer buffer)
DoubleBuffer at the current
buffer position, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1).
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 get4x4(int, DoubleBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positionget4x4(int, DoubleBuffer)DoubleBuffer get4x4(int index, DoubleBuffer buffer)
DoubleBuffer starting at the specified
absolute buffer position/index, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1).
This method will not increment the position of the given DoubleBuffer.
index - the absolute position into the DoubleBufferbuffer - will receive the values of this matrix in column-major orderByteBuffer get4x4(ByteBuffer buffer)
ByteBuffer at the current
buffer position, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1).
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 get4x4(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in column-major order at its current positionget4x4(int, ByteBuffer)ByteBuffer get4x4(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index, where the upper 4x3 submatrix is this and the last row is (0, 0, 0, 1).
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of this matrix in column-major orderDoubleBuffer getTransposed(DoubleBuffer buffer)
DoubleBuffer at the current
buffer position.
This method will not increment the position of the given DoubleBuffer.
In order to specify the offset into the DoubleBuffer at which
the matrix is stored, use getTransposed(int, DoubleBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in row-major order at its current positiongetTransposed(int, DoubleBuffer)DoubleBuffer getTransposed(int index, DoubleBuffer buffer)
DoubleBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given DoubleBuffer.
index - the absolute position into the DoubleBufferbuffer - will receive the values of this matrix in row-major orderByteBuffer getTransposed(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use getTransposed(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in row-major order at its current positiongetTransposed(int, ByteBuffer)ByteBuffer getTransposed(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of this matrix in row-major orderFloatBuffer getTransposed(FloatBuffer buffer)
FloatBuffer at the current
buffer position.
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.
In order to specify the offset into the FloatBuffer at which
the matrix is stored, use getTransposed(int, FloatBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix in row-major order at its current positiongetTransposed(int, FloatBuffer)FloatBuffer getTransposed(int index, FloatBuffer buffer)
FloatBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given FloatBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given FloatBuffer.
index - the absolute position into the FloatBufferbuffer - will receive the values of this matrix in row-major orderByteBuffer getTransposedFloats(ByteBuffer buffer)
ByteBuffer at the current
buffer position.
This method will not increment the position of the given ByteBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given FloatBuffer.
In order to specify the offset into the ByteBuffer at which
the matrix is stored, use getTransposedFloats(int, ByteBuffer), taking
the absolute position as parameter.
buffer - will receive the values of this matrix as float values in row-major order at its current positiongetTransposedFloats(int, ByteBuffer)ByteBuffer getTransposedFloats(int index, ByteBuffer buffer)
ByteBuffer starting at the specified
absolute buffer position/index.
This method will not increment the position of the given ByteBuffer.
Please note that due to this matrix storing double values those values will potentially lose precision when they are converted to float values before being put into the given FloatBuffer.
index - the absolute position into the ByteBufferbuffer - will receive the values of this matrix as float values in row-major orderdouble[] getTransposed(double[] arr,
int offset)
arr - the array to write the matrix values intooffset - the offset into the arraydouble[] getTransposed(double[] arr)
In order to specify an explicit offset into the array, use the method getTransposed(double[], int).
arr - the array to write the matrix values intogetTransposed(double[], int)Vector4d transform(Vector4d v)
v - the vector to transform and to hold the final resultVector4d.mul(Matrix4x3dc)Vector4d transform(Vector4dc v, Vector4d dest)
dest.v - the vector to transformdest - will contain the resultVector4d.mul(Matrix4x3dc, Vector4d)Vector3d transformPosition(Vector3d v)
The given 3D-vector is treated as a 4D-vector with its w-component being 1.0, so it will represent a position/location in 3D-space rather than a direction.
In order to store the result in another vector, use transformPosition(Vector3dc, Vector3d).
v - the vector to transform and to hold the final resulttransformPosition(Vector3dc, Vector3d),
transform(Vector4d)Vector3d transformPosition(Vector3dc v, Vector3d dest)
dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 1.0, so it will represent a position/location in 3D-space rather than a direction.
In order to store the result in the same vector, use transformPosition(Vector3d).
v - the vector to transformdest - will hold the resulttransformPosition(Vector3d),
transform(Vector4dc, Vector4d)Vector3d transformDirection(Vector3d v)
The given 3D-vector is treated as a 4D-vector with its w-component being 0.0, so it
will represent a direction in 3D-space rather than a position. This method will therefore
not take the translation part of the matrix into account.
In order to store the result in another vector, use transformDirection(Vector3dc, Vector3d).
v - the vector to transform and to hold the final resultVector3d transformDirection(Vector3dc v, Vector3d dest)
dest.
The given 3D-vector is treated as a 4D-vector with its w-component being 0.0, so it
will represent a direction in 3D-space rather than a position. This method will therefore
not take the translation part of the matrix into account.
In order to store the result in the same vector, use transformDirection(Vector3d).
v - the vector to transform and to hold the final resultdest - will hold the resultMatrix4x3d scale(Vector3dc xyz, Matrix4x3d dest)
this matrix by scaling the base axes by the given xyz.x,
xyz.y and xyz.z factors, respectively and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v
, the scaling will be applied first!
xyz - the factors of the x, y and z component, respectivelydest - will hold the resultMatrix4x3d scale(double x, double y, double z, Matrix4x3d dest)
this matrix by scaling the base axes by the given x,
y and z factors and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v
, the scaling will be applied first!
x - the factor of the x componenty - the factor of the y componentz - the factor of the z componentdest - will hold the resultMatrix4x3d scale(double xyz, Matrix4x3d dest)
dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v
, the scaling will be applied first!
xyz - the factor for all componentsdest - will hold the resultscale(double, double, double, Matrix4x3d)Matrix4x3d scaleXY(double x, double y, Matrix4x3d dest)
x and the Y axis by y
and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
scaling will be applied first!
x - the factor of the x componenty - the factor of the y componentdest - will hold the resultMatrix4x3d scaleLocal(double x, double y, double z, Matrix4x3d dest)
this matrix by scaling the base axes by the given x,
y and z factors and store the result in dest.
If M is this matrix and S the scaling matrix,
then the new matrix will be S * M. So when transforming a
vector v with the new matrix by using S * M * v
, the scaling will be applied last!
x - the factor of the x componenty - the factor of the y componentz - the factor of the z componentdest - will hold the resultMatrix4x3d rotate(double ang, double x, double y, double z, Matrix4x3d dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v
, the rotation will be applied first!
ang - the angle is in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4x3d rotateTranslation(double ang, double x, double y, double z, Matrix4x3d dest)
(x, y, z) axis and store the result in dest.
This method assumes this to only contain a translation.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4x3d rotateAround(Quaterniondc quat, double ox, double oy, double oz, Matrix4x3d dest)
Quaterniondc to this matrix while using (ox, oy, oz) as the rotation origin,
and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
This method is equivalent to calling: translate(ox, oy, oz, dest).rotate(quat).translate(-ox, -oy, -oz)
Reference: http://en.wikipedia.org
quat - the 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 resultMatrix4x3d rotateLocal(double ang, double x, double y, double z, Matrix4x3d dest)
(x, y, z) axis and store the result in dest.
The axis described by the three components needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be R * M. So when transforming a
vector v with the new matrix by using R * M * v, the
rotation will be applied last!
Reference: http://en.wikipedia.org
ang - the angle in radiansx - the x component of the axisy - the y component of the axisz - the z component of the axisdest - will hold the resultMatrix4x3d translate(Vector3dc offset, Matrix4x3d dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be M * T. So when
transforming a vector v with the new matrix by using
M * T * v, the translation will be applied first!
offset - the number of units in x, y and z by which to translatedest - will hold the resultMatrix4x3d translate(Vector3fc offset, Matrix4x3d dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be M * T. So when
transforming a vector v with the new matrix by using
M * T * v, the translation will be applied first!
offset - the number of units in x, y and z by which to translatedest - will hold the resultMatrix4x3d translate(double x, double y, double z, Matrix4x3d dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be M * T. So when
transforming a vector v with the new matrix by using
M * T * v, the translation will be applied first!
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in zdest - will hold the resultMatrix4x3d translateLocal(Vector3fc offset, Matrix4x3d dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be T * M. So when
transforming a vector v with the new matrix by using
T * M * v, the translation will be applied last!
offset - the number of units in x, y and z by which to translatedest - will hold the resultMatrix4x3d translateLocal(Vector3dc offset, Matrix4x3d dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be T * M. So when
transforming a vector v with the new matrix by using
T * M * v, the translation will be applied last!
offset - the number of units in x, y and z by which to translatedest - will hold the resultMatrix4x3d translateLocal(double x, double y, double z, Matrix4x3d dest)
dest.
If M is this matrix and T the translation
matrix, then the new matrix will be T * M. So when
transforming a vector v with the new matrix by using
T * M * v, the translation will be applied last!
x - the offset to translate in xy - the offset to translate in yz - the offset to translate in zdest - will hold the resultMatrix4x3d rotateX(double ang, Matrix4x3d dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansdest - will hold the resultMatrix4x3d rotateY(double ang, Matrix4x3d dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansdest - will hold the resultMatrix4x3d rotateZ(double ang, Matrix4x3d dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
Reference: http://en.wikipedia.org
ang - the angle in radiansdest - will hold the resultMatrix4x3d rotateXYZ(double angleX, double angleY, double angleZ, Matrix4x3d dest)
angleX radians about the X axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
This method is equivalent to calling: rotateX(angleX, dest).rotateY(angleY).rotateZ(angleZ)
angleX - the angle to rotate about XangleY - the angle to rotate about YangleZ - the angle to rotate about Zdest - will hold the resultMatrix4x3d rotateZYX(double angleZ, double angleY, double angleX, Matrix4x3d dest)
angleZ radians about the Z axis, followed by a rotation of angleY radians about the Y axis and
followed by a rotation of angleX radians about the X axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
This method is equivalent to calling: rotateZ(angleZ, dest).rotateY(angleY).rotateX(angleX)
angleZ - the angle to rotate about ZangleY - the angle to rotate about YangleX - the angle to rotate about Xdest - will hold the resultMatrix4x3d rotateYXZ(double angleY, double angleX, double angleZ, Matrix4x3d dest)
angleY radians about the Y axis, followed by a rotation of angleX radians about the X axis and
followed by a rotation of angleZ radians about the Z axis and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and R the rotation matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
rotation will be applied first!
This method is equivalent to calling: rotateY(angleY, dest).rotateX(angleX).rotateZ(angleZ)
angleY - the angle to rotate about YangleX - the angle to rotate about XangleZ - the angle to rotate about Zdest - will hold the resultMatrix4x3d rotate(Quaterniondc quat, Matrix4x3d dest)
Quaterniondc to this matrix and store
the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaterniondcdest - will hold the resultMatrix4x3d rotate(Quaternionfc quat, Matrix4x3d dest)
Quaternionfc to this matrix and store
the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4x3d rotateTranslation(Quaterniondc quat, Matrix4x3d dest)
Quaterniondc to this matrix, which is assumed to only contain a translation, and store
the result in dest.
This method assumes this to only contain a translation.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaterniondcdest - will hold the resultMatrix4x3d rotateTranslation(Quaternionfc quat, Matrix4x3d dest)
Quaternionfc to this matrix, which is assumed to only contain a translation, and store
the result in dest.
This method assumes this to only contain a translation.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be M * Q. So when transforming a
vector v with the new matrix by using M * Q * v,
the quaternion rotation will be applied first!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4x3d rotateLocal(Quaterniondc quat, Matrix4x3d dest)
Quaterniondc to this matrix and store
the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be Q * M. So when transforming a
vector v with the new matrix by using Q * M * v,
the quaternion rotation will be applied last!
Reference: http://en.wikipedia.org
quat - the Quaterniondcdest - will hold the resultMatrix4x3d rotateLocal(Quaternionfc quat, Matrix4x3d dest)
Quaternionfc to this matrix and store
the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and Q the rotation matrix obtained from the given quaternion,
then the new matrix will be Q * M. So when transforming a
vector v with the new matrix by using Q * M * v,
the quaternion rotation will be applied last!
Reference: http://en.wikipedia.org
quat - the Quaternionfcdest - will hold the resultMatrix4x3d rotate(AxisAngle4f axisAngle, Matrix4x3d dest)
AxisAngle4f and store the result in dest.
The axis described by the axis vector needs to be a unit vector.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and A the rotation matrix obtained from the given AxisAngle4f,
then the new matrix will be M * A. So when transforming a
vector v with the new matrix by using M * A * v,
the AxisAngle4f rotation will be applied first!
Reference: http://en.wikipedia.org
axisAngle - the AxisAngle4f (needs to be normalized)dest - will hold the resultrotate(double, double, double, double, Matrix4x3d)Matrix4x3d rotate(AxisAngle4d axisAngle, Matrix4x3d dest)
AxisAngle4d and store the result in dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and A the rotation matrix obtained from the given AxisAngle4d,
then the new matrix will be M * A. So when transforming a
vector v with the new matrix by using M * A * v,
the AxisAngle4d rotation will be applied first!
Reference: http://en.wikipedia.org
axisAngle - the AxisAngle4d (needs to be normalized)dest - will hold the resultrotate(double, double, double, double, Matrix4x3d)Matrix4x3d rotate(double angle, Vector3dc axis, Matrix4x3d dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and A the rotation matrix obtained from the given angle and axis,
then the new matrix will be M * A. So when transforming a
vector v with the new matrix by using M * A * v,
the axis-angle rotation will be applied first!
Reference: http://en.wikipedia.org
angle - the angle in radiansaxis - the rotation axis (needs to be normalized)dest - will hold the resultrotate(double, double, double, double, Matrix4x3d)Matrix4x3d rotate(double angle, Vector3fc axis, Matrix4x3d dest)
dest.
When used with a right-handed coordinate system, the produced rotation will rotate a vector counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin. When used with a left-handed coordinate system, the rotation is clockwise.
If M is this matrix and A the rotation matrix obtained from the given angle and axis,
then the new matrix will be M * A. So when transforming a
vector v with the new matrix by using M * A * v,
the axis-angle rotation will be applied first!
Reference: http://en.wikipedia.org
angle - the angle in radiansaxis - the rotation axis (needs to be normalized)dest - will hold the resultrotate(double, double, double, double, Matrix4x3d)Vector4d getRow(int row, Vector4d dest) throws IndexOutOfBoundsException
row index, starting with 0.row - the row index in [0..2]dest - will hold the row componentsIndexOutOfBoundsException - if row is not in [0..2]Vector3d getColumn(int column, Vector3d dest) throws IndexOutOfBoundsException
column index, starting with 0.column - the column index in [0..3]dest - will hold the column componentsIndexOutOfBoundsException - if column is not in [0..3]Matrix4x3d normal(Matrix4x3d dest)
this
and store it into the left 3x3 submatrix of dest.
All other values of dest will be set to identity.
The normal matrix of m is the transpose of the inverse of m.
dest - will hold the resultMatrix3d normal(Matrix3d dest)
this
and store it into dest.
The normal matrix of m is the transpose of the inverse of m.
dest - will hold the resultMatrix3d 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.
dest - will hold the resultMatrix4x3d cofactor3x3(Matrix4x3d 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(Matrix4x3d) to transform normals
when the orientation of the normals with respect to the surface should be preserved.
dest - will hold the resultMatrix4x3d normalize3x3(Matrix4x3d dest)
dest.
The resulting matrix will map unit vectors to unit vectors, though a pair of orthogonal input unit vectors need not be mapped to a pair of orthogonal output vectors if the original matrix was not orthogonal itself (i.e. had skewing).
dest - will hold the resultMatrix3d normalize3x3(Matrix3d dest)
dest.
The resulting matrix will map unit vectors to unit vectors, though a pair of orthogonal input unit vectors need not be mapped to a pair of orthogonal output vectors if the original matrix was not orthogonal itself (i.e. had skewing).
dest - will hold the resultMatrix4x3d reflect(double a, double b, double c, double d, Matrix4x3d dest)
x*a + y*b + z*c + d = 0 and store the result in dest.
The vector (a, b, c) must be a unit vector.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
Reference: msdn.microsoft.com
a - the x factor in the plane equationb - the y factor in the plane equationc - the z factor in the plane equationd - the constant in the plane equationdest - will hold the resultMatrix4x3d reflect(double nx, double ny, double nz, double px, double py, double pz, Matrix4x3d dest)
dest.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
nx - the x-coordinate of the plane normalny - the y-coordinate of the plane normalnz - the z-coordinate of the plane normalpx - the x-coordinate of a point on the planepy - the y-coordinate of a point on the planepz - the z-coordinate of a point on the planedest - will hold the resultMatrix4x3d reflect(Quaterniondc orientation, Vector3dc point, Matrix4x3d dest)
dest.
This method can be used to build a reflection transformation based on the orientation of a mirror object in the scene.
It is assumed that the default mirror plane's normal is (0, 0, 1). So, if the given Quaterniondc is
the identity (does not apply any additional rotation), the reflection plane will be z=0, offset by the given point.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
orientation - the plane orientationpoint - a point on the planedest - will hold the resultMatrix4x3d reflect(Vector3dc normal, Vector3dc point, Matrix4x3d dest)
dest.
If M is this matrix and R the reflection matrix,
then the new matrix will be M * R. So when transforming a
vector v with the new matrix by using M * R * v, the
reflection will be applied first!
normal - the plane normalpoint - a point on the planedest - will hold the resultMatrix4x3d ortho(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne, Matrix4x3d dest)
dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancezZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4x3d ortho(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4x3d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4x3d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar, boolean zZeroToOne, Matrix4x3d dest)
dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancezZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falsedest - will hold the resultMatrix4x3d orthoLH(double left, double right, double bottom, double top, double zNear, double zFar, Matrix4x3d dest)
[-1..+1] to this matrix and store the result in dest.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgezNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4x3d orthoSymmetric(double width, double height, double zNear, double zFar, boolean zZeroToOne, Matrix4x3d dest)
dest.
This method is equivalent to calling ortho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4x3d orthoSymmetric(double width, double height, double zNear, double zFar, Matrix4x3d dest)
[-1..+1] to this matrix and store the result in dest.
This method is equivalent to calling ortho() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4x3d orthoSymmetricLH(double width, double height, double zNear, double zFar, boolean zZeroToOne, Matrix4x3d dest)
dest.
This method is equivalent to calling orthoLH() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultzZeroToOne - whether to use Vulkan's and Direct3D's NDC z range of [0..+1] when true
or whether to use OpenGL's NDC z range of [-1..+1] when falseMatrix4x3d orthoSymmetricLH(double width, double height, double zNear, double zFar, Matrix4x3d dest)
[-1..+1] to this matrix and store the result in dest.
This method is equivalent to calling orthoLH() with
left=-width/2, right=+width/2, bottom=-height/2 and top=+height/2.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
width - the distance between the right and left frustum edgesheight - the distance between the top and bottom frustum edgeszNear - near clipping plane distancezFar - far clipping plane distancedest - will hold the resultMatrix4x3d ortho2D(double left, double right, double bottom, double top, Matrix4x3d dest)
dest.
This method is equivalent to calling ortho() with
zNear=-1 and zFar=+1.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgedest - will hold the resultortho(double, double, double, double, double, double, Matrix4x3d)Matrix4x3d ortho2DLH(double left, double right, double bottom, double top, Matrix4x3d dest)
dest.
This method is equivalent to calling orthoLH() with
zNear=-1 and zFar=+1.
If M is this matrix and O the orthographic projection matrix,
then the new matrix will be M * O. So when transforming a
vector v with the new matrix by using M * O * v, the
orthographic projection transformation will be applied first!
Reference: http://www.songho.ca
left - the distance from the center to the left frustum edgeright - the distance from the center to the right frustum edgebottom - the distance from the center to the bottom frustum edgetop - the distance from the center to the top frustum edgedest - will hold the resultorthoLH(double, double, double, double, double, double, Matrix4x3d)Matrix4x3d lookAlong(Vector3dc dir, Vector3dc up, Matrix4x3d dest)
-z point along dir
and store the result in dest.
If M is this matrix and L the lookalong rotation matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v, the
lookalong rotation transformation will be applied first!
This is equivalent to calling
lookAt
with eye = (0, 0, 0) and center = dir.
dir - the direction in space to look alongup - the direction of 'up'dest - will hold the resultlookAlong(double, double, double, double, double, double, Matrix4x3d),
lookAt(Vector3dc, Vector3dc, Vector3dc, Matrix4x3d)Matrix4x3d lookAlong(double dirX, double dirY, double dirZ, double upX, double upY, double upZ, Matrix4x3d dest)
-z point along dir
and store the result in dest.
If M is this matrix and L the lookalong rotation matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v, the
lookalong rotation transformation will be applied first!
This is equivalent to calling
lookAt()
with eye = (0, 0, 0) and center = dir.
dirX - the x-coordinate of the direction to look alongdirY - the y-coordinate of the direction to look alongdirZ - the z-coordinate of the direction to look alongupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultlookAt(double, double, double, double, double, double, double, double, double, Matrix4x3d)Matrix4x3d lookAt(Vector3dc eye, Vector3dc center, Vector3dc up, Matrix4x3d dest)
-z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'dest - will hold the resultlookAt(double, double, double, double, double, double, double, double, double, Matrix4x3d)Matrix4x3d lookAt(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ, Matrix4x3d dest)
-z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eyeX - the x-coordinate of the eye/camera locationeyeY - the y-coordinate of the eye/camera locationeyeZ - the z-coordinate of the eye/camera locationcenterX - the x-coordinate of the point to look atcenterY - the y-coordinate of the point to look atcenterZ - the z-coordinate of the point to look atupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultlookAt(Vector3dc, Vector3dc, Vector3dc, Matrix4x3d)Matrix4x3d lookAtLH(Vector3dc eye, Vector3dc center, Vector3dc up, Matrix4x3d dest)
+z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eye - the position of the cameracenter - the point in space to look atup - the direction of 'up'dest - will hold the resultlookAtLH(double, double, double, double, double, double, double, double, double, Matrix4x3d)Matrix4x3d lookAtLH(double eyeX, double eyeY, double eyeZ, double centerX, double centerY, double centerZ, double upX, double upY, double upZ, Matrix4x3d dest)
+z with center - eye and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
eyeX - the x-coordinate of the eye/camera locationeyeY - the y-coordinate of the eye/camera locationeyeZ - the z-coordinate of the eye/camera locationcenterX - the x-coordinate of the point to look atcenterY - the y-coordinate of the point to look atcenterZ - the z-coordinate of the point to look atupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultlookAtLH(Vector3dc, Vector3dc, Vector3dc, Matrix4x3d)Planed frustumPlane(int which, Planed plane)
this matrix, which
can be a projection matrix or a combined modelview-projection matrix, and store the result
in the given plane.
Generally, this method computes the frustum plane in the local frame of
any coordinate system that existed before this
transformation was applied to it in order to yield homogeneous clipping space.
The plane normal, which is (a, b, c), is directed "inwards" of the frustum.
Any plane/point test using a*x + b*y + c*z + d therefore will yield a result greater than zero
if the point is within the frustum (i.e. at the positive side of the frustum plane).
Reference: Fast Extraction of Viewing Frustum Planes from the World-View-Projection Matrix
Vector3d positiveZ(Vector3d dir)
+Z before the transformation represented by this matrix is applied.
This method uses the rotation component of the left 3x3 submatrix to obtain the direction
that is transformed to +Z by this matrix.
This method is equivalent to the following code:
Matrix4x3d inv = new Matrix4x3d(this).invert(); inv.transformDirection(dir.set(0, 0, 1)).normalize();If
this is already an orthogonal matrix, then consider using normalizedPositiveZ(Vector3d) instead.
Reference: http://www.euclideanspace.com
dir - will hold the direction of +ZVector3d normalizedPositiveZ(Vector3d dir)
+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 left 3x3 submatrix to obtain the direction
that is transformed to +Z by this matrix.
This method is equivalent to the following code:
Matrix4x3d inv = new Matrix4x3d(this).transpose(); inv.transformDirection(dir.set(0, 0, 1)).normalize();
Reference: http://www.euclideanspace.com
dir - will hold the direction of +ZVector3d positiveX(Vector3d dir)
+X before the transformation represented by this matrix is applied.
This method uses the rotation component of the left 3x3 submatrix to obtain the direction
that is transformed to +X by this matrix.
This method is equivalent to the following code:
Matrix4x3d inv = new Matrix4x3d(this).invert(); inv.transformDirection(dir.set(1, 0, 0)).normalize();If
this is already an orthogonal matrix, then consider using normalizedPositiveX(Vector3d) instead.
Reference: http://www.euclideanspace.com
dir - will hold the direction of +XVector3d normalizedPositiveX(Vector3d dir)
+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 left 3x3 submatrix to obtain the direction
that is transformed to +X by this matrix.
This method is equivalent to the following code:
Matrix4x3d inv = new Matrix4x3d(this).transpose(); inv.transformDirection(dir.set(1, 0, 0)).normalize();
Reference: http://www.euclideanspace.com
dir - will hold the direction of +XVector3d positiveY(Vector3d dir)
+Y before the transformation represented by this matrix is applied.
This method uses the rotation component of the left 3x3 submatrix to obtain the direction
that is transformed to +Y by this matrix.
This method is equivalent to the following code:
Matrix4x3d inv = new Matrix4x3d(this).invert(); inv.transformDirection(dir.set(0, 1, 0)).normalize();If
this is already an orthogonal matrix, then consider using normalizedPositiveY(Vector3d) instead.
Reference: http://www.euclideanspace.com
dir - will hold the direction of +YVector3d normalizedPositiveY(Vector3d dir)
+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 left 3x3 submatrix to obtain the direction
that is transformed to +Y by this matrix.
This method is equivalent to the following code:
Matrix4x3d inv = new Matrix4x3d(this).transpose(); inv.transformDirection(dir.set(0, 1, 0)).normalize();
Reference: http://www.euclideanspace.com
dir - will hold the direction of +YVector3d origin(Vector3d origin)
this matrix.
This can be used to get the position of the "camera" from a given view transformation matrix.
This method is equivalent to the following code:
Matrix4x3f inv = new Matrix4x3f(this).invert(); inv.transformPosition(origin.set(0, 0, 0));
origin - will hold the position transformed to the originMatrix4x3d shadow(Vector4dc light, double a, double b, double c, double d, Matrix4x3d dest)
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction light
and store the result in dest.
If light.w is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
Reference: ftp.sgi.com
light - the light's vectora - the x factor in the plane equationb - the y factor in the plane equationc - the z factor in the plane equationd - the constant in the plane equationdest - will hold the resultMatrix4x3d shadow(double lightX, double lightY, double lightZ, double lightW, double a, double b, double c, double d, Matrix4x3d dest)
x*a + y*b + z*c + d = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest.
If lightW is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
Reference: ftp.sgi.com
lightX - the x-component of the light's vectorlightY - the y-component of the light's vectorlightZ - the z-component of the light's vectorlightW - the w-component of the light's vectora - the x factor in the plane equationb - the y factor in the plane equationc - the z factor in the plane equationd - the constant in the plane equationdest - will hold the resultMatrix4x3d shadow(Vector4dc light, Matrix4x3dc planeTransform, Matrix4x3d dest)
y = 0 as if casting a shadow from a given light position/direction light
and store the result in dest.
Before the shadow projection is applied, the plane is transformed via the specified planeTransformation.
If light.w is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
light - the light's vectorplaneTransform - the transformation to transform the implied plane y = 0 before applying the projectiondest - will hold the resultMatrix4x3d shadow(double lightX, double lightY, double lightZ, double lightW, Matrix4x3dc planeTransform, Matrix4x3d dest)
y = 0 as if casting a shadow from a given light position/direction (lightX, lightY, lightZ, lightW)
and store the result in dest.
Before the shadow projection is applied, the plane is transformed via the specified planeTransformation.
If lightW is 0.0 the light is being treated as a directional light; if it is 1.0 it is a point light.
If M is this matrix and S the shadow matrix,
then the new matrix will be M * S. So when transforming a
vector v with the new matrix by using M * S * v, the
reflection will be applied first!
lightX - the x-component of the light vectorlightY - the y-component of the light vectorlightZ - the z-component of the light vectorlightW - the w-component of the light vectorplaneTransform - the transformation to transform the implied plane y = 0 before applying the projectiondest - will hold the resultMatrix4x3d pick(double x, double y, double width, double height, int[] viewport, Matrix4x3d dest)
(x, y) as the pick center
and the given (width, height) as the size of the picking region in window coordinates, and store the result
in dest.x - the x coordinate of the picking region center in window coordinatesy - the y coordinate of the picking region center in window coordinateswidth - the width of the picking region in window coordinatesheight - the height of the picking region in window coordinatesviewport - the viewport described by [x, y, width, height]dest - the destination matrix, which will hold the resultMatrix4x3d arcball(double radius, double centerX, double centerY, double centerZ, double angleX, double angleY, Matrix4x3d dest)
radius and center (centerX, centerY, centerZ)
position of the arcball and the specified X and Y rotation angles, and store the result in dest.
This method is equivalent to calling: translate(0, 0, -radius).rotateX(angleX).rotateY(angleY).translate(-centerX, -centerY, -centerZ)
radius - the arcball radiuscenterX - the x coordinate of the center position of the arcballcenterY - the y coordinate of the center position of the arcballcenterZ - the z coordinate of the center position of the arcballangleX - the rotation angle around the X axis in radiansangleY - the rotation angle around the Y axis in radiansdest - will hold the resultMatrix4x3d arcball(double radius, Vector3dc center, double angleX, double angleY, Matrix4x3d dest)
radius and center
position of the arcball and the specified X and Y rotation angles, and store the result in dest.
This method is equivalent to calling: translate(0, 0, -radius).rotateX(angleX).rotateY(angleY).translate(-center.x, -center.y, -center.z)
radius - the arcball radiuscenter - the center position of the arcballangleX - the rotation angle around the X axis in radiansangleY - the rotation angle around the Y axis in radiansdest - will hold the resultMatrix4x3d transformAab(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, Vector3d outMin, Vector3d outMax)
(minX, minY, minZ) and maximum corner (maxX, maxY, maxZ)
by this matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax.
Reference: http://dev.theomader.com
minX - the x coordinate of the minimum corner of the axis-aligned boxminY - the y coordinate of the minimum corner of the axis-aligned boxminZ - the z coordinate of the minimum corner of the axis-aligned boxmaxX - the x coordinate of the maximum corner of the axis-aligned boxmaxY - the y coordinate of the maximum corner of the axis-aligned boxmaxZ - the y coordinate of the maximum corner of the axis-aligned boxoutMin - will hold the minimum corner of the resulting axis-aligned boxoutMax - will hold the maximum corner of the resulting axis-aligned boxMatrix4x3d transformAab(Vector3dc min, Vector3dc max, Vector3d outMin, Vector3d outMax)
min and maximum corner max
by this matrix and compute the axis-aligned box of the result whose minimum corner is stored in outMin
and maximum corner stored in outMax.min - the minimum corner of the axis-aligned boxmax - the maximum corner of the axis-aligned boxoutMin - will hold the minimum corner of the resulting axis-aligned boxoutMax - will hold the maximum corner of the resulting axis-aligned boxMatrix4x3d lerp(Matrix4x3dc other, double t, Matrix4x3d dest)
this and other using the given interpolation factor t
and store the result in dest.
If t is 0.0 then the result is this. If the interpolation factor is 1.0
then the result is other.
other - the other matrixt - the interpolation factor between 0.0 and 1.0dest - will hold the resultMatrix4x3d rotateTowards(Vector3dc dir, Vector3dc up, Matrix4x3d dest)
-z axis with dir
and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
This method is equivalent to calling: mul(new Matrix4x3d().lookAt(new Vector3d(), new Vector3d(dir).negate(), up).invert(), dest)
dir - the direction to rotate towardsup - the up vectordest - will hold the resultrotateTowards(double, double, double, double, double, double, Matrix4x3d)Matrix4x3d rotateTowards(double dirX, double dirY, double dirZ, double upX, double upY, double upZ, Matrix4x3d dest)
-z axis with (dirX, dirY, dirZ)
and store the result in dest.
If M is this matrix and L the lookat matrix,
then the new matrix will be M * L. So when transforming a
vector v with the new matrix by using M * L * v,
the lookat transformation will be applied first!
This method is equivalent to calling: mul(new Matrix4x3d().lookAt(0, 0, 0, -dirX, -dirY, -dirZ, upX, upY, upZ).invert(), dest)
dirX - the x-coordinate of the direction to rotate towardsdirY - the y-coordinate of the direction to rotate towardsdirZ - the z-coordinate of the direction to rotate towardsupX - the x-coordinate of the up vectorupY - the y-coordinate of the up vectorupZ - the z-coordinate of the up vectordest - will hold the resultrotateTowards(Vector3dc, Vector3dc, Matrix4x3d)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 Matrix4x3d.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).
Matrix4x3d m = ...; // <- matrix only representing rotation Matrix4x3d n = new Matrix4x3d(); n.rotateZYX(m.getEulerAnglesZYX(new Vector3d()));
Reference: http://nghiaho.com/
dest - will hold the extracted Euler anglesMatrix4x3d obliqueZ(double a, double b, Matrix4x3d 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
a - the value for the z factor that applies to xb - the value for the z factor that applies to ydest - will hold the resultboolean equals(Matrix4x3dc m, double delta)
this matrix with the given matrix using the given delta
and return whether all of them are equal within a maximum difference of delta.
Please note that this method is not used by any data structure such as ArrayList HashSet or HashMap
and their operations, such as ArrayList.contains(Object) or HashSet.remove(Object), since those
data structures only use the Object.equals(Object) and Object.hashCode() methods.
m - the other matrixdelta - the allowed maximum differencetrue whether all of the matrix elements are equal; false otherwiseCopyright © 2015–2019 JOML. All rights reserved.