Для приложения с дополненной реальностью я использую некоторый алгоритм slam для прогнозирования текущей ориентации моего мобильного телефона.Как инвертировать поворот одной оси в матрице камеры (например, OSG CameraViewMatrix)
Алгоритм (LSD-Slam) предоставляет текущую позу в виде группы слоев SE3 (с использованием Sophus::Sim3f). Если я прав, этот тип содержит матрицу, которая может быть интерпретирована как Viewmatrix камеры. После инициализации, например. матрица выглядит так:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Чтобы визуализировать 3D-контент, я использую OpenSceneGraph. Fortunatley, в OSG вы можете установить положение камеры непосредственно с помощью просмотра-матрицы:
camera->setViewMatrix(matrix);
Теперь, когда я запускаю код вещи, кажется, работает хорошо, если я вращаться вокруг Y (рулон) или Z (рыскания). Но когда я поворачиваюсь вокруг X (шаг), моя цифровая камера в OSG, похоже, делает полную противоположность тому, что она должна была делать.
Например: Представьте себе 3D-модель непосредственно перед камерой. Если я затем медленно наклоняю камеру вверх (вокруг X), 3D-модель также движется вверх, в то время как на самом деле она должна покидать экран внизу. Я попытался проиллюстрировать это поведение следующим рисунком:
Упрощение - это действительно простое решение, но я просто не мог исправить даже после нескольких часов попыток. Если я правильно понял, первые столбцы представляют поворот вокруг определенной оси, поэтому я попытался инвертировать одиночные векторы, например. сделал это:
u u u 0 -u u u 0 -u -u -u 0
v v v 0 => -v v v 0 ... v v v 0
n n n 0 -n n n 0 n n n 0
0 0 0 1 0 0 0 1 0 0 0 1
Хотя некоторые попытки действительно решить кромешной Issue, затем они перепутались другую ось .. Там всегда кажется, что одна ось не так, по крайней мере. Кто-нибудь знает, как я могу это решить? Я бы очень признателен за любые намеки на эту проблему.
Спасибо за ваш ответ, переключения строк/colums не помогло. Поэтому я последовал твоему совету, чтобы снова проверить Софуса. Я принял ваш ответ, но я отправлю свой собственный ответ, если кто-нибудь столкнется с подобной проблемой. –