Положение 3D камеры с учетом нескольких баллов

Heyo,

В настоящее время я работаю над проектом, в котором мне нужно разместить камеру таким образом, чтобы полное движение персонажа можно было просматривать без перемещения камеры. У меня есть позиция, с которой начинается персонаж, а также максимальное расстояние, которое персонаж пройдет во всех трех направлениях (X,Y и Z). У меня также есть поле зрения (которое составляет 90 градусов).

Есть ли уравнение, которое определит, где мне нужно разместить камеру, чтобы она не двигалась, чтобы увидеть полное движение?

Примечание: это использует OpenGL.

Пояснение: камера должна быть "впереди" персонажа, который находится в движении, а не сверху.

Он также будет двигаться по земле.

4 ответа

Решение

Если вы делаете ограничивающую сферу из точек, все, что вам нужно сделать, это держать камеру на расстоянии, превышающем или равном радиусу ограничивающей сферы / греха (FOV/2).

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

Уравнение для расчета расстояния: Dist = Радиус / грех ( FOV/2);

Это будет работать в 3D, для камеры в любой ориентации.

Это зависит, например, от того, будет ли объект двигаться в плоскости, вы можете просто поместить камеру вне шара, ограничивающего его область движения (это зависит от того, что FOV равно 90, что является удачным углом).

Если объект будет двигаться в 3D, это намного сложнее. Было бы полезно, если бы вы указали регион, в котором движется объект (куб против шара...) и направление, в котором вы хотите его видеть.

Возьмите отрезок линии от начальной точки до конечной точки. Построить плоскость, ортогональную к этому отрезку прямой через середину отрезка. Затем расположите камеру где-нибудь в этой плоскости на расстоянии, превышающем следующее от точки пересечения плоскости и линии, смотрящей на точку пересечения. Вектор наклона камеры должен находиться в плоскости, а горизонтальное поле зрения должно быть 90 градусов.

distance = sqrt(dx^2 + dy^2 + dz^2) / 2

Все положения этой камеры будут иметь начальную точку и конечную точку на левой или правой границе порта просмотра и по центру по вертикали.

Другим решением может быть написание функции, которая принимает начальную точку, конечную точку и желаемое положение обеих точек на экране. Тогда просто решите уравнение проекции для преобразования камеры.

Просто наличие максимального диапазона (X, Y, Z) само по себе недостаточно, потому что смотровое окно по существу имеет форму пирамиды, а вершина пирамиды находится в положении глаза.

В качестве аргумента давайте предположим, что все движения находятся в плоскости (X, Z) (то есть на земле), а глаз находится прямо над началом координат на расстоянии 10 м вдоль оси Y.

Предполагая квадратный видовой экран, с вашим углом обзора 90˚ вы сможете видеть с ±10 м вдоль осей X и Z, но только для объектов, которые находятся на земле (Y = 0). Как только они оторвутся от земли, ваш обзор уменьшится. Если это 1 м от земли, то ваш (X, Z) экстент составляет всего ±9 м.

Ясно, что настоящая камера может быть размещена в любом месте сцены, в любом направлении. Даже угол "крена" камеры может изменить то, насколько она видна. На самом деле таких точек камеры бесконечно много, поэтому вам нужно будет несколько ограничить свои критерии.

Другие вопросы по тегам