Учитывая трехмерное положение камеры, трехмерное целевое положение камеры (точка, на которую указывает камера), расстояние в дальней плоскости от камеры, поле зрения и соотношение сторон, как я могу рассчитать четыре трехмерные точки в дальней плоскости? Это должно быть возможно с базовой тригонометрией, но я не получаю точных результатов.
Посмотреть усеченную визуализацию
Ответы (1)
Это может быть простой триггер в 2D, но в 3D проблема несколько сложнее. У меня нет конкретного ответа для вас, но это может дать вам некоторые пути для изучения.
Грубо говоря, шаги следующие:
- Найдите уравнение плоскости изображения
- Найдите радиус поля зрения
- Найдите уравнение круга FOV
- Найдите четыре точки, лежащие на этом круге, которые соответствуют вашему соотношению сторон.
Плоскость, на которой находится этот круг, может быть получена с помощью точки и вектора нормали, что позволит вам определить уравнение этого круга в 3D (точка — это местоположение камеры, а вектор — это линия между камерой и целью).
Радиус круга можно определить по соотношению r = d tan(theta / 2)
, где d — расстояние между камерой и целью, а тета — угол обзора в градусах.
Уравнение этого окружности в 3D может быть определено в соответствии с радиусом и вектором нормали. .
Наконец, вам нужно найти прямоугольник с заданным соотношением сторон, который может быть вписанный в этот круг, ваши четыре точки являются пересечением прямоугольника и круга.
Вам также необходимо учитывать, может ли камера быть наклонена или выровнена. Это изменит точки, но они по-прежнему будут лежать на одной окружности/плоскости.
В зависимости от вашей цели может помочь упростить задачу, если камера всегда находится в точке (0,0,0) и выровнена по одной из осей (т. е. цель находится на одной из осей).