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

Рассчитать размер фрустума на расстоянии

Поперечное сечение фрустума зрения на определенном расстоянии от камеры определяет прямоугольник в мировом пространстве, который обрамляет видимую область. Иногда полезно рассчитать размер этого прямоугольника на заданном расстоянии, или найти расстояние, где прямоугольник имеет заданный размер. Например, если движущаяся камера должна держать объект (например, игрока) полностью в кадре все время, то она не должна приближаться так близко, что часть этого объекта будет отрезана.

Высота фрустума на заданном расстоянии (оба в единицах мира) может быть получена по следующей формуле:

var frustumHeight = 2.0f * distance * Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);

... и процесс может быть обращен вспять для расчета расстояния, необходимого для получения указанной высоты фрустума:

var distance = frustumHeight * 0.5f / Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad);

Также можно рассчитать угол FOV, когда известны высота и расстояние:

var cameraFieldOfView = 2.0f * Mathf.Atan(frustumHeight * 0.5f / distance) * Mathf.Rad2Deg;

В каждом из этих расчетов учитывается высота фрустума, однако ее можно легко рассчитать на основе ширины (и наоборот):

var frustumWidth = frustumHeight * camera.aspect;
var frustumHeight = frustumWidth / camera.aspect;