У меня есть матрица трансформации в мировом пространстве. Мне нужно преобразовать его в локальное (камера) пространство.
Я сделал обратное (Локальное к миру), используя:
Eigen::Matrix3f R0; //rotation matrix
Eigen::Vector3f T0; // xyz translation values
Eigen::Vector3f C0; //result
R0.transposeInPlace(); //invert rotation matrix
C0 = -R0 * T0; //return world-space coordinate
Могу ли я просто запустить ту же самую вещь, чтобы инвертировать ее другим способом? Или это другое уравнение?
Спасибо.
Обязательно изучите линейную алгебру, если хотите продолжить работу с матрицами.
В вашем случае вы должны быть в состоянии решить для T0, если вы умножаете влево на обратную матрицу с обеих сторон:
C0 = -R0 * T0
-R1 * C0 = -R1 * -R0 * T0
(R1
обратная R0
)
-R1 * C0 = T0
Таким образом, чтобы получить T0 из C0, вы должны отрицать и умножать влево C0 на обратное к R0, которое будет матрицей, с которой вы начали, прежде чем вызывать R0.transposeInPlace();
Других решений пока нет …