Package com.badlogic.gdx.math
Class Matrix4
- java.lang.Object
-
- com.badlogic.gdx.math.Matrix4
-
- All Implemented Interfaces:
java.io.Serializable
public class Matrix4 extends java.lang.Object implements java.io.SerializableEncapsulates a column major 4 by 4 matrix. Like theVector3class it allows the chaining of methods by returning a reference to itself. For example:Matrix4 mat = new Matrix4().trn(position).mul(camera.combined);
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static intM00XX: Typically the unrotated X component for scaling, also the cosine of the angle when rotated on the Y and/or Z axis.static intM01XY: Typically the negative sine of the angle when rotated on the Z axis.static intM02XZ: Typically the sine of the angle when rotated on the Y axis.static intM03XW: Typically the translation of the X component.static intM10YX: Typically the sine of the angle when rotated on the Z axis.static intM11YY: Typically the unrotated Y component for scaling, also the cosine of the angle when rotated on the X and/or Z axis.static intM12YZ: Typically the negative sine of the angle when rotated on the X axis.static intM13YW: Typically the translation of the Y component.static intM20ZX: Typically the negative sine of the angle when rotated on the Y axis.static intM21ZY: Typical the sine of the angle when rotated on the X axis.static intM22ZZ: Typically the unrotated Z component for scaling, also the cosine of the angle when rotated on the X and/or Y axis.static intM23ZW: Typically the translation of the Z component.static intM30WX: Typically the value zero.static intM31WY: Typically the value zero.static intM32WZ: Typically the value zero.static intM33WW: Typically the value one.float[]val
-
Constructor Summary
Constructors Constructor Description Matrix4()Constructs an identity matrixMatrix4(float[] values)Constructs a matrix from the given float array.Matrix4(Matrix4 matrix)Constructs a matrix from the given matrix.Matrix4(Quaternion quaternion)Constructs a rotation matrix from the givenQuaternion.Matrix4(Vector3 position, Quaternion rotation, Vector3 scale)Construct a matrix from the given translation, rotation and scale.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Matrix4avg(Matrix4[] t)Averages the given transforms and stores the result in this matrix.Matrix4avg(Matrix4[] t, float[] w)Averages the given transforms with the given weights and stores the result in this matrix.Matrix4avg(Matrix4 other, float w)Averages the given transform with this one and stores the result in this matrix.Matrix4cpy()floatdet()static floatdet(float[] values)Computes the determinante of the given matrix.floatdet3x3()voidextract4x3Matrix(float[] dst)Copies the 4x3 upper-left sub-matrix into float array.QuaterniongetRotation(Quaternion rotation)Gets the rotation of this matrix.QuaterniongetRotation(Quaternion rotation, boolean normalizeAxes)Gets the rotation of this matrix.Vector3getScale(Vector3 scale)floatgetScaleX()floatgetScaleXSquared()floatgetScaleY()floatgetScaleYSquared()floatgetScaleZ()floatgetScaleZSquared()Vector3getTranslation(Vector3 position)float[]getValues()booleanhasRotationOrScaling()Matrix4idt()Sets the matrix to an identity matrix.Matrix4inv()Inverts the matrix.static booleaninv(float[] values)Computes the inverse of the given matrix.Matrix4lerp(Matrix4 matrix, float alpha)Linearly interpolates between this matrix and the given matrix mixing by alphastatic voidmul(float[] mata, float[] matb)Multiplies the matrix mata with matrix matb, storing the result in mata.Matrix4mul(Matrix4 matrix)Postmultiplies this matrix with the given matrix, storing the result in this matrix.Matrix4mulLeft(Matrix4 matrix)Premultiplies this matrix with the given matrix, storing the result in this matrix.static voidmulVec(float[] mat, float[] vec)Multiplies the vector with the given matrix.static voidmulVec(float[] mat, float[] vecs, int offset, int numVecs, int stride)Multiplies the vectors with the given matrix.static voidprj(float[] mat, float[] vec)Multiplies the vector with the given matrix, performing a division by w.static voidprj(float[] mat, float[] vecs, int offset, int numVecs, int stride)Multiplies the vectors with the given matrix, , performing a division by w.static voidrot(float[] mat, float[] vec)Multiplies the vector with the top most 3x3 sub-matrix of the given matrix.static voidrot(float[] mat, float[] vecs, int offset, int numVecs, int stride)Multiplies the vectors with the top most 3x3 sub-matrix of the given matrix.Matrix4rotate(float axisX, float axisY, float axisZ, float degrees)Postmultiplies this matrix with a (counter-clockwise) rotation matrix.Matrix4rotate(Quaternion rotation)Postmultiplies this matrix with a (counter-clockwise) rotation matrix.Matrix4rotate(Vector3 axis, float degrees)Postmultiplies this matrix with a (counter-clockwise) rotation matrix.Matrix4rotate(Vector3 v1, Vector3 v2)Postmultiplies this matrix by the rotation between two vectors.Matrix4rotateRad(float axisX, float axisY, float axisZ, float radians)Postmultiplies this matrix with a (counter-clockwise) rotation matrix.Matrix4rotateRad(Vector3 axis, float radians)Postmultiplies this matrix with a (counter-clockwise) rotation matrix.Matrix4rotateTowardDirection(Vector3 direction, Vector3 up)Post-multiplies this matrix by a rotation toward a direction.Matrix4rotateTowardTarget(Vector3 target, Vector3 up)Post-multiplies this matrix by a rotation toward a target.Matrix4scale(float scaleX, float scaleY, float scaleZ)Postmultiplies this matrix with a scale matrix.Matrix4scl(float scale)Matrix4scl(float x, float y, float z)Matrix4scl(Vector3 scale)Matrix4set(float[] values)Sets the matrix to the given matrix as a float array.Matrix4set(float quaternionX, float quaternionY, float quaternionZ, float quaternionW)Sets the matrix to a rotation matrix representing the quaternion.Matrix4set(float translationX, float translationY, float translationZ, float quaternionX, float quaternionY, float quaternionZ, float quaternionW)Sets the matrix to a rotation matrix representing the translation and quaternion.Matrix4set(float translationX, float translationY, float translationZ, float quaternionX, float quaternionY, float quaternionZ, float quaternionW, float scaleX, float scaleY, float scaleZ)Sets the matrix to a rotation matrix representing the translation and quaternion.Matrix4set(Affine2 affine)Sets this matrix to the given affine matrix.Matrix4set(Matrix3 mat)Sets this matrix to the given 3x3 matrix.Matrix4set(Matrix4 matrix)Sets the matrix to the given matrix.Matrix4set(Quaternion quaternion)Sets the matrix to a rotation matrix representing the quaternion.Matrix4set(Vector3 position, Quaternion orientation)Set this matrix to the specified translation and rotation.Matrix4set(Vector3 position, Quaternion orientation, Vector3 scale)Set this matrix to the specified translation, rotation and scale.Matrix4set(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis, Vector3 pos)Sets the four columns of the matrix which correspond to the x-, y- and z-axis of the vector space this matrix creates as well as the 4th column representing the translation of any point that is multiplied by this matrix.Matrix4setAsAffine(Affine2 affine)Assumes that this matrix is a 2D affine transformation, copying only the relevant components.Matrix4setAsAffine(Matrix4 mat)Assumes that both matrices are 2D affine transformations, copying only the relevant components.Matrix4setFromEulerAngles(float yaw, float pitch, float roll)Sets this matrix to a rotation matrix from the given euler angles.Matrix4setFromEulerAnglesRad(float yaw, float pitch, float roll)Sets this matrix to a rotation matrix from the given euler angles.Matrix4setToLookAt(Vector3 direction, Vector3 up)Sets the matrix to a look at matrix with a direction and an up vector.Matrix4setToLookAt(Vector3 position, Vector3 target, Vector3 up)Sets this matrix to a look at matrix with the given position, target and up vector.Matrix4setToOrtho(float left, float right, float bottom, float top, float near, float far)Sets the matrix to an orthographic projection like glOrtho (http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml) following the OpenGL equivalentMatrix4setToOrtho2D(float x, float y, float width, float height)Sets this matrix to an orthographic projection matrix with the origin at (x,y) extending by width and height.Matrix4setToOrtho2D(float x, float y, float width, float height, float near, float far)Sets this matrix to an orthographic projection matrix with the origin at (x,y) extending by width and height, having a near and far plane.Matrix4setToProjection(float near, float far, float fovy, float aspectRatio)Sets the matrix to a projection matrix with a near- and far plane, a field of view in degrees and an aspect ratio.Matrix4setToProjection(float left, float right, float bottom, float top, float near, float far)Sets the matrix to a projection matrix with a near/far plane, and left, bottom, right and top specifying the points on the near plane that are mapped to the lower left and upper right corners of the viewport.Matrix4setToRotation(float axisX, float axisY, float axisZ, float degrees)Sets the matrix to a rotation matrix around the given axis.Matrix4setToRotation(float x1, float y1, float z1, float x2, float y2, float z2)Set the matrix to a rotation matrix between two vectors.Matrix4setToRotation(Vector3 axis, float degrees)Sets the matrix to a rotation matrix around the given axis.Matrix4setToRotation(Vector3 v1, Vector3 v2)Set the matrix to a rotation matrix between two vectors.Matrix4setToRotationRad(float axisX, float axisY, float axisZ, float radians)Sets the matrix to a rotation matrix around the given axis.Matrix4setToRotationRad(Vector3 axis, float radians)Sets the matrix to a rotation matrix around the given axis.Matrix4setToScaling(float x, float y, float z)Sets this matrix to a scaling matrixMatrix4setToScaling(Vector3 vector)Sets this matrix to a scaling matrixMatrix4setToTranslation(float x, float y, float z)Sets this matrix to a translation matrix, overwriting it first by an identity matrix and then setting the 4th column to the translation vector.Matrix4setToTranslation(Vector3 vector)Sets this matrix to a translation matrix, overwriting it first by an identity matrix and then setting the 4th column to the translation vector.Matrix4setToTranslationAndScaling(float translationX, float translationY, float translationZ, float scalingX, float scalingY, float scalingZ)Sets this matrix to a translation and scaling matrix by first overwriting it with an identity and then setting the translation vector in the 4th column and the scaling vector in the diagonal.Matrix4setToTranslationAndScaling(Vector3 translation, Vector3 scaling)Sets this matrix to a translation and scaling matrix by first overwriting it with an identity and then setting the translation vector in the 4th column and the scaling vector in the diagonal.Matrix4setToWorld(Vector3 position, Vector3 forward, Vector3 up)Matrix4setTranslation(float x, float y, float z)Sets the 4th column to the translation vector.Matrix4setTranslation(Vector3 vector)Sets the 4th column to the translation vector.Matrix4toNormalMatrix()removes the translational part and transposes the matrix.java.lang.StringtoString()Matrix4tra()Transposes the matrix.Matrix4translate(float x, float y, float z)Postmultiplies this matrix by a translation matrix.Matrix4translate(Vector3 translation)Postmultiplies this matrix by a translation matrix.Matrix4trn(float x, float y, float z)Adds a translational component to the matrix in the 4th column.Matrix4trn(Vector3 vector)Adds a translational component to the matrix in the 4th column.
-
-
-
Field Detail
-
M00
public static final int M00
XX: Typically the unrotated X component for scaling, also the cosine of the angle when rotated on the Y and/or Z axis. On Vector3 multiplication this value is multiplied with the source X component and added to the target X component.- See Also:
- Constant Field Values
-
M01
public static final int M01
XY: Typically the negative sine of the angle when rotated on the Z axis. On Vector3 multiplication this value is multiplied with the source Y component and added to the target X component.- See Also:
- Constant Field Values
-
M02
public static final int M02
XZ: Typically the sine of the angle when rotated on the Y axis. On Vector3 multiplication this value is multiplied with the source Z component and added to the target X component.- See Also:
- Constant Field Values
-
M03
public static final int M03
XW: Typically the translation of the X component. On Vector3 multiplication this value is added to the target X component.- See Also:
- Constant Field Values
-
M10
public static final int M10
YX: Typically the sine of the angle when rotated on the Z axis. On Vector3 multiplication this value is multiplied with the source X component and added to the target Y component.- See Also:
- Constant Field Values
-
M11
public static final int M11
YY: Typically the unrotated Y component for scaling, also the cosine of the angle when rotated on the X and/or Z axis. On Vector3 multiplication this value is multiplied with the source Y component and added to the target Y component.- See Also:
- Constant Field Values
-
M12
public static final int M12
YZ: Typically the negative sine of the angle when rotated on the X axis. On Vector3 multiplication this value is multiplied with the source Z component and added to the target Y component.- See Also:
- Constant Field Values
-
M13
public static final int M13
YW: Typically the translation of the Y component. On Vector3 multiplication this value is added to the target Y component.- See Also:
- Constant Field Values
-
M20
public static final int M20
ZX: Typically the negative sine of the angle when rotated on the Y axis. On Vector3 multiplication this value is multiplied with the source X component and added to the target Z component.- See Also:
- Constant Field Values
-
M21
public static final int M21
ZY: Typical the sine of the angle when rotated on the X axis. On Vector3 multiplication this value is multiplied with the source Y component and added to the target Z component.- See Also:
- Constant Field Values
-
M22
public static final int M22
ZZ: Typically the unrotated Z component for scaling, also the cosine of the angle when rotated on the X and/or Y axis. On Vector3 multiplication this value is multiplied with the source Z component and added to the target Z component.- See Also:
- Constant Field Values
-
M23
public static final int M23
ZW: Typically the translation of the Z component. On Vector3 multiplication this value is added to the target Z component.- See Also:
- Constant Field Values
-
M30
public static final int M30
WX: Typically the value zero. On Vector3 multiplication this value is ignored.- See Also:
- Constant Field Values
-
M31
public static final int M31
WY: Typically the value zero. On Vector3 multiplication this value is ignored.- See Also:
- Constant Field Values
-
M32
public static final int M32
WZ: Typically the value zero. On Vector3 multiplication this value is ignored.- See Also:
- Constant Field Values
-
M33
public static final int M33
WW: Typically the value one. On Vector3 multiplication this value is ignored.- See Also:
- Constant Field Values
-
val
public final float[] val
-
-
Constructor Detail
-
Matrix4
public Matrix4()
Constructs an identity matrix
-
Matrix4
public Matrix4(Matrix4 matrix)
Constructs a matrix from the given matrix.- Parameters:
matrix- The matrix to copy. (This matrix is not modified)
-
Matrix4
public Matrix4(float[] values)
Constructs a matrix from the given float array. The array must have at least 16 elements; the first 16 will be copied.- Parameters:
values- The float array to copy. Remember that this matrix is in column major order. (The float array is not modified)
-
Matrix4
public Matrix4(Quaternion quaternion)
Constructs a rotation matrix from the givenQuaternion.- Parameters:
quaternion- The quaternion to be copied. (The quaternion is not modified)
-
Matrix4
public Matrix4(Vector3 position, Quaternion rotation, Vector3 scale)
Construct a matrix from the given translation, rotation and scale.- Parameters:
position- The translationrotation- The rotation, must be normalizedscale- The scale
-
-
Method Detail
-
set
public Matrix4 set(Matrix4 matrix)
Sets the matrix to the given matrix.- Parameters:
matrix- The matrix that is to be copied. (The given matrix is not modified)- Returns:
- This matrix for the purpose of chaining methods together.
-
set
public Matrix4 set(float[] values)
Sets the matrix to the given matrix as a float array. The float array must have at least 16 elements; the first 16 will be copied.- Parameters:
values- The matrix, in float form, that is to be copied. Remember that this matrix is in column major order.- Returns:
- This matrix for the purpose of chaining methods together.
-
set
public Matrix4 set(Quaternion quaternion)
Sets the matrix to a rotation matrix representing the quaternion.- Parameters:
quaternion- The quaternion that is to be used to set this matrix.- Returns:
- This matrix for the purpose of chaining methods together.
-
set
public Matrix4 set(float quaternionX, float quaternionY, float quaternionZ, float quaternionW)
Sets the matrix to a rotation matrix representing the quaternion.- Parameters:
quaternionX- The X component of the quaternion that is to be used to set this matrix.quaternionY- The Y component of the quaternion that is to be used to set this matrix.quaternionZ- The Z component of the quaternion that is to be used to set this matrix.quaternionW- The W component of the quaternion that is to be used to set this matrix.- Returns:
- This matrix for the purpose of chaining methods together.
-
set
public Matrix4 set(Vector3 position, Quaternion orientation)
Set this matrix to the specified translation and rotation.- Parameters:
position- The translationorientation- The rotation, must be normalized- Returns:
- This matrix for chaining
-
set
public Matrix4 set(float translationX, float translationY, float translationZ, float quaternionX, float quaternionY, float quaternionZ, float quaternionW)
Sets the matrix to a rotation matrix representing the translation and quaternion.- Parameters:
translationX- The X component of the translation that is to be used to set this matrix.translationY- The Y component of the translation that is to be used to set this matrix.translationZ- The Z component of the translation that is to be used to set this matrix.quaternionX- The X component of the quaternion that is to be used to set this matrix.quaternionY- The Y component of the quaternion that is to be used to set this matrix.quaternionZ- The Z component of the quaternion that is to be used to set this matrix.quaternionW- The W component of the quaternion that is to be used to set this matrix.- Returns:
- This matrix for the purpose of chaining methods together.
-
set
public Matrix4 set(Vector3 position, Quaternion orientation, Vector3 scale)
Set this matrix to the specified translation, rotation and scale.- Parameters:
position- The translationorientation- The rotation, must be normalizedscale- The scale- Returns:
- This matrix for chaining
-
set
public Matrix4 set(float translationX, float translationY, float translationZ, float quaternionX, float quaternionY, float quaternionZ, float quaternionW, float scaleX, float scaleY, float scaleZ)
Sets the matrix to a rotation matrix representing the translation and quaternion.- Parameters:
translationX- The X component of the translation that is to be used to set this matrix.translationY- The Y component of the translation that is to be used to set this matrix.translationZ- The Z component of the translation that is to be used to set this matrix.quaternionX- The X component of the quaternion that is to be used to set this matrix.quaternionY- The Y component of the quaternion that is to be used to set this matrix.quaternionZ- The Z component of the quaternion that is to be used to set this matrix.quaternionW- The W component of the quaternion that is to be used to set this matrix.scaleX- The X component of the scaling that is to be used to set this matrix.scaleY- The Y component of the scaling that is to be used to set this matrix.scaleZ- The Z component of the scaling that is to be used to set this matrix.- Returns:
- This matrix for the purpose of chaining methods together.
-
set
public Matrix4 set(Vector3 xAxis, Vector3 yAxis, Vector3 zAxis, Vector3 pos)
Sets the four columns of the matrix which correspond to the x-, y- and z-axis of the vector space this matrix creates as well as the 4th column representing the translation of any point that is multiplied by this matrix.- Parameters:
xAxis- The x-axis.yAxis- The y-axis.zAxis- The z-axis.pos- The translation vector.
-
cpy
public Matrix4 cpy()
- Returns:
- a copy of this matrix
-
trn
public Matrix4 trn(Vector3 vector)
Adds a translational component to the matrix in the 4th column. The other columns are untouched.- Parameters:
vector- The translation vector to add to the current matrix. (This vector is not modified)- Returns:
- This matrix for the purpose of chaining methods together.
-
trn
public Matrix4 trn(float x, float y, float z)
Adds a translational component to the matrix in the 4th column. The other columns are untouched.- Parameters:
x- The x-component of the translation vector.y- The y-component of the translation vector.z- The z-component of the translation vector.- Returns:
- This matrix for the purpose of chaining methods together.
-
getValues
public float[] getValues()
- Returns:
- the backing float array
-
mul
public Matrix4 mul(Matrix4 matrix)
Postmultiplies this matrix with the given matrix, storing the result in this matrix. For example:A.mul(B) results in A := AB.
- Parameters:
matrix- The other matrix to multiply by.- Returns:
- This matrix for the purpose of chaining operations together.
-
mulLeft
public Matrix4 mulLeft(Matrix4 matrix)
Premultiplies this matrix with the given matrix, storing the result in this matrix. For example:A.mulLeft(B) results in A := BA.
- Parameters:
matrix- The other matrix to multiply by.- Returns:
- This matrix for the purpose of chaining operations together.
-
tra
public Matrix4 tra()
Transposes the matrix.- Returns:
- This matrix for the purpose of chaining methods together.
-
idt
public Matrix4 idt()
Sets the matrix to an identity matrix.- Returns:
- This matrix for the purpose of chaining methods together.
-
inv
public Matrix4 inv()
Inverts the matrix. Stores the result in this matrix.- Returns:
- This matrix for the purpose of chaining methods together.
- Throws:
java.lang.RuntimeException- if the matrix is singular (not invertible)
-
det
public float det()
- Returns:
- The determinant of this matrix
-
det3x3
public float det3x3()
- Returns:
- The determinant of the 3x3 upper left matrix
-
setToProjection
public Matrix4 setToProjection(float near, float far, float fovy, float aspectRatio)
Sets the matrix to a projection matrix with a near- and far plane, a field of view in degrees and an aspect ratio. Note that the field of view specified is the angle in degrees for the height, the field of view for the width will be calculated according to the aspect ratio.- Parameters:
near- The near planefar- The far planefovy- The field of view of the height in degreesaspectRatio- The "width over height" aspect ratio- Returns:
- This matrix for the purpose of chaining methods together.
-
setToProjection
public Matrix4 setToProjection(float left, float right, float bottom, float top, float near, float far)
Sets the matrix to a projection matrix with a near/far plane, and left, bottom, right and top specifying the points on the near plane that are mapped to the lower left and upper right corners of the viewport. This allows to create projection matrix with off-center vanishing point.- Parameters:
left-right-bottom-top-near- The near planefar- The far plane- Returns:
- This matrix for the purpose of chaining methods together.
-
setToOrtho2D
public Matrix4 setToOrtho2D(float x, float y, float width, float height)
Sets this matrix to an orthographic projection matrix with the origin at (x,y) extending by width and height. The near plane is set to 0, the far plane is set to 1.- Parameters:
x- The x-coordinate of the originy- The y-coordinate of the originwidth- The widthheight- The height- Returns:
- This matrix for the purpose of chaining methods together.
-
setToOrtho2D
public Matrix4 setToOrtho2D(float x, float y, float width, float height, float near, float far)
Sets this matrix to an orthographic projection matrix with the origin at (x,y) extending by width and height, having a near and far plane.- Parameters:
x- The x-coordinate of the originy- The y-coordinate of the originwidth- The widthheight- The heightnear- The near planefar- The far plane- Returns:
- This matrix for the purpose of chaining methods together.
-
setToOrtho
public Matrix4 setToOrtho(float left, float right, float bottom, float top, float near, float far)
Sets the matrix to an orthographic projection like glOrtho (http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml) following the OpenGL equivalent- Parameters:
left- The left clipping planeright- The right clipping planebottom- The bottom clipping planetop- The top clipping planenear- The near clipping planefar- The far clipping plane- Returns:
- This matrix for the purpose of chaining methods together.
-
setTranslation
public Matrix4 setTranslation(Vector3 vector)
Sets the 4th column to the translation vector.- Parameters:
vector- The translation vector- Returns:
- This matrix for the purpose of chaining methods together.
-
setTranslation
public Matrix4 setTranslation(float x, float y, float z)
Sets the 4th column to the translation vector.- Parameters:
x- The X coordinate of the translation vectory- The Y coordinate of the translation vectorz- The Z coordinate of the translation vector- Returns:
- This matrix for the purpose of chaining methods together.
-
setToTranslation
public Matrix4 setToTranslation(Vector3 vector)
Sets this matrix to a translation matrix, overwriting it first by an identity matrix and then setting the 4th column to the translation vector.- Parameters:
vector- The translation vector- Returns:
- This matrix for the purpose of chaining methods together.
-
setToTranslation
public Matrix4 setToTranslation(float x, float y, float z)
Sets this matrix to a translation matrix, overwriting it first by an identity matrix and then setting the 4th column to the translation vector.- Parameters:
x- The x-component of the translation vector.y- The y-component of the translation vector.z- The z-component of the translation vector.- Returns:
- This matrix for the purpose of chaining methods together.
-
setToTranslationAndScaling
public Matrix4 setToTranslationAndScaling(Vector3 translation, Vector3 scaling)
Sets this matrix to a translation and scaling matrix by first overwriting it with an identity and then setting the translation vector in the 4th column and the scaling vector in the diagonal.- Parameters:
translation- The translation vectorscaling- The scaling vector- Returns:
- This matrix for the purpose of chaining methods together.
-
setToTranslationAndScaling
public Matrix4 setToTranslationAndScaling(float translationX, float translationY, float translationZ, float scalingX, float scalingY, float scalingZ)
Sets this matrix to a translation and scaling matrix by first overwriting it with an identity and then setting the translation vector in the 4th column and the scaling vector in the diagonal.- Parameters:
translationX- The x-component of the translation vectortranslationY- The y-component of the translation vectortranslationZ- The z-component of the translation vectorscalingX- The x-component of the scaling vectorscalingY- The x-component of the scaling vectorscalingZ- The x-component of the scaling vector- Returns:
- This matrix for the purpose of chaining methods together.
-
setToRotation
public Matrix4 setToRotation(Vector3 axis, float degrees)
Sets the matrix to a rotation matrix around the given axis.- Parameters:
axis- The axisdegrees- The angle in degrees- Returns:
- This matrix for the purpose of chaining methods together.
-
setToRotationRad
public Matrix4 setToRotationRad(Vector3 axis, float radians)
Sets the matrix to a rotation matrix around the given axis.- Parameters:
axis- The axisradians- The angle in radians- Returns:
- This matrix for the purpose of chaining methods together.
-
setToRotation
public Matrix4 setToRotation(float axisX, float axisY, float axisZ, float degrees)
Sets the matrix to a rotation matrix around the given axis.- Parameters:
axisX- The x-component of the axisaxisY- The y-component of the axisaxisZ- The z-component of the axisdegrees- The angle in degrees- Returns:
- This matrix for the purpose of chaining methods together.
-
setToRotationRad
public Matrix4 setToRotationRad(float axisX, float axisY, float axisZ, float radians)
Sets the matrix to a rotation matrix around the given axis.- Parameters:
axisX- The x-component of the axisaxisY- The y-component of the axisaxisZ- The z-component of the axisradians- The angle in radians- Returns:
- This matrix for the purpose of chaining methods together.
-
setToRotation
public Matrix4 setToRotation(Vector3 v1, Vector3 v2)
Set the matrix to a rotation matrix between two vectors.- Parameters:
v1- The base vectorv2- The target vector- Returns:
- This matrix for the purpose of chaining methods together
-
setToRotation
public Matrix4 setToRotation(float x1, float y1, float z1, float x2, float y2, float z2)
Set the matrix to a rotation matrix between two vectors.- Parameters:
x1- The base vectors x valuey1- The base vectors y valuez1- The base vectors z valuex2- The target vector x valuey2- The target vector y valuez2- The target vector z value- Returns:
- This matrix for the purpose of chaining methods together
-
setFromEulerAngles
public Matrix4 setFromEulerAngles(float yaw, float pitch, float roll)
Sets this matrix to a rotation matrix from the given euler angles.- Parameters:
yaw- the yaw in degreespitch- the pitch in degreesroll- the roll in degrees- Returns:
- This matrix
-
setFromEulerAnglesRad
public Matrix4 setFromEulerAnglesRad(float yaw, float pitch, float roll)
Sets this matrix to a rotation matrix from the given euler angles.- Parameters:
yaw- the yaw in radianspitch- the pitch in radiansroll- the roll in radians- Returns:
- This matrix
-
setToScaling
public Matrix4 setToScaling(Vector3 vector)
Sets this matrix to a scaling matrix- Parameters:
vector- The scaling vector- Returns:
- This matrix for chaining.
-
setToScaling
public Matrix4 setToScaling(float x, float y, float z)
Sets this matrix to a scaling matrix- Parameters:
x- The x-component of the scaling vectory- The y-component of the scaling vectorz- The z-component of the scaling vector- Returns:
- This matrix for chaining.
-
setToLookAt
public Matrix4 setToLookAt(Vector3 direction, Vector3 up)
Sets the matrix to a look at matrix with a direction and an up vector. Multiply with a translation matrix to get a camera model view matrix.- Parameters:
direction- The direction vectorup- The up vector- Returns:
- This matrix for the purpose of chaining methods together.
-
setToLookAt
public Matrix4 setToLookAt(Vector3 position, Vector3 target, Vector3 up)
Sets this matrix to a look at matrix with the given position, target and up vector.- Parameters:
position- the positiontarget- the targetup- the up vector- Returns:
- This matrix
-
lerp
public Matrix4 lerp(Matrix4 matrix, float alpha)
Linearly interpolates between this matrix and the given matrix mixing by alpha- Parameters:
matrix- the matrixalpha- the alpha value in the range [0,1]- Returns:
- This matrix for the purpose of chaining methods together.
-
avg
public Matrix4 avg(Matrix4 other, float w)
Averages the given transform with this one and stores the result in this matrix. Translations and scales are lerped while rotations are slerped.- Parameters:
other- The other transformw- Weight of this transform; weight of the other transform is (1 - w)- Returns:
- This matrix for chaining
-
avg
public Matrix4 avg(Matrix4[] t)
Averages the given transforms and stores the result in this matrix. Translations and scales are lerped while rotations are slerped. Does not destroy the data contained in t.- Parameters:
t- List of transforms- Returns:
- This matrix for chaining
-
avg
public Matrix4 avg(Matrix4[] t, float[] w)
Averages the given transforms with the given weights and stores the result in this matrix. Translations and scales are lerped while rotations are slerped. Does not destroy the data contained in t or w; Sum of w_i must be equal to 1, or unexpected results will occur.- Parameters:
t- List of transformsw- List of weights- Returns:
- This matrix for chaining
-
set
public Matrix4 set(Matrix3 mat)
Sets this matrix to the given 3x3 matrix. The third column of this matrix is set to (0,0,1,0).- Parameters:
mat- the matrix
-
set
public Matrix4 set(Affine2 affine)
Sets this matrix to the given affine matrix. The values are mapped as follows:[ M00 M01 0 M02 ] [ M10 M11 0 M12 ] [ 0 0 1 0 ] [ 0 0 0 1 ]- Parameters:
affine- the affine matrix- Returns:
- This matrix for chaining
-
setAsAffine
public Matrix4 setAsAffine(Affine2 affine)
Assumes that this matrix is a 2D affine transformation, copying only the relevant components. The values are mapped as follows:[ M00 M01 _ M02 ] [ M10 M11 _ M12 ] [ _ _ _ _ ] [ _ _ _ _ ]- Parameters:
affine- the source matrix- Returns:
- This matrix for chaining
-
setAsAffine
public Matrix4 setAsAffine(Matrix4 mat)
Assumes that both matrices are 2D affine transformations, copying only the relevant components. The copied values are:[ M00 M01 _ M03 ] [ M10 M11 _ M13 ] [ _ _ _ _ ] [ _ _ _ _ ]- Parameters:
mat- the source matrix- Returns:
- This matrix for chaining
-
scl
public Matrix4 scl(float x, float y, float z)
-
scl
public Matrix4 scl(float scale)
-
getRotation
public Quaternion getRotation(Quaternion rotation, boolean normalizeAxes)
Gets the rotation of this matrix.- Parameters:
rotation- TheQuaternionto receive the rotationnormalizeAxes- True to normalize the axes, necessary when the matrix might also include scaling.- Returns:
- The provided
Quaternionfor chaining.
-
getRotation
public Quaternion getRotation(Quaternion rotation)
Gets the rotation of this matrix.- Parameters:
rotation- TheQuaternionto receive the rotation- Returns:
- The provided
Quaternionfor chaining.
-
getScaleXSquared
public float getScaleXSquared()
- Returns:
- the squared scale factor on the X axis
-
getScaleYSquared
public float getScaleYSquared()
- Returns:
- the squared scale factor on the Y axis
-
getScaleZSquared
public float getScaleZSquared()
- Returns:
- the squared scale factor on the Z axis
-
getScaleX
public float getScaleX()
- Returns:
- the scale factor on the X axis (non-negative)
-
getScaleY
public float getScaleY()
- Returns:
- the scale factor on the Y axis (non-negative)
-
getScaleZ
public float getScaleZ()
- Returns:
- the scale factor on the X axis (non-negative)
-
getScale
public Vector3 getScale(Vector3 scale)
- Parameters:
scale- The vector which will receive the (non-negative) scale components on each axis.- Returns:
- The provided vector for chaining.
-
toNormalMatrix
public Matrix4 toNormalMatrix()
removes the translational part and transposes the matrix.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
mulVec
public static void mulVec(float[] mat, float[] vecs, int offset, int numVecs, int stride)Multiplies the vectors with the given matrix. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval. The vectors array is assumed to hold 3-component vectors. Offset specifies the offset into the array where the x-component of the first vector is located. The numVecs parameter specifies the number of vectors stored in the vectors array. The stride parameter specifies the number of floats between subsequent vectors and must be >= 3. This is the same asVector3.mul(Matrix4)applied to multiple vectors.- Parameters:
mat- the matrixvecs- the vectorsoffset- the offset into the vectors arraynumVecs- the number of vectorsstride- the stride between vectors in floats
-
prj
public static void prj(float[] mat, float[] vecs, int offset, int numVecs, int stride)Multiplies the vectors with the given matrix, , performing a division by w. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval. The vectors array is assumed to hold 3-component vectors. Offset specifies the offset into the array where the x-component of the first vector is located. The numVecs parameter specifies the number of vectors stored in the vectors array. The stride parameter specifies the number of floats between subsequent vectors and must be >= 3. This is the same asVector3.prj(Matrix4)applied to multiple vectors.- Parameters:
mat- the matrixvecs- the vectorsoffset- the offset into the vectors arraynumVecs- the number of vectorsstride- the stride between vectors in floats
-
rot
public static void rot(float[] mat, float[] vecs, int offset, int numVecs, int stride)Multiplies the vectors with the top most 3x3 sub-matrix of the given matrix. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval. The vectors array is assumed to hold 3-component vectors. Offset specifies the offset into the array where the x-component of the first vector is located. The numVecs parameter specifies the number of vectors stored in the vectors array. The stride parameter specifies the number of floats between subsequent vectors and must be >= 3. This is the same asVector3.rot(Matrix4)applied to multiple vectors.- Parameters:
mat- the matrixvecs- the vectorsoffset- the offset into the vectors arraynumVecs- the number of vectorsstride- the stride between vectors in floats
-
mul
public static void mul(float[] mata, float[] matb)Multiplies the matrix mata with matrix matb, storing the result in mata. The arrays are assumed to hold 4x4 column major matrices as you can get fromval. This is the same asmul(Matrix4).- Parameters:
mata- the first matrix.matb- the second matrix.
-
mulVec
public static void mulVec(float[] mat, float[] vec)Multiplies the vector with the given matrix. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval. The vector array is assumed to hold a 3-component vector, with x being the first element, y being the second and z being the last component. The result is stored in the vector array. This is the same asVector3.mul(Matrix4).- Parameters:
mat- the matrixvec- the vector.
-
prj
public static void prj(float[] mat, float[] vec)Multiplies the vector with the given matrix, performing a division by w. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval. The vector array is assumed to hold a 3-component vector, with x being the first element, y being the second and z being the last component. The result is stored in the vector array. This is the same asVector3.prj(Matrix4).- Parameters:
mat- the matrixvec- the vector.
-
rot
public static void rot(float[] mat, float[] vec)Multiplies the vector with the top most 3x3 sub-matrix of the given matrix. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval. The vector array is assumed to hold a 3-component vector, with x being the first element, y being the second and z being the last component. The result is stored in the vector array. This is the same asVector3.rot(Matrix4).- Parameters:
mat- the matrixvec- the vector.
-
inv
public static boolean inv(float[] values)
Computes the inverse of the given matrix. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval.- Parameters:
values- the matrix values.- Returns:
- false in case the inverse could not be calculated, true otherwise.
-
det
public static float det(float[] values)
Computes the determinante of the given matrix. The matrix array is assumed to hold a 4x4 column major matrix as you can get fromval.- Parameters:
values- the matrix values.- Returns:
- the determinante.
-
translate
public Matrix4 translate(Vector3 translation)
Postmultiplies this matrix by a translation matrix. Postmultiplication is also used by OpenGL ES' glTranslate/glRotate/glScale- Parameters:
translation-- Returns:
- This matrix for the purpose of chaining methods together.
-
translate
public Matrix4 translate(float x, float y, float z)
Postmultiplies this matrix by a translation matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale.- Parameters:
x- Translation in the x-axis.y- Translation in the y-axis.z- Translation in the z-axis.- Returns:
- This matrix for the purpose of chaining methods together.
-
rotate
public Matrix4 rotate(Vector3 axis, float degrees)
Postmultiplies this matrix with a (counter-clockwise) rotation matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale.- Parameters:
axis- The vector axis to rotate around.degrees- The angle in degrees.- Returns:
- This matrix for the purpose of chaining methods together.
-
rotateRad
public Matrix4 rotateRad(Vector3 axis, float radians)
Postmultiplies this matrix with a (counter-clockwise) rotation matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale.- Parameters:
axis- The vector axis to rotate around.radians- The angle in radians.- Returns:
- This matrix for the purpose of chaining methods together.
-
rotate
public Matrix4 rotate(float axisX, float axisY, float axisZ, float degrees)
Postmultiplies this matrix with a (counter-clockwise) rotation matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale- Parameters:
axisX- The x-axis component of the vector to rotate around.axisY- The y-axis component of the vector to rotate around.axisZ- The z-axis component of the vector to rotate around.degrees- The angle in degrees- Returns:
- This matrix for the purpose of chaining methods together.
-
rotateRad
public Matrix4 rotateRad(float axisX, float axisY, float axisZ, float radians)
Postmultiplies this matrix with a (counter-clockwise) rotation matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale- Parameters:
axisX- The x-axis component of the vector to rotate around.axisY- The y-axis component of the vector to rotate around.axisZ- The z-axis component of the vector to rotate around.radians- The angle in radians- Returns:
- This matrix for the purpose of chaining methods together.
-
rotate
public Matrix4 rotate(Quaternion rotation)
Postmultiplies this matrix with a (counter-clockwise) rotation matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale.- Parameters:
rotation-- Returns:
- This matrix for the purpose of chaining methods together.
-
rotate
public Matrix4 rotate(Vector3 v1, Vector3 v2)
Postmultiplies this matrix by the rotation between two vectors.- Parameters:
v1- The base vectorv2- The target vector- Returns:
- This matrix for the purpose of chaining methods together
-
rotateTowardDirection
public Matrix4 rotateTowardDirection(Vector3 direction, Vector3 up)
Post-multiplies this matrix by a rotation toward a direction.- Parameters:
direction- direction to rotate towardup- up vector- Returns:
- This matrix for chaining
-
rotateTowardTarget
public Matrix4 rotateTowardTarget(Vector3 target, Vector3 up)
Post-multiplies this matrix by a rotation toward a target.- Parameters:
target- the target to rotate toup- the up vector- Returns:
- This matrix for chaining
-
scale
public Matrix4 scale(float scaleX, float scaleY, float scaleZ)
Postmultiplies this matrix with a scale matrix. Postmultiplication is also used by OpenGL ES' 1.x glTranslate/glRotate/glScale.- Parameters:
scaleX- The scale in the x-axis.scaleY- The scale in the y-axis.scaleZ- The scale in the z-axis.- Returns:
- This matrix for the purpose of chaining methods together.
-
extract4x3Matrix
public void extract4x3Matrix(float[] dst)
Copies the 4x3 upper-left sub-matrix into float array. The destination array is supposed to be a column major matrix.- Parameters:
dst- the destination matrix
-
hasRotationOrScaling
public boolean hasRotationOrScaling()
- Returns:
- True if this matrix has any rotation or scaling, false otherwise
-
-