Положение 3D камеры с учетом некоторых точек - PullRequest
3 голосов
/ 16 апреля 2009

Heyo,

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 16 апреля 2009

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

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

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

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

0 голосов
/ 16 апреля 2009

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

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

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

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

0 голосов
/ 16 апреля 2009

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

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

0 голосов
/ 16 апреля 2009

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

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

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

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

...