У меня довольно трудное время для рендеринга модели .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 };