Я работаю над базовым дополненным реальным приложением на Android. То, что я сделал до сих пор, - это обнаружить квадрат с opencv, а затем использовать cvFindExtrinsicCameraParams2() Я вычислил вектор вращения и перевода. Для этого я использовал 4 точки объекта, которые являются только углами квадрата вокруг (0,0,0) и 4 углами квадрата изображения.
Это дает мне довольно хорошую матрицу вращения и перевода. Я также вычислил матрицу вращения cvRodrigues2(), так как использование этого проще, чем вектор вращения. Пока я использую их, чтобы нарисовать некоторые точки на изображении, все работает нормально. Однако мой следующий шаг - передать эти векторы и матрицу обратно в java, а затем использовать их с OpenGL для рисования квадрата в OpenGLView. Квадрат должен быть точно вокруг квадрата в изображении, который отображается за OpenGLView.
Моя проблема в том, что я не могу найти правильный способ использования матрицы вращения и вектора перевода в OpenGL. Я начал с точно таких же объектов, что и для функций openCV. Затем я применил матрицу вращения и вектор трансляции практически любым возможным способом, о котором я мог думать. К сожалению, ни один из этих подходов не дает результата, который в любом случае приближается к тому, на что я надеялся. Может ли кто-нибудь сказать мне, как правильно их использовать?
До сих пор "самые близкие" результаты, которые я получил, были при случайном умножении всей матрицы на -1. Но большую часть времени квадраты по-прежнему выглядят зеркально, повернуты или повернуты на 180 градусов. Поэтому я думаю, что это был просто удачный удар, но не правильный подход.