## Overview

These functions let you manipulate square matrices of rank 2x2, 3x3, and 4x4. They are particularly useful for graphical transformations and are compatible with OpenGL.

We use a zero-based index for rows and columns. E.g. the last element of a[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)is found at (3, 3).

RenderScript uses column-major matrices and column-based vectors. Transforming a vector is done by postmultiplying the vector, e.g.`(matrix * vector)`, as provided by[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().

To create a transformation matrix that performs two transformations at once, multiply the two source matrices, with the first transformation as the right argument. E.g. to create a transformation matrix that applies the transformation s1 followed by s2, call`rsMatrixLoadMultiply(&combined, &s2, &s1)`. This derives from`s2 * (s1 * v)`, which is`(s2 * s1) * v`.

We have two style of functions to create transformation matrices: rsMatrixLoad*Transformation* and rsMatrix*Transformation* . The former style simply stores the transformation matrix in the first argument. The latter modifies a pre-existing transformation matrix so that the new transformation happens first. E.g. if you call[rsMatrixTranslate](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixTranslate)() on a matrix that already does a scaling, the resulting matrix when applied to a vector will first do the translation then the scaling.

## Summary

|                                                                                          Functions                                                                                           ||
|---------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------|
| [rsExtractFrustumPlanes](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsExtractFrustumPlanes)     | Compute frustum planes                          |
| [rsIsSphereInFrustum](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsIsSphereInFrustum)           | Checks if a sphere is within the frustum planes |
| [rsMatrixGet](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixGet)                           | Get one element                                 |
| [rsMatrixInverse](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixInverse)                   | Inverts a matrix in place                       |
| [rsMatrixInverseTranspose](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixInverseTranspose) | Inverts and transpose a matrix in place         |
| [rsMatrixLoad](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoad)                         | Load or copy a matrix                           |
| [rsMatrixLoadFrustum](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadFrustum)           | Load a frustum projection matrix                |
| [rsMatrixLoadIdentity](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadIdentity)         | Load identity matrix                            |
| [rsMatrixLoadMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadMultiply)         | Multiply two matrices                           |
| [rsMatrixLoadOrtho](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadOrtho)               | Load an orthographic projection matrix          |
| [rsMatrixLoadPerspective](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadPerspective)   | Load a perspective projection matrix            |
| [rsMatrixLoadRotate](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadRotate)             | Load a rotation matrix                          |
| [rsMatrixLoadScale](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadScale)               | Load a scaling matrix                           |
| [rsMatrixLoadTranslate](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixLoadTranslate)       | Load a translation matrix                       |
| [rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)                 | Multiply a matrix by a vector or another matrix |
| [rsMatrixRotate](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixRotate)                     | Apply a rotation to a transformation matrix     |
| [rsMatrixScale](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixScale)                       | Apply a scaling to a transformation matrix      |
| [rsMatrixSet](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixSet)                           | Set one element                                 |
| [rsMatrixTranslate](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixTranslate)               | Apply a translation to a transformation matrix  |
| [rsMatrixTranspose](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixTranspose)               | Transpose a matrix place                        |

## Functions

#### rsExtractFrustumPlanes: Compute frustum planes

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| void rsExtractFrustumPlanes(const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* viewProj,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* left,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* righ,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* top,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* bottom,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* near,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* far);  | Added in[API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| void rsExtractFrustumPlanes(const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* viewProj,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* left,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* right,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* top,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* bottom,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* near,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* far); | Removed from[API level 24 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |

##### Parameters

| viewProj | Matrix to extract planes from. |
|   left   |          Left plane.           |
|  right   |          Right plane.          |
|   top    |           Top plane.           |
|  bottom  |         Bottom plane.          |
|   near   |          Near plane.           |
|   far    |           Far plane.           |
|   righ   |                                |
|----------|--------------------------------|

Computes 6 frustum planes from the view projection matrix  

#### rsIsSphereInFrustum: Checks if a sphere is within the frustum planes

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| bool rsIsSphereInFrustum([float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* sphere,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* left,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* right,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* top,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* bottom,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* near,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)\* far); |   |

##### Parameters

| sphere | float4 representing the sphere. |
|  left  |           Left plane.           |
| right  |          Right plane.           |
|  top   |           Top plane.            |
| bottom |          Bottom plane.          |
|  near  |           Near plane.           |
|  far   |           Far plane.            |
|--------|---------------------------------|

Returns true if the sphere is within the 6 frustum planes.  

#### rsMatrixGet: Get one element

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| float rsMatrixGet(const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)col,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)row); |   |
| float rsMatrixGet(const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)col,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)row); |   |
| float rsMatrixGet(const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)col,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)row); |   |

