J'essaie de simuler l'effet de distorsion de l'objectif pour mon projet SLAM. Un nuage de points 3D couleur scanné est déjà donné et chargé dans OpenGL. Ce que j'essaie de faire est de rendre une scène 2D à une pose donnée et de faire une odométrie visuelle entre l'image réelle d'une caméra fisheye et l'image rendue. Comme la caméra présente une distorsion importante de l'objectif, elle doit également être prise en compte lors du rendu.Distorsion de l'objectif de l'appareil photo dans OpenGL
Le problème est que je ne sais pas où mettre la distorsion de l'objectif. Shaders?
J'ai trouvé some open codes qui mettait la distorsion dans le shader de géométrie. Mais celui-ci, je suppose que le modèle de distorsion est différent du modèle de distorsion de l'objectif dans la communauté Computer Vision. Dans la communauté CV, la distorsion de l'objectif se produit généralement sur le plan projeté.
This one est assez similaire à mon travail, mais ils n'ont pas utilisé le modèle de distorsion.
Quelqu'un a-t-il une bonne idée?
Je viens de trouver another implementation. Leur code implémentait la distorsion à la fois dans le fragment shader et dans le shader de géométrie. Mais la version fragment shader peut être appliquée dans ma situation. Ainsi, je suppose que ce qui suit fonctionnera:
# vertex shader
p'=T.model x T.view x p
p_f = FisheyeProjection(p') // custom fish eye projection
Une autre façon de procéder est souvent de rendre à une texture que vous mappez ensuite sur un rectangle, que vous déformez ensuite la forme de – p10ben