Package org.sunflow.math
Class Matrix4
- java.lang.Object
-
- org.sunflow.math.Matrix4
-
public final class Matrix4 extends java.lang.ObjectThis class is used to represent general affine transformations in 3D. The bottom row of the matrix is assumed to be [0,0,0,1]. Note that the rotation matrices assume a right-handed convention.
-
-
Constructor Summary
Constructors Constructor Description Matrix4(float[] m, boolean rowMajor)Initialize a matrix from the specified 16 element array.Matrix4(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23)Creates a matrix with the specified elements
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description float[]asColMajor()float[]asRowMajor()static Matrix4blend(Matrix4 m0, Matrix4 m1, float t)floatdeterminant()Compute the matrix determinant.booleanequals(Matrix4 m)static Matrix4fromBasis(OrthoNormalBasis basis)Creates a rotation matrix from an OrthonormalBasis.Matrix4inverse()Compute the inverse of this matrix and return it as a new object.booleanisIndentity()static Matrix4lookAt(Point3 eye, Point3 target, Vector3 up)Creates a camera positioning matrix from the given eye and target points and up vector.Matrix4multiply(Matrix4 m)Computes this*m and return the result as a new Matrix4static Matrix4rotate(float x, float y, float z, float theta)Creates a rotation matrix about the specified axis.static Matrix4rotateX(float theta)Creates a rotation matrix about the X axis.static Matrix4rotateY(float theta)Creates a rotation matrix about the Y axis.static Matrix4rotateZ(float theta)Creates a rotation matrix about the Z axis.static Matrix4scale(float s)Create a uniform scaling matrix.static Matrix4scale(float sx, float sy, float sz)Creates a non-uniform scaling matrix.BoundingBoxtransform(BoundingBox b)Transforms each corner of the specified axis-aligned bounding box and returns a new bounding box which incloses the transformed corners.Point3transformP(Point3 p)Computes this*p and returns the result as a new Point3 object.floattransformPX(float x, float y, float z)Computes the x component of this*(x,y,z,1).floattransformPY(float x, float y, float z)Computes the y component of this*(x,y,z,1).floattransformPZ(float x, float y, float z)Computes the z component of this*(x,y,z,1).Vector3transformTransposeV(Vector3 v)Computes (this^T)*v and returns the result as a new Vector3 object.floattransformTransposeVX(float x, float y, float z)Computes the x component of (this^T)*(x,y,z,0).floattransformTransposeVY(float x, float y, float z)Computes the y component of (this^T)*(x,y,z,0).floattransformTransposeVZ(float x, float y, float z)Computes the z component of (this^T)*(x,y,z,0).Vector3transformV(Vector3 v)Computes this*v and returns the result as a new Vector3 object.floattransformVX(float x, float y, float z)Computes the x component of this*(x,y,z,0).floattransformVY(float x, float y, float z)Computes the y component of this*(x,y,z,0).floattransformVZ(float x, float y, float z)Computes the z component of this*(x,y,z,0).static Matrix4translation(float x, float y, float z)Create a translation matrix for the specified vector.
-
-
-
Constructor Detail
-
Matrix4
public Matrix4(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23)Creates a matrix with the specified elements- Parameters:
m00- value at row 0, col 0m01- value at row 0, col 1m02- value at row 0, col 2m03- value at row 0, col 3m10- value at row 1, col 0m11- value at row 1, col 1m12- value at row 1, col 2m13- value at row 1, col 3m20- value at row 2, col 0m21- value at row 2, col 1m22- value at row 2, col 2m23- value at row 2, col 3
-
Matrix4
public Matrix4(float[] m, boolean rowMajor)Initialize a matrix from the specified 16 element array. The matrix may be given in row or column major form.- Parameters:
m- a 16 element array in row or column major formrowMajor-trueif the array is in row major form,falseif it is in column major form
-
-
Method Detail
-
isIndentity
public final boolean isIndentity()
-
equals
public final boolean equals(Matrix4 m)
-
asRowMajor
public final float[] asRowMajor()
-
asColMajor
public final float[] asColMajor()
-
determinant
public final float determinant()
Compute the matrix determinant.- Returns:
- determinant of this matrix
-
inverse
public final Matrix4 inverse()
Compute the inverse of this matrix and return it as a new object. If the matrix is not invertible,nullis returned.- Returns:
- the inverse of this matrix, or
nullif not invertible
-
multiply
public final Matrix4 multiply(Matrix4 m)
Computes this*m and return the result as a new Matrix4- Parameters:
m- right hand side of the multiplication- Returns:
- a new Matrix4 object equal to
this*m
-
transform
public final BoundingBox transform(BoundingBox b)
Transforms each corner of the specified axis-aligned bounding box and returns a new bounding box which incloses the transformed corners.- Parameters:
b- original bounding box- Returns:
- a new BoundingBox object which encloses the transform version of b
-
transformV
public final Vector3 transformV(Vector3 v)
Computes this*v and returns the result as a new Vector3 object. This method assumes the bottom row of the matrix is[0,0,0,1].- Parameters:
v- vector to multiply- Returns:
- a new Vector3 object equal to
this*v
-
transformTransposeV
public final Vector3 transformTransposeV(Vector3 v)
Computes (this^T)*v and returns the result as a new Vector3 object. This method assumes the bottom row of the matrix is[0,0,0,1].- Parameters:
v- vector to multiply- Returns:
- a new Vector3 object equal to
(this^T)*v
-
transformP
public final Point3 transformP(Point3 p)
Computes this*p and returns the result as a new Point3 object. This method assumes the bottom row of the matrix is[0,0,0,1].- Parameters:
p- point to multiply- Returns:
- a new Point3 object equal to
this*v
-
transformVX
public final float transformVX(float x, float y, float z)Computes the x component of this*(x,y,z,0).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- x coordinate transformation result
-
transformVY
public final float transformVY(float x, float y, float z)Computes the y component of this*(x,y,z,0).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- y coordinate transformation result
-
transformVZ
public final float transformVZ(float x, float y, float z)Computes the z component of this*(x,y,z,0).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- z coordinate transformation result
-
transformTransposeVX
public final float transformTransposeVX(float x, float y, float z)Computes the x component of (this^T)*(x,y,z,0).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- x coordinate transformation result
-
transformTransposeVY
public final float transformTransposeVY(float x, float y, float z)Computes the y component of (this^T)*(x,y,z,0).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- y coordinate transformation result
-
transformTransposeVZ
public final float transformTransposeVZ(float x, float y, float z)Computes the z component of (this^T)*(x,y,z,0).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- zcoordinate transformation result
-
transformPX
public final float transformPX(float x, float y, float z)Computes the x component of this*(x,y,z,1).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- x coordinate transformation result
-
transformPY
public final float transformPY(float x, float y, float z)Computes the y component of this*(x,y,z,1).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- y coordinate transformation result
-
transformPZ
public final float transformPZ(float x, float y, float z)Computes the z component of this*(x,y,z,1).- Parameters:
x- x coordinate of the vector to multiplyy- y coordinate of the vector to multiplyz- z coordinate of the vector to multiply- Returns:
- z coordinate transformation result
-
translation
public static final Matrix4 translation(float x, float y, float z)
Create a translation matrix for the specified vector.- Parameters:
x- x component of translationy- y component of translationz- z component of translation- Returns:
- a new Matrix4 object representing the translation
-
rotateX
public static final Matrix4 rotateX(float theta)
Creates a rotation matrix about the X axis.- Parameters:
theta- angle to rotate about the X axis in radians- Returns:
- a new Matrix4 object representing the rotation
-
rotateY
public static final Matrix4 rotateY(float theta)
Creates a rotation matrix about the Y axis.- Parameters:
theta- angle to rotate about the Y axis in radians- Returns:
- a new Matrix4 object representing the rotation
-
rotateZ
public static final Matrix4 rotateZ(float theta)
Creates a rotation matrix about the Z axis.- Parameters:
theta- angle to rotate about the Z axis in radians- Returns:
- a new Matrix4 object representing the rotation
-
rotate
public static final Matrix4 rotate(float x, float y, float z, float theta)
Creates a rotation matrix about the specified axis. The axis vector need not be normalized.- Parameters:
x- x component of the axis vectory- y component of the axis vectorz- z component of the axis vectortheta- angle to rotate about the axis in radians- Returns:
- a new Matrix4 object representing the rotation
-
scale
public static final Matrix4 scale(float s)
Create a uniform scaling matrix.- Parameters:
s- scale factor for all three axes- Returns:
- a new Matrix4 object representing the uniform scale
-
scale
public static final Matrix4 scale(float sx, float sy, float sz)
Creates a non-uniform scaling matrix.- Parameters:
sx- scale factor in the x dimensionsy- scale factor in the y dimensionsz- scale factor in the z dimension- Returns:
- a new Matrix4 object representing the non-uniform scale
-
fromBasis
public static final Matrix4 fromBasis(OrthoNormalBasis basis)
Creates a rotation matrix from an OrthonormalBasis.- Parameters:
basis-
-
lookAt
public static final Matrix4 lookAt(Point3 eye, Point3 target, Vector3 up)
Creates a camera positioning matrix from the given eye and target points and up vector.- Parameters:
eye- location of the eyetarget- location of the targetup- vector pointing upwards- Returns:
-
-