Что такое алгоритм для взгляда на функцию? - PullRequest
0 голосов
/ 28 января 2020

У меня есть камера, которой управляют, устанавливая только эти значения:

[[position_x, position_y, position_z],
 [focal_point_x, focal_point_y, focal_point_z],
 [view_up_x, view_up_y, view_up_z]]

У меня есть точка, на которую я хочу смотреть, нормальная в этой точке и расстояние от нее, на которое я хочу смотреть.

Как можно настроить такую ​​модель камеры, чтобы она смотрела на точку (имея вектор нормали и расстояние от того места, откуда смотреть)?

1 Ответ

2 голосов
/ 28 января 2020

Я не уверен, правильно ли я понял, но это должно быть примерно так:

C = P + (d/len(N)) * N
k = [0 0 1]
V = -N;
T = cross(V, k)
U = cross(T, V)
F = C + (z*/len(V)) * V

где,
C: положение камеры (пурпурная точка)
P: целевая позиция (красная точка)
N: нормальный вектор (черный вектор)
d: желаемое расстояние
len(): функция, которая возвращает длину вектора
k: Единица измерения по оси Z (серый вектор)
V: направление обзора (красный вектор)
T: временный вектор, параллельный плоскости XY (синий вектор)
cross(): a функция, которая возвращает перекрестное произведение двух векторов
U: вектор включения камеры (зеленый вектор)
F: фокус камеры (пурпурный x)
z: коэффициент масштабирования (положительный скаляр , которое является расстоянием от точки фокусировки до положения камеры)

enter image description here

Несколько моментов, которые следует иметь в виду:

  • Это всегда сохраняет положительный z-компонент вектора вверх. В зависимости от вашей реализации функции cross() может потребоваться поменять параметры.
  • [C, V, U, T] фактически образуют трехмерную локальную систему координат, где C - ее начало, а остальные - векторы осей [единица], которые по кругу удовлетворяют правилу правой руки.
  • Вы не можете использовать это, когда N параллельно k. В этом случае вектор вверх может быть любым произвольным вектором, параллельным плоскости XY.
  • А остальным параметром, который вам следует принять решение, является z, который управляет масштабированием. Положение фокуса зависит от размера целевого объекта и необходимого вам масштаба.
...