Pergunta

Eu tenho implementado um YUV para conversão RGB via um shader de fragmento escrito em linguagem shader da Nvidia. (Y, U e V são armazenados em texturas separadas que são reunidas por meio de vários texturização na minha fragmento sombreador). Ele funciona muito bem sob OpenGL, mas sob Direct3D Eu apenas não pode obter a imagem de saída para olhar direito. Estou começando a suspeitar que Direct3D é de alguma forma modificar o Y, U e amostras V antes de eu ter a chance de fazer as minhas coisas conversão YUV. Alguém sabe se Direct3D faz quaisquer modificações nos valores armazenados em texturas antes do shader de fragmento é executado e como desativá-los>?

Foi útil?

Solução

Nós descobri-lo. :) Basicamente, o problema foi que enquanto nossa YUV para equações RGB estavam corretas, não estávamos amostragem adequadamente os dados V! Portanto, nenhuma quantidade de futzing com as equações teria ajudado!

No final, eu recomendo a seguinte estratégia para qualquer um tentar fazer isso:

1) Set R, G e B para o valor de Y. Você deve obter uma imagem em tons de cinza (como Y contém apenas luminância). 2) Em seguida, defina R, G e B para U. Você deve obter cores engraçados! 3) Finalmente conjunto R, G e B para V. Mais uma vez, você deve obter cores engraçadas.

Além disso, normalizar corretamente os valores é fundamental. Verifique nosso fourcc.org para uma discussão sobre a normalização YUV adequada.

Outras dicas

A única sugestão que vem à mente é que as texturas estão em um formato inadequada (baixa precisão ou comprimido).

Você pode descrever de que forma a saída parece errado? Qualquer chance de um direito vs imagem de errado?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top