Android
android.opengl
public class

android.opengl.Matrix

java.lang.Object
android.opengl.Matrix

Matrix math utilities. These methods operate on OpenGL ES format matrices and vectors stored in float arrays. Matrices are 4 x 4 column-vector matrices stored in column-major order:

  m[offset +  0] m[offset +  4] m[offset +  8] m[offset + 12]
  m[offset +  1] m[offset +  5] m[offset +  9] m[offset + 13]
  m[offset +  2] m[offset +  6] m[offset + 10] m[offset + 14]
  m[offset +  3] m[offset +  7] m[offset + 11] m[offset + 15]
 
Vectors are 4 row x 1 column column-vectors stored in order:
 v[offset + 0]
 v[offset + 1]
 v[offset + 2]
 v[offset + 3]
 

Summary

Public Constructors

            Matrix()

Public Methods

      static    void  frustumM(float[] m, int offset, float left, float right, float bottom, float top, float near, float far)
Define a projection matrix in terms of six clip planes
      static    boolean  invertM(float[] mInv, int mInvOffset, float[] m, int mOffset)
Inverts a 4 x 4 matrix.
      static    float  length(float x, float y, float z)
Computes the length of a vector
      static    void  multiplyMM(float[] result, int resultOffset, float[] lhs, int lhsOffset, float[] rhs, int rhsOffset)
Multiply two 4x4 matrices together and store the result in a third 4x4 matrix.
      static    void  multiplyMV(float[] resultVec, int resultVecOffset, float[] lhsMat, int lhsMatOffset, float[] rhsVec, int rhsVecOffset)
Multiply a 4 element vector by a 4x4 matrix and store the result in a 4 element column vector.
      static    void  orthoM(float[] m, int mOffset, float left, float right, float bottom, float top, float near, float far)
Computes an orthographic projection matrix.
      static    void  rotateM(float[] rm, int rmOffset, float[] m, int mOffset, float a, float x, float y, float z)
Rotates matrix m by angle a (in degrees) around the axis (x, y, z)
      static    void  rotateM(float[] m, int mOffset, float a, float x, float y, float z)
Rotates matrix m in place by angle a (in degrees) around the axis (x, y, z)
      static    void  scaleM(float[] m, int mOffset, float x, float y, float z)
Scales matrix m in place by sx, sy, and sz
      static    void  scaleM(float[] sm, int smOffset, float[] m, int mOffset, float x, float y, float z)
Scales matrix m by sx, sy, and sz, putting the result in sm
      static    void  setIdentityM(float[] sm, int smOffset)
Sets matrix m to the identity matrix.
      static    void  setRotateEulerM(float[] rm, int rmOffset, float x, float y, float z)
Converts Euler angles to a rotation matrix
      static    void  setRotateM(float[] rm, int rmOffset, float a, float x, float y, float z)
Rotates matrix m by angle a (in degrees) around the axis (x, y, z)
      static    void  translateM(float[] tm, int tmOffset, float[] m, int mOffset, float x, float y, float z)
Translates matrix m by sx, sy, and sz, putting the result in tm
      static    void  translateM(float[] m, int mOffset, float x, float y, float z)
Translates matrix m by sx, sy, and sz in place.
      static    void  transposeM(float[] mTrans, int mTransOffset, float[] m, int mOffset)
Transposes a 4 x 4 matrix.
Methods inherited from class java.lang.Object

Details

Public Constructors

public Matrix()

Public Methods

public static void frustumM(float[] m, int offset, float left, float right, float bottom, float top, float near, float far)

Define a projection matrix in terms of six clip planes

Parameters

m the float array that holds the perspective matrix
offset the offset into float array m where the perspective matrix data is written

public static boolean invertM(float[] mInv, int mInvOffset, float[] m, int mOffset)

Inverts a 4 x 4 matrix.

Parameters

mInv the array that holds the output inverted matrix
mInvOffset an offset into mInv where the inverted matrix is stored.
m the input array
mOffset an offset into m where the matrix is stored.

Returns

  • true if the matrix could be inverted, false if it could not.

public static float length(float x, float y, float z)

Computes the length of a vector

Parameters

x x coordinate of a vector
y y coordinate of a vector
z z coordinate of a vector

Returns

  • the length of a vector

public static void multiplyMM(float[] result, int resultOffset, float[] lhs, int lhsOffset, float[] rhs, int rhsOffset)

Multiply two 4x4 matrices together and store the result in a third 4x4 matrix. In matrix notation: result = lhs x rhs. Due to the way matrix multiplication works, the result matrix will have the same effect as first multiplying by the rhs matrix, then multiplying by the lhs matrix. This is the opposite of what you might expect. The same float array may be passed for result, lhs, and/or rhs. However, the result element values are undefined if the result elements overlap either the lhs or rhs elements.

Parameters

