문제
NVIDIA의 셰이더 언어로 작성된 조각 셰이더를 통해 YUV에서 RGB 변환을 구현했습니다. (Y, U 및 V는 Fragment Shader의 다중 텍스처를 통해 결합 된 별도의 텍스처로 저장됩니다). OpenGL에서 잘 작동하지만 Direct3D에서는 출력 이미지를 올바르게 얻을 수 없습니다. Direct3D가 YUV 변환을 수행하기 전에 어떻게 든 Y, U 및 V 샘플을 수정하고 있다고 의심하기 시작했습니다. Direct3D가 조각 셰이더가 실행되기 전에 텍스처에 저장된 값을 수정하고이를 비활성화하는 방법을 알고 있습니까?
해결책
우리는 그것을 알아 냈습니다. :) 기본적으로 문제는 YUV에서 RGB 방정식이 정확하지만 V 데이터를 제대로 샘플링하지 않았다는 것입니다! 따라서 방정식에 대한 양의 양의 양이 도움이되지 않았을 것입니다!
결국, 나는 이것을 시도하는 사람에게 다음과 같은 전략을 권장합니다.
1) r, g 및 b를 Y의 값으로 설정합니다. GrayScale 이미지를 가져와야합니다 (Y는 휘도 만 포함). 2) 다음으로 R, G 및 B를 U로 설정하십시오. 재미있는 색상을 얻을 수 있습니다! 3) 마지막으로 R, G 및 B를 V로 설정하십시오. 다시 한번, 재미있는 색상을 얻어야합니다.
또한 값을 올바르게 정규화하는 것이 중요합니다. 적절한 YUV 정규화에 대한 논의는 Fourcc.org를 확인하십시오.
다른 팁
떠오르는 유일한 제안은 텍스처가 부적절한 형식 (저 반영 또는 압축)이라는 것입니다.
출력이 어떤 방식으로 잘못 보이는지 설명 할 수 있습니까? 올바른 대 잘못된 스크린 샷의 가능성이 있습니까?