У меня есть несколько трехмерных точек рядом с источником, внутренней и внешней матрицей камеры.Я могу получить правильные 2D точки через функцию projectPoints (используя x = intrinsic * extrinsic * X) в opencv.Но когда я хочу визуализировать эти 3D-точки с помощью opengl, это не может работать хорошо.Я только что преобразовал внутреннюю матрицу в glm mat4 следующим образом:
proj[0][0] = 2 * fx / width;
proj[1][0] = 0.0f;
proj[2][0] = (2 * cx - width) / width;
proj[3][0] = 0.0f;
proj[0][1] = 0.0f;
proj[1][1] = -2 * fy / height;
proj[2][1] = (height - 2 * cy) / height;
proj[3][1] = 0.0f;
proj[0][2] = 0.0f;
proj[1][2] = 0.0f;
proj[2][2] = -(far_clip + near_clip) / (near_clip - far_clip);
proj[3][2] = 2 * near_clip * far_clip / (near_clip - far_clip);
proj[0][3] = 0.0f;
proj[1][3] = 0.0f;
proj[2][3] = 1.0f;
proj[3][3] = 0.0f;
fx, fy - фокусное расстояние, ширина и высота - ширина и высота изображения, cx и cy - ширина / 2 и высота / 2(Я получаю через нее матрицу камеры).
Затем я транспонировал внешнюю матрицу 4 * 4 как матрицу вида glm из-за основной колонки в opengl.В моем шейдере я получил gl_Position через
gl_Position = proj * view * vec4(3Dpointposition, 1.0f)
Но я получил неправильный результат рендеринга на экране.Я получил матрицу камеры с источником в верхнем левом углу, а источник в opengl - в нижнем левом. Также кажется, что камера в opencv смотрит вниз по положительной оси z, но камера opengl смотрит вниз по отрицательной оси z-ось.Как я могу изменить код для правильной версии?