Я работаю с некоторым кодом, который производит 3x3 матрица вращения и вектор сдвига, представляющий ориентацию камер и местоположение.
Однако документация указывает, что для получения местоположения камеры нужно умножить транспонированную и инвертированную матрицу вращения на вектор сдвига. Это означает, что исходный вектор не является местоположением камеры? В противном случае, что представляет тот исходный вектор?
Я предполагаю, что полученные вами R (матрица вращения) и t (вектор перемещения) относятся к мировой системе координат с (0,0, 0)
в качестве источника.
С помощью R и t теперь вы можете переместить точку из мировой системы координат ( WC ) в систему координат камеры ( CC ), то есть X c = RX + t , где X - трехмерная точка в WC и X ] c равно X в CC (то есть видно с точки зрения камеры). Это применимо, если мы имеем дело с твердыми телами, поэтому мы просто вращаем точку, а затем перемещаем ее.
Теперь вам нужно найти координаты центра камеры, который является началом CC , или когда X c = 0 :
0 = RC + t, где C - трехмерные координаты центра камеры в WC . Решая для C , мы получаем
C = -R -1 t
И, кстати,
Транспонирование и умножение матрицы вращения не изменяет матрицу вращения - матрица вращения ортогональна, что означает, что ее транспонирование равно ее обратной и, следовательно, (R T ) -1 = R .
Исходный вектор в этом случае, вероятно, является вектором перевода в координатах после перевода. А может быть и до - все зависит от вашей личной точки зрения.
Дело в том, что у вас есть две системы координат, и каждый вектор может быть представлен в каждой из них. Матрица вращения позволяет вам преобразовывать вещи из одной системы в другую. То, что называется "умножить транспонированную и инвертированную матрицу вращения на", является обратным преобразованием.