Определение положения точки на основе поворота / перемещения камеры до и после смены источника - PullRequest
3 голосов
/ 21 июня 2011

Извиняюсь, если это глупый вопрос, я очень плохо знаком с работой в 3D.

У меня есть несколько камер-обскура с матрицей вращения 3x3 и вектором перемещения, основанным на начале координат (0,0,0).

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

В таком случае мой вопрос таков: учитывая точку с трехмерным положением в исходном пространстве, как вычислить трехмерное положение той же точки в новом пространстве, используя новый поворот / перемещение той же камеры (или камер) ?

И пока я задаю вопросы, есть ли более эффективные способы сделать это?

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Я предполагаю, что положение ваших точек относительно исходной матрицы, которую, как вы говорите, можно перевести / повернуть.

Предполагая, что все это необходимо, новые позиции ваших точек определяются как:

pos_newCoord = R^-1 * T^-1 * pos_oldCoord

То, что вы делаете, это то, что вы берете свое новое происхождение, переводите его обратно в старое и убираете его.Написано по-другому:

newOrigin = myTranslation(myRotation(oldOrigin))
def newCoordinates(point):
    return inverse(myRotation)(inverse(myTranslation)(point))

Вы можете предварительно рассчитать обратные операции, особенно если вы используете 4d матрицы.


" как определить изменение ввращение и перевод для источника, основанного на изменениях вращения и перевода для камер?"–OP

Если вам не сообщили эту информацию, вы можете восстановить ее следующим образом.Мы будем использовать 4d точки и матрицу аффинного преобразования 4v4 (en.wikipedia.org/wiki/Affine_transformation).

  • Взять любые 4 камеры.
  • Рассмотрим оригинальную камеруточки против их переведенных / повернутых точек.
  • Возможно, есть лучший способ сделать это с помощью линейной алгебры, но если вы перейдете по ссылке на Википедию, мы заметим, что есть подматрица 3x3 A и подматрица 3x1 b и, следовательно, 12 неизвестных.4 балла с 3 уравнениями в каждой дают 12 уравнений.Есть решение, потому что матрицы этой формы обратимы *.Решите, используя ваш любимый метод решения системы линейных уравнений, например, исключение Гаусса на матрице 12x12.
0 голосов
/ 22 июня 2011

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

Если вы представляете преобразование камеры как одну матричную операцию M, то обратный ход - это просто inverse(M).Еще лучше, если ваша матрица камеры состоит из нескольких шагов, вы можете инвертировать шаги.Например, если M=rotatex(theta) * scale(sx, sy, sz) * translate(x, y, z), то inverse(M) = translate(-x, -y, -z) * scale(1/sx, 1/sy, 1/sz) * rotatex(-theta).Обратите внимание, что вы также должны изменить заказ.Это свойство "носки / обувь".Вы надеваете носки, затем надеваете обувь.Чтобы повернуть назад, вы снимаете обувь, а затем снимаете носки.

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

...