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

StackOverflow https://stackoverflow.com/questions/754060

  •  09-09-2019
  •  | 
  •  

Вопрос

Эй,

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

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

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

Уточнение:Камера должна быть «перед» движущимся персонажем, а не над ним.

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top