Объявление
public void CalculateFrustumCorners(Rect viewport, float z, Camera.MonoOrStereoscopicEye eye, Vector3[] outCorners);Параметры
viewport | Нормализованные координаты видового экрана для использования при расчете усеченной пирамиды. |
z | Z-глубина от начала камеры, на которой будут рассчитываться углы. |
eye | Матрица проекции глаза камеры для использования. |
outCorners | Выходной массив для угловых векторов усеченного конуса. Не может быть нулевым, а длина должна быть >= 4. |
Описание
По заданным координатам окна просмотра вычисляет векторы пространства обзора, указывающие на четыре угла усеченного конуса на указанной глубине камеры.
Это можно использовать для эффективного вычисления положения пикселя в мировом пространстве в шейдере эффектов изображения. См. стандартную реализацию глобального тумана в ресурсах.
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);
}
}
}
Что видно на следующем изображении: