Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты
к Руководству

Camera.CalculateFrustumCorners

Объявление

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); } } }

Что видно на следующем изображении:

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3