2012-05-14 6 views
2

Première fois que vous posez une question sur l'échange de la pile, j'espère que c'est le bon endroit.Calculer des coordonnées 3D à partir d'un plan d'image 2D en tenant compte de la perspective sans accès direct à la matrice de visualisation/projection

Je n'arrive pas à développer un algorithme d'approximation assez proche pour ma situation car je ne suis pas exactement le meilleur en termes de maths 3D. J'ai un environnement 3d dans lequel je peux accéder à la position et la rotation de n'importe quel objet, y compris ma caméra, ainsi que courir des lignes de trace à partir de deux points pour obtenir des distances entre un point et un point de collision. J'ai aussi le champ de vision de ma caméra. Je n'ai cependant aucune forme d'accès aux matrices monde/vue/projection. J'ai également une collection d'images 2D qui sont essentiellement un ensemble de captures d'écran de l'environnement 3D de la caméra, chaque collection est du même point et de l'angle et l'ensemble moyen est pris à environ une moyenne de 60 degrés angle vers le bas de l'horizon.

J'ai été en mesure d'utiliser des "entités de points d'enregistrement" qui peuvent être placées dans le monde 3D qui représente les coins de l'image 2d, puis lorsqu'un point est sélectionné sur l'image 2d, il est lire comme une coordonnée avec la plage 0-1, qui est ensuite interpolée entre les positions 3d des points d'enregistrement. Cela semble bien fonctionner, mais seulement si l'image est un angle descendant parfait. Lorsque la caméra est inclinée et qu'une autre dimension de la perspective est introduite, les résultats deviennent plus grossièrement inexacts car il n'y a pas de compensation pour cette perspective. Je n'ai pas besoin de pouvoir calculer la hauteur d'un point, disons une fenêtre sur un gratte-ciel, mais au moins la coordonnée à la base du plan image, ou qui si je prolonge une ligne depuis mon image à partir d'un point d'espace image spécifié J'ai besoin au moins du point que la ligne intersecte avec le sol s'il n'y avait rien sur le chemin. Tout le matériel que j'ai trouvé à ce sujet dit simplement de projeter le point en utilisant les matrices monde/vue/projection, que je trouve simple en soi, sauf que je n'ai pas accès à ces matrices, juste des données que je peux collecter à Le temps de capture d'écran et d'autres algorithmes utilisent des maths complexes que je ne comprends tout simplement pas encore. Un but final de ceci serait de placer des marqueurs dans l'environnement 3d où un utilisateur clique dans l'image, tout en n'étant pas capable d'exécuter une simple suppression de la vue de l'utilisateur.

Toute aide serait appréciée, merci.

Edit: Herp derp, alors que ma mise en œuvre pour le faire est un peu bizarre en raison des limites de ma situation, la solution essentiellement à résumer la réponse de ananthonline au sujet recalculant simplement les matrices vue/projection.

+0

Etes-vous capable de "prendre des captures d'écran" d'objets artificiels/de référence que vous pouvez placer dans cet environnement 3D? Si oui, vous pourrez peut-être inverser les matrices de vue/projection. – Ani

+0

Je ne peux rien montrer de visuel qui n'est pas l'environnement 3D à portée de main dans ces images, cependant je peux introduire des choses qui ne seront pas rendues à l'environnement 3d qui peut fournir des vérifications de position/rotation/trace tout ce dont vous n'auriez pas besoin d'un accès direct au pipeline. – Allar

+0

Encore une question: entre position, rotation et FOV de la caméra, ne pourriez-vous pas calculer les matrices de vue/projection de la caméra (http://www.songho.ca/opengl/gl_projectionmatrix.html) - vous permettant ainsi de ne pas projeter de points 3D connus? – Ani

Répondre

0

Entre la position, la rotation et le FOV de la caméra, ne pouvez-vous pas calculer les matrices View/Projection de la caméra (songho.ca/opengl/gl_projectionmatrix.html) - vous permettant ainsi de ne pas projeter des points 3D connus?

+0

Merci beaucoup :) – Allar

Questions connexes