# CalculateFrustumCorners(Rect, float, MonoOrStereoscopicEye, Vector3[])

> Given viewport coordinates, calculates the view space vectors pointing to the four frustum corners at the specified camera depth.

## Definition

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

```csharp
public void CalculateFrustumCorners(Rect viewport, float z, Camera.MonoOrStereoscopicEye eye, Vector3[] outCorners)
```

### Parameters

**** (\[Rect]\(/engine/6000.7/script-reference/unityengine/rect)): Normalized viewport coordinates to use for the frustum calculation.**** (\[float]\(https\://learn.microsoft.com/dotnet/api/system.single)): Z-depth from the camera origin at which the corners will be calculated.**** (\[MonoOrStereoscopicEye]\(/engine/6000.7/script-reference/unityengine/camera/monoorstereoscopiceye)): Camera eye projection matrix to use.**** (\[Vector3\[]]\(/engine/6000.7/script-reference/unityengine/vector3)): Output array for the frustum corner vectors. Cannot be null and length must be >= 4.

### Remarks

The order of the corners is lower left, upper left, upper right, lower right.

CalculateFrustumCorners can be used to efficiently calculate the world space position of a pixel in an image effect shader. See standard assets implementation of global fog.

```csharp
using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    void Update()
    {
        // this example shows the different camera frustums when using asymmetric projection matrices (like those used by OpenVR).

        var camera = GetComponent<Camera>();
        Vector3[] frustumCorners = new Vector3[4];
        camera.CalculateFrustumCorners(new Rect(0, 0, 1, 1), camera.farClipPlane, Camera.MonoOrStereoscopicEye.Mono, frustumCorners);

        for (int i = 0; i < 4; i++)
        {
            var worldSpaceCorner = camera.transform.TransformVector(frustumCorners[i]);
            Debug.DrawRay(camera.transform.position, worldSpaceCorner, Color.blue);
        }

        camera.CalculateFrustumCorners(new Rect(0, 0, 1, 1), camera.farClipPlane, Camera.MonoOrStereoscopicEye.Left, frustumCorners);

        for (int i = 0; i < 4; i++)
        {
            var worldSpaceCorner = camera.transform.TransformVector(frustumCorners[i]);
            Debug.DrawRay(camera.transform.position, worldSpaceCorner, Color.green);
        }

        camera.CalculateFrustumCorners(new Rect(0, 0, 1, 1), camera.farClipPlane, Camera.MonoOrStereoscopicEye.Right, frustumCorners);

        for (int i = 0; i < 4; i++)
        {
            var worldSpaceCorner = camera.transform.TransformVector(frustumCorners[i]);
            Debug.DrawRay(camera.transform.position, worldSpaceCorner, Color.red);
        }
    }
}
```

The code sample draws lines to visualize the frustum corners of different VR camera views. The blue lines represent the mono (non-stereoscopic) rendering view. The green lines represent the left eye view. The red lines represent the right eye view.

![FrustumCorners (CalculateFrustumCorners(Rect, float, MonoOrStereoscopicEye, Vector3\[\]))](/api/media?file=/engine/6000.7/media/images/FrustumCorners.PNG)

*Visualization of frustum corners of different VR camera views.*