result The float array that holds the result.
resultOffset The offset into the result array where the result is stored.
lhs The float array that holds the left-hand-side matrix.
lhsOffset The offset into the lhs array where the lhs is stored
rhs The float array that holds the right-hand-side matrix.
rhsOffset The offset into the rhs array where the rhs is stored.

Throws

IllegalArgumentException if result, lhs, or rhs are null, or if resultOffset + 16 > result.length or lhsOffset + 16 > lhs.length or rhsOffset + 16 > rhs.length.

public static void multiplyMV(float[] resultVec, int resultVecOffset, float[] lhsMat, int lhsMatOffset, float[] rhsVec, int rhsVecOffset)

Multiply a 4 element vector by a 4x4 matrix and store the result in a 4 element column vector. In matrix notation: result = lhs x rhs The same float array may be passed for resultVec, lhsMat, and/or rhsVec. However, the resultVec element values are undefined if the resultVec elements overlap either the lhsMat or rhsVec elements.

Parameters

resultVec The float array that holds the result vector.
resultVecOffset The offset into the result array where the result vector is stored.
lhsMat The float array that holds the left-hand-side matrix.
lhsMatOffset The offset into the lhs array where the lhs is stored
rhsVec The float array that holds the right-hand-side vector.
rhsVecOffset The offset into the rhs vector where the rhs vector is stored.

Throws

IllegalArgumentException if resultVec, lhsMat, or rhsVec are null, or if resultVecOffset + 4 > resultVec.length or lhsMatOffset + 16 > lhsMat.length or rhsVecOffset + 4 > rhsVec.length.

public static void orthoM(float[] m, int mOffset, float left, float right, float bottom, float top, float near, float far)

Computes an orthographic projection matrix.

Parameters

m returns the result

public static void rotateM(float[] rm, int rmOffset, float[] m, int mOffset, float a, float x, float y, float z)

Rotates matrix m by angle a (in degrees) around the axis (x, y, z)

Parameters

rm returns the result
rmOffset index into rm where the result matrix starts
m source matrix
mOffset index into m where the source matrix starts
a angle to rotate in degrees
x scale factor x
y scale factor y
z scale factor z

public static void rotateM(float[] m, int mOffset, float a, float x, float y, float z)

Rotates matrix m in place by angle a (in degrees) around the axis (x, y, z)

Parameters

m source matrix
mOffset index into m where the matrix starts
a angle to rotate in degrees
x scale factor x
y scale factor y
z scale factor z

public static void scaleM(float[] m, int mOffset, float x, float y, float z)

Scales matrix m in place by sx, sy, and sz

Parameters

m matrix to scale
mOffset index into m where the matrix starts
x scale factor x
y scale factor y
z scale factor z

public static void scaleM(float[] sm, int smOffset, float[] m, int mOffset, float x, float y, float z)

Scales matrix m by sx, sy, and sz, putting the result in sm

Parameters

sm returns the result
smOffset index into sm where the result matrix starts
m source matrix
mOffset index into m where the source matrix starts
x scale factor x
y scale factor y
z scale factor z

public static void setIdentityM(float[] sm, int smOffset)

Sets matrix m to the identity matrix.

Parameters

sm returns the result
smOffset index into sm where the result matrix starts

public static void setRotateEulerM(float[] rm, int rmOffset, float x, float y, float z)

Converts Euler angles to a rotation matrix

Parameters

rm returns the result
rmOffset index into rm where the result matrix starts
x angle of rotation, in degrees
y angle of rotation, in degrees
z angle of rotation, in degrees

public static void setRotateM(float[] rm, int rmOffset, float a, float x, float y, float z)

Rotates matrix m by angle a (in degrees) around the axis (x, y, z)

Parameters

rm returns the result
rmOffset index into rm where the result matrix starts
a angle to rotate in degrees
x scale factor x
y scale factor y
z scale factor z

public static void translateM(float[] tm, int tmOffset, float[] m, int mOffset, float x, float y, float z)

Translates matrix m by sx, sy, and sz, putting the result in tm

Parameters

tm returns the result
tmOffset index into sm where the result matrix starts
m source matrix
mOffset index into m where the source matrix starts
x translation factor x
y translation factor y
z translation factor z

public static void translateM(float[] m, int mOffset, float x, float y, float z)

Translates matrix m by sx, sy, and sz in place.

Parameters

m matrix
mOffset index into m where the matrix starts
x translation factor x
y translation factor y
z translation factor z

public static void transposeM(float[] mTrans, int mTransOffset, float[] m, int mOffset)

Transposes a 4 x 4 matrix.

Parameters

mTrans the array that holds the output inverted matrix
mTransOffset an offset into mInv where the inverted matrix is stored.
m the input array
mOffset an offset into m where the matrix is stored.
Copyright 2007 Google Inc. Build 0.9_r1-98467 - 14 Aug 2008 18:56