2010-03-08 7 views
1

Je me demandais quelle est la meilleure façon de comparer un pixel que est actuellement rendu (et accessible en utilisant un fragment shader) à un pixel avec le même emplacement dans une texture non liée précédemment stockée (les deux textures ont la même taille)?OpenGL - Comment comparer les valeurs de pixels de textures séparées avec le même emplacement

+0

Donc vous dites que vous avez capturé le framebuffer dans un cadre précédent, et que vous voulez comparer deux pixels aux mêmes endroits sur le framebuffer capturé, et le framebuffer en cours? –

+0

il n'y a pas de "même endroit" pour un texel dans une texture générique (pour le starter, ils peuvent avoir des tailles différentes, avoir un format différent ...) et les fragmen. Que diriez-vous d'expliquer ce que vous essayez d'accomplir? – Bahbar

+0

Ok. J'ai donc une texture RGBA 640x480 stockée après avoir effectué un shader de détection de contour sur une image vidéo. J'ai également un modèle filaire d'un objet avec des lignes cachées enlevées que j'essaye de détecter dans la trame vidéo. J'essaie de comparer les pixels du modèle filaire pour connaître le nombre de pixels correspondant aux bords de la trame vidéo en utilisant un autre pixel shader. Ce nombre de pixels me donnera alors une probabilité de la façon dont les modèles posent des ajustements dans la trame vidéo actuelle. Merci ... – Brett

Répondre

1

Maintenant que la question est plus claire, il est possible de donner une réponse.

Le problème principal est que le contenu du framebuffer et les paramètres du fragment (position) ne sont pas disponibles dans le fragment shader. En effet, vous ne pouvez pas exécuter l'opération "compare" pendant le rendu.

Vous devez rendre le modèle dans une texture (recherche de rendu à texture, en utilisant des objets frame buffer), puis exécuter un fragment shader (peut-être en utilisant GL_texture_rectangle) dans une autre vue avec une fenêtre de même taille texture.

Le fragment shader doit avoir deux textures en entrée: la première texture (contenant les arêtes détectées) et le modèle filaire texture-rendu. Ensuite, il est facile d'effectuer un calcul complexe dans le fragment shader une fois que vous pouvez accéder à chaque textel des deux textures.

J'espère que cela peut vous aider.

+0

Est-il possible de faire cela en projetant la texture sur le modèle en utilisant la cartographie de texture projective? – Brett

+0

Je ne peux rien dire: tout dépend des paramètres de texturation spécifiques (valeurs, coords ...). Je suggérerais pour votre tâche (en comparant les pixels) la http://en.wikipedia.org/wiki/Cross-correlation: j'ai utilisé pour rechercher des volumes dans des images 3D. Le principal avantage est qu'il recherche des variations de pixels, au lieu de valeurs de pixels (en effet, l'intésité des pixels est indépendante). – Luca

Questions connexes