# Class Matrix4

java.lang.Object
com.codename1.gpu.Matrix4

public final class Matrix4 extends Object
Portable column-major 4x4 float matrix math used by the 3D API. Every operation works on plain `float[16]` arrays so it behaves identically on every platform without relying on native transform support. The layout matches OpenGL/Metal column-major convention: element `m[c * 4 + r]` is column `c`, row `r`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static void`
  `copy(float[] src, float[] dst)`
  Copies the contents of `src` into `dst`.
  `static float[]`
  `identity()`
  Allocates a new identity matrix.
  `static boolean`
  `invert(float[] m, float[] dst)`
  Inverts `m` into `dst`.
  `static float[]`
  `lookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)`
  Builds a right-handed look-at view matrix from eye, target and up vectors.
  `static void`
  `multiply(float[] a, float[] b, float[] dst)`
  Multiplies `a * b` and stores the result in `dst`.
  `static float[]`
  `normalMatrix(float[] m)`
  Computes the transpose of the upper-left 3x3 of the inverse of `m`, expanded to a 4x4.
  `static float[]`
  `ortho(float left, float right, float bottom, float top, float near, float far)`
  Builds an orthographic projection matrix.
  `static float[]`
  `perspective(float fovYRadians, float aspect, float near, float far)`
  Builds a perspective projection matrix.
  `static float[]`
  `rotation(float angleRadians, float x, float y, float z)`
  Returns a rotation matrix around an arbitrary axis.
  `static float[]`
  `scaling(float x, float y, float z)`
  Returns a scale matrix.
  `static void`
  `setIdentity(float[] m)`
  Resets the supplied matrix to the identity matrix.
  `static float[]`
  `translation(float x, float y, float z)`
  Returns a translation matrix.

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### identity

    public static float[] identity()
    Allocates a new identity matrix.

  - ### setIdentity

    public static void setIdentity(float[] m)
    Resets the supplied matrix to the identity matrix.

  - ### copy

    public static void copy(float[] src, float[] dst)
    Copies the contents of `src` into `dst`. Both arrays must hold 16 floats.

  - ### multiply

    public static void multiply(float[] a, float[] b, float[] dst)
    Multiplies `a * b` and stores the result in `dst`. `dst` may not alias `a` or `b`.

  - ### perspective

    public static float[] perspective(float fovYRadians, float aspect, float near, float far)
    Builds a perspective projection matrix. `fovYRadians` is the vertical field of view in radians, `aspect` the width/height ratio.

  - ### ortho

    public static float[] ortho(float left, float right, float bottom, float top, float near, float far)
    Builds an orthographic projection matrix.

  - ### lookAt

    public static float[] lookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)
    Builds a right-handed look-at view matrix from eye, target and up vectors.

  - ### translation

    public static float[] translation(float x, float y, float z)
    Returns a translation matrix.

  - ### scaling

    public static float[] scaling(float x, float y, float z)
    Returns a scale matrix.

  - ### rotation

    public static float[] rotation(float angleRadians, float x, float y, float z)
    Returns a rotation matrix around an arbitrary axis. `angleRadians` is the rotation angle, `(x, y, z)` the rotation axis (need not be normalized).

  - ### normalMatrix

    public static float[] normalMatrix(float[] m)
    Computes the transpose of the upper-left 3x3 of the inverse of `m`, expanded to a 4x4. This is the correct matrix for transforming normals. Returns the identity when `m` is not invertible.

  - ### invert

    public static boolean invert(float[] m, float[] dst)
    Inverts `m` into `dst`. Returns false (leaving `dst` untouched) when the matrix is singular.