Я пытаюсь смоделировать эффект искажения объектива для своего проекта SLAM. Отсканированное цветное 3D-облако точек уже задано и загружено в OpenGL. То, что я пытаюсь сделать, это визуализировать 2D-сцену в заданной позе и выполнить некоторую визуальную одометрию между реальным изображением с камеры «рыбий глаз» и визуализированным изображением. Поскольку камера имеет серьезные искажения объектива, это также следует учитывать на этапе рендеринга.
Проблема в том, что я понятия не имею, куда поставить дисторсию объектива. Шейдеры?
Я нашел несколько открытых кодов, которые помещают искажение в геометрический шейдер. Но я думаю, что эта модель искажения отличается от модели искажения объектива в сообществе Computer Vision. В сообществе CV дисторсия линзы обычно возникает на плоскости проекции.
Этот очень похож на мою работу, но они не t используется модель искажения.
У кого-нибудь есть хорошая идея?
Я только что нашел другая реализация. Их код реализовал искажение как во фрагментном шейдере, так и в геометрическом шейдере. Но в моей ситуации применим вариант фрагментного шейдера. Таким образом, я предполагаю, что следующее будет работать:
# vertex shader
p'=T.model x T.view x p
p_f = FisheyeProjection(p') // custom fish eye projection