У меня есть веб-камера, направленная на наклонный стол, и я отслеживаю маркеры.
У меня есть TransformationMatrix в OpenSceneGraph, и его часть перевода содержит относительные координаты от отслеживаемого объекта до камеры.
Поскольку камера направлена на наклон, при перемещении маркера по таблице обновляются оси Y и Z, хотя все, что я хочу обновить, это ось Z, поскольку высота маркера не изменяет только его расстояние до камера.
Это имеет эффект, когда при проецировании модели на маркер в OpenSceneGraph модель немного отключается, и когда я перемещаю маркер по кругу, значения Y и Z обновляются некорректно.
Так что я предполагаю, что мне нужна Матрица преобразования, с которой я умножаю каждую точку, чтобы у меня была новая Система координат, которая лежит ортогонально на поверхности стола.
Примерно так: A * v1 = v2 v1 - координаты камеры, а v2 - мои «координаты таблицы»
Поэтому я выбрал 4 пункта для «калибровки» моей системы. Поэтому я поместил маркер в верхний левый угол экрана и определил v1 как текущие координаты камеры, а v2 как (0,0,0), и я сделал это для 4 разных точек.
И затем, взяв линейные уравнения, полученные из неизвестной матрицы и двух известных векторов, я решил матрицу.
Я думал, что значения, которые я получу для матрицы, будут значениями, необходимыми мне для умножения координат камеры, чтобы модель корректно обновлялась на маркере.
Но когда я умножил известные координаты камеры, которые я собирал ранее, с помощью матрицы, я не получил ничего похожего на то, что предполагалось для моих «координат таблицы».
Является ли мой подход совершенно неправильным, я просто что-то напутал в уравнениях? (решается с помощью wolframalpha.com) Есть ли более простой или лучший способ сделать это?
Любая помощь будет принята с благодарностью, так как я немного потерян и под некоторым давлением времени: - /
Спасибо,
David