Мне довольно сложно визуализировать модель .stl с такими же размерами и пропорциями, которые визуализируются на изображении реального объекта. Я помещаю реальный объект в центр области просмотра и хочу переключаться между моделью и реальным объектом (реальный объект в 9 раз меньше, чем в модели).
Сначала я калибрую камеру с помощью OpenGL, как в руководстве. , когда фокус оптимален для реального объекта. После получения значений cx, cy, fx и fy я создаю матрицу перспективы с этими значениями и использую функцию glMultMatrixd. Наконец, я изменяю размер фотографии, чтобы она соответствовала моему окну OpenGL, и сравниваю фотографию с отрендеренной моделью.
Но у меня есть некоторые проблемы с результатом:
- есть искажение пропорций (ширина больше высоты)
- есть искажение перспективы (камера перпендикулярна объекту, поэтому я должен видеть только верхнюю часть объекта, но она показывает боковую часть объекта)
- размер не соответствует реальному объекту (немного меньше)
Моя матрица отношений ниже:
GLdouble perspMatrix[16] = { fx / cx, 0 , 0 , 0,
0, fy / cy , 0 , 0,
0, 0 , -(znear + zfar) / (znear - zfar), 2 * zfar*znear / (zfar - znear),
0, 0 , -1 , 0 };