Unity 6.3
0 онлайн 68 гостей 3 в системе
Вход

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 изображений с камеры.