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

Визуализация углов фрустума различных VR изображений с камеры.