문제

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를 확인하십시오.

다른 팁

떠오르는 유일한 제안은 텍스처가 부적절한 형식 (저 반영 또는 압축)이라는 것입니다.

출력이 어떤 방식으로 잘못 보이는지 설명 할 수 있습니까? 올바른 대 잘못된 스크린 샷의 가능성이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top