Question

J'ai implémenté une conversion YUV à RVB via un fragment shader écrit dans le langage de shader de Nvidia. (Y, U et V sont stockés dans des textures séparées qui sont combinées via plusieurs textures dans mon fragment shader). Cela fonctionne très bien sous OpenGL, mais sous Direct3D, je ne parviens pas à obtenir une image de sortie correcte. Je commence à penser que Direct3D modifie en quelque sorte les échantillons Y, U et V avant de pouvoir effectuer la conversion YUV. Est-ce que quelqu'un sait si Direct3D apporte des modifications aux valeurs stockées dans les textures avant l'exécution du fragment shader et comment les désactiver >?

Était-ce utile?

La solution

Nous l'avons compris. :) En gros, le problème était que, même si nos équations YUV à RVB étaient correctes, nous n’échantillonnions pas correctement les données V! Donc, aucune quantité de futzing avec les équations aurait aidé!

À la fin, je recommanderais la stratégie suivante à quiconque tenterait de le faire:

1) Définissez R, G et B sur la valeur de Y. Vous devriez obtenir une image en niveaux de gris (car Y ne contient que la luminance). 2) Ensuite, réglez R, G et B sur U. Vous devriez obtenir des couleurs amusantes! 3) Enfin, réglez R, G et B sur V. De nouveau, vous devriez obtenir des couleurs amusantes.

De plus, il est essentiel de normaliser correctement les valeurs. Consultez notre site fourcc.org pour en savoir plus sur la normalisation YUV appropriée.

Autres conseils

La seule suggestion qui me vient à l’esprit est que les textures sont dans un format inapproprié (faible précision ou compressé).

Pouvez-vous décrire en quoi la sortie semble erronée? Une chance d'avoir une bonne ou une mauvaise capture d'écran?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top