# LoadProjectionMatrix(Matrix4x4)

> Load an arbitrary matrix to the current projection matrix.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public static void LoadProjectionMatrix(Matrix4x4 mat)
```

### Parameters

**** (\[Matrix4x4]\(/engine/6000.7/script-reference/unityengine/matrix4x4)):&#x20;

### Remarks

This function overrides current camera's projection parameters, so most often you want to save and restore projection matrix using [GL.PushMatrix](/engine/6000.7/script-reference/unityengine/gl/pushmatrix.md) and [GL.PopMatrix](/engine/6000.7/script-reference/unityengine/gl/popmatrix.md). The model and view matrix remain unchanged. Beware that the view matrix of the camera typically performs a scaling of -1 along the z axis, which might have to be taken into account depending on your use case.

The loaded projection matrix is expected to project into the API-agnostic clip volume defined by the following boundaries:

**1.** x = -1..1 (left..right)

**2.** y = -1..1 (bottom..top)

**3.** z = -1..1 (near..far)

Unity might combine the matrix with an additional transformation to map to the convention of the actual graphics API. The resulting matrix can be obtained through [GL.GetGPUProjectionMatrix](/engine/6000.7/script-reference/unityengine/gl/getgpuprojectionmatrix.md).

```csharp
using UnityEngine;

public class Example : MonoBehaviour
{
    Matrix4x4 projMtrx = Matrix4x4.identity;

    void OnPostRender()
    {
        GL.PushMatrix();
        GL.LoadProjectionMatrix(projMtrx);
        // Do your drawing here...
        GL.PopMatrix();
    }
}
```

Additional Resources: [GL.LoadOrtho](/engine/6000.7/script-reference/unityengine/gl/loadortho.md).
