2008-09-28 8 views
2

Nvidia의 셰이더 언어로 작성된 조각 쉐이더를 통해 YUV에서 RGB로 변환을 구현했습니다. (Y, U 및 V는 조각 쉐이더에서 멀티 텍스처링을 통해 결합 된 별도의 텍스처에 저장됩니다.) OpenGL에서 잘 작동하지만 Direct3D에서는 출력 이미지를 올바르게 볼 수 없습니다. Direct3D가 YUV 변환 작업을 수행하기 전에 Y, U 및 V 샘플을 수정하는 것으로 의심됩니다. 프래그먼트 셰이더가 실행되기 전에 텍스처에 저장된 값을 Direct3D가 수정하면 어떻게 알 수 있습니까?YUV 조각 쉐이더를 통한 변환

+0

여기를 출시하셨습니까? 나는 a) YUV-RGB 변환 학습과 b) Cg 학습을 동시에 고민하고있다. 나는 네가 한 일을 볼 수 있기를 좋아한다. – moswald

+1

http://www.mdk.org.pl/2007/11/17/gl-colorspace-conversions을 확인하십시오. – dicroce

답변

2

우리가 알아 냈습니다. :) 기본적으로 문제는 RGB YUV 방정식이 올바르지 만 V 데이터를 올바르게 샘플링하지 못했다는 것입니다. 따라서 방정식으로 방치하면 아무런 도움이되지 않았을 것입니다! 결국

, 나는이 일을 시도하는 사람을 위해 다음과 같은 전략을 추천 할 것입니다 :

1) 설정 R, G, Y는 포함과 같이 (그레이 스케일 이미지를 얻을해야 Y.에서 값 B 그냥 휘도). 2) 다음으로 R, G 및 B를 U로 설정합니다. 재미있는 색상을 얻을 수 있습니다! 3) 마지막으로 R, G 및 B를 V로 설정합니다. 다시 재미있는 색상을 사용해야합니다.

또한 적절하게 값을 정규화하는 것이 중요합니다. 적절한 YUV 정규화에 대한 논의는 fourcc.org에서 확인하십시오.

1

마음에 오는 유일한 제안은 텍스처가 부적절한 형식 (저 정밀도 또는 압축)입니다.

출력이 어떻게 잘못 표시되는지 설명해 주실 수 있습니까? 잘못된 vs 스크린 샷의 가능성은?