##### Parameters

|  m  |        Matrix to extract the element from.        |
| col | Zero-based column of the element to be extracted. |
| row |    Zero-based row of the element to extracted.    |
|-----|---------------------------------------------------|

Returns one element of a matrix.

**Warning:**The order of the column and row parameters may be unexpected.  

#### rsMatrixInverse: Inverts a matrix in place

|-----------------------------------------------------------------------------------------------------------------------------------------------------|---|
| bool rsMatrixInverse([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m); |   |

##### Parameters

| m | Matrix to invert. |
|---|-------------------|

Returns true if the matrix was successfully inverted.  

#### rsMatrixInverseTranspose: Inverts and transpose a matrix in place

|--------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| bool rsMatrixInverseTranspose([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m); |   |

##### Parameters

| m | Matrix to modify. |
|---|-------------------|

The matrix is first inverted then transposed. Returns true if the matrix was successfully inverted.  

#### rsMatrixLoad: Load or copy a matrix

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoad([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* destination, const float\* array);                                                                                                                    |   |
| void rsMatrixLoad([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* destination, const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* source); |   |
| void rsMatrixLoad([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* destination, const float\* array);                                                                                                                    |   |
| void rsMatrixLoad([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* destination, const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* source); |   |
| void rsMatrixLoad([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* destination, const float\* array);                                                                                                                    |   |
| void rsMatrixLoad([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* destination, const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* source); |   |
| void rsMatrixLoad([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* destination, const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* source); |   |
| void rsMatrixLoad([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* destination, const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* source); |   |

##### Parameters

| destination |                                                   Matrix to set.                                                    |
|    array    | Array of values to set the matrix to. These arrays should be 4, 9, or 16 floats long, depending on the matrix size. |
|   source    |                                                   Source matrix.                                                    |
|-------------|---------------------------------------------------------------------------------------------------------------------|

Set the elements of a matrix from an array of floats or from another matrix.

If loading from an array, the floats should be in row-major order, i.e. the element a`row 0, column 0`should be first, followed by the element at`row 0, column 1`, etc.

If loading from a matrix and the source is smaller than the destination, the rest of the destination is filled with elements of the identity matrix. E.g. loading a rs_matrix2x2 into a rs_matrix4x4 will give:

|-----|-----|-----|-----|
| m00 | m01 | 0.0 | 0.0 |
| m10 | m11 | 0.0 | 0.0 |
| 0.0 | 0.0 | 1.0 | 0.0 |
| 0.0 | 0.0 | 0.0 | 1.0 |

<br />

#### rsMatrixLoadFrustum: Load a frustum projection matrix

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadFrustum([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float left, float right, float bottom, float top, float near, float far); |   |

##### Parameters

|   m    | Matrix to set. |
|  left  |                |
| right  |                |
| bottom |                |
|  top   |                |
|  near  |                |
|  far   |                |
|--------|----------------|

Constructs a frustum projection matrix, transforming the box identified by the six clipping planes`left, right, bottom, top, near, far`.

To apply this projection to a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixLoadIdentity: Load identity matrix

|----------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadIdentity([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m); |   |
| void rsMatrixLoadIdentity([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m); |   |
| void rsMatrixLoadIdentity([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m); |   |

##### Parameters

| m | Matrix to set. |
|---|----------------|

Set the elements of a matrix to the identity matrix.  

#### rsMatrixLoadMultiply: Multiply two matrices

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadMultiply([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m, const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* lhs, const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* rhs); |   |
| void rsMatrixLoadMultiply([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m, const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* lhs, const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* rhs); |   |
| void rsMatrixLoadMultiply([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* lhs, const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* rhs); |   |

##### Parameters

|  m  |        Matrix to set.        |
| lhs | Left matrix of the product.  |
| rhs | Right matrix of the product. |
|-----|------------------------------|

Sets m to the matrix product of`lhs * rhs`.

To combine two 4x4 transformation matrices, multiply the second transformation matrix by the first transformation matrix. E.g. to create a transformation matrix that applies the transformation s1 followed by s2, call`rsMatrixLoadMultiply(&combined, &s2, &s1)`.

**Warning:**Prior to version 21, storing the result back into right matrix is not supported and will result in undefined behavior. Use rsMatrixMulitply instead. E.g. instead of doing rsMatrixLoadMultiply (\&m2r, \&m2r, \&m2l), use rsMatrixMultiply (\&m2r, \&m2l). rsMatrixLoadMultiply (\&m2l, \&m2r, \&m2l) works as expected.  

#### rsMatrixLoadOrtho: Load an orthographic projection matrix

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadOrtho([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float left, float right, float bottom, float top, float near, float far); |   |

##### Parameters

|   m    | Matrix to set. |
|  left  |                |
| right  |                |
| bottom |                |
|  top   |                |
|  near  |                |
|  far   |                |
|--------|----------------|

Constructs an orthographic projection matrix, transforming the box identified by the six clipping planes`left, right, bottom, top, near, far`into a unit cube with a corner at`(-1, -1, -1)`and the opposite at`(1, 1, 1)`.

To apply this projection to a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().

See https://en.wikipedia.org/wiki/Orthographic_projection .  

#### rsMatrixLoadPerspective: Load a perspective projection matrix

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadPerspective([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float fovy, float aspect, float near, float far); |   |

##### Parameters

|   m    |               Matrix to set.                |
|  fovy  | Field of view, in degrees along the Y axis. |
| aspect |               Ratio of x / y.               |
|  near  |            Near clipping plane.             |
|  far   |             Far clipping plane.             |
|--------|---------------------------------------------|

Constructs a perspective projection matrix, assuming a symmetrical field of view.

To apply this projection to a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixLoadRotate: Load a rotation matrix

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadRotate([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float rot, float x, float y, float z); |   |

##### Parameters

|  m  |                     Matrix to set.                      |
| rot |          How much rotation to do, in degrees.           |
|  x  | X component of the vector that is the axis of rotation. |
|  y  | Y component of the vector that is the axis of rotation. |
|  z  | Z component of the vector that is the axis of rotation. |
|-----|---------------------------------------------------------|

This function creates a rotation matrix. The axis of rotation is the`(x, y, z)`vector.

To rotate a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().

See https://en.wikipedia.org/wiki/Rotation_matrix .  

#### rsMatrixLoadScale: Load a scaling matrix

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadScale([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float x, float y, float z); |   |

##### Parameters

| m |             Matrix to set.             |
| x | Multiple to scale the x components by. |
| y | Multiple to scale the y components by. |
| z | Multiple to scale the z components by. |
|---|----------------------------------------|

This function creates a scaling matrix, where each component of a vector is multiplied by a number. This number can be negative.

To scale a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixLoadTranslate: Load a translation matrix

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixLoadTranslate([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float x, float y, float z); |   |

##### Parameters

| m |           Matrix to set.           |
| x | Number to add to each x component. |
| y | Number to add to each y component. |
| z | Number to add to each z component. |
|---|------------------------------------|

This function creates a translation matrix, where a number is added to each element of a vector.

To translate a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixMultiply: Multiply a matrix by a vector or another matrix

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
| [float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)rsMatrixMultiply(const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m,[float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)in); | Added in[API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| [float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)rsMatrixMultiply([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m,[float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)in);      | Removed from[API level 14 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |
| [float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)rsMatrixMultiply(const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m,[float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)in); | Added in[API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| [float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)rsMatrixMultiply(const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m,[float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)in); | Added in[API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| [float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)rsMatrixMultiply([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m,[float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)in);      | Removed from[API level 14 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |
| [float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)rsMatrixMultiply([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m,[float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)in);      | Removed from[API level 14 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |
| [float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)rsMatrixMultiply(const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)in); | Added in[API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| [float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)rsMatrixMultiply(const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)in); | Added in[API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| [float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)rsMatrixMultiply(const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)in); | Added in[API level 14](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)                |
| [float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)rsMatrixMultiply([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[float2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float2)in);      | Removed from[API level 14 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |
| [float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)rsMatrixMultiply([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[float3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float3)in);      | Removed from[API level 14 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |
| [float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)rsMatrixMultiply([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[float4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:float4)in);      | Removed from[API level 14 and higher](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels) |
| void rsMatrixMultiply([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m, const[rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* rhs);                                                                                       |                                                                                                                            |
| void rsMatrixMultiply([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m, const[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* rhs);                                                                                       |                                                                                                                            |
| void rsMatrixMultiply([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, const[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* rhs);                                                                                       |                                                                                                                            |

##### Parameters

|  m  | Left matrix of the product and the matrix to be set. |
| rhs |             Right matrix of the product.             |
| in  |                                                      |
|-----|------------------------------------------------------|

For the matrix by matrix variant, sets m to the matrix product`m * rhs`.

When combining two 4x4 transformation matrices using this function, the resulting matrix will correspond to performing the rhs transformation first followed by the original m transformation.

For the matrix by vector variant, returns the post-multiplication of the vector by the matrix, ie.`m * in`.

When multiplying a float3 to a[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4), the vector is expanded with (1).

When multiplying a float2 to a[rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4), the vector is expanded with (0, 1).

When multiplying a float2 to a[rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3), the vector is expanded with (0).

Starting with API 14, this function takes a const matrix as the first argument.  

#### rsMatrixRotate: Apply a rotation to a transformation matrix

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixRotate([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float rot, float x, float y, float z); |   |

##### Parameters

|  m  |                    Matrix to modify.                    |
| rot |          How much rotation to do, in degrees.           |
|  x  | X component of the vector that is the axis of rotation. |
|  y  | Y component of the vector that is the axis of rotation. |
|  z  | Z component of the vector that is the axis of rotation. |
|-----|---------------------------------------------------------|

Multiply the matrix m with a rotation matrix.

This function modifies a transformation matrix to first do a rotation. The axis of rotation is the`(x, y, z)`vector.

To apply this combined transformation to a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixScale: Apply a scaling to a transformation matrix

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixScale([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float x, float y, float z); |   |

##### Parameters

| m |           Matrix to modify.            |
| x | Multiple to scale the x components by. |
| y | Multiple to scale the y components by. |
| z | Multiple to scale the z components by. |
|---|----------------------------------------|

Multiply the matrix m with a scaling matrix.

This function modifies a transformation matrix to first do a scaling. When scaling, each component of a vector is multiplied by a number. This number can be negative.

To apply this combined transformation to a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixSet: Set one element

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixSet([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)col,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)row, float v); |   |
| void rsMatrixSet([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)col,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)row, float v); |   |
| void rsMatrixSet([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)col,[uint32_t](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:uint32_t)row, float v); |   |

##### Parameters

|  m  |        Matrix that will be modified.        |
| col | Zero-based column of the element to be set. |
| row |  Zero-based row of the element to be set.   |
|  v  |                Value to set.                |
|-----|---------------------------------------------|

Set an element of a matrix.

**Warning:**The order of the column and row parameters may be unexpected.  

#### rsMatrixTranslate: Apply a translation to a transformation matrix

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixTranslate([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m, float x, float y, float z); |   |

##### Parameters

| m |         Matrix to modify.          |
| x | Number to add to each x component. |
| y | Number to add to each y component. |
| z | Number to add to each z component. |
|---|------------------------------------|

Multiply the matrix m with a translation matrix.

This function modifies a transformation matrix to first do a translation. When translating, a number is added to each component of a vector.

To apply this combined transformation to a vector, multiply the vector by the created matrix using[rsMatrixMultiply](https://developer.android.com/guide/topics/renderscript/reference/rs_matrix#android_rs:rsMatrixMultiply)().  

#### rsMatrixTranspose: Transpose a matrix place

|-------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| void rsMatrixTranspose([rs_matrix2x2](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix2x2)\* m); |   |
| void rsMatrixTranspose([rs_matrix3x3](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix3x3)\* m); |   |
| void rsMatrixTranspose([rs_matrix4x4](https://developer.android.com/guide/topics/renderscript/reference/rs_value_types#android_rs:rs_matrix4x4)\* m); |   |

##### Parameters

| m | Matrix to transpose. |
|---|----------------------|

Transpose the matrix m in place.