2012-12-26 2 views
2

그래서 RGB라는 이름의 많은 다른 색상 공간이 있습니다. 일부는 선형이며, 일부는 감마입니다. 그리고 내가 사용하고있는 모니터가 모니터마다 다를 것이라고 가정하고 있습니다.directx/opengl에서 RGB 색상을 어떻게 intepret해야합니까?

어느 것이 DirectX 또는 OpenGL 쉐이더에서 rgb 값을 해석해야합니까?

일반적인 사용자가 사용한다고 가정 할 수있는 '안전한'색 공간이 있습니까? 마치 게임 업계의 모든 사람들이 자신의 사용자가 사용할 것으로 가정하는 RGB 공간이 있습니까?

또는 모니터가 사용하는 색 공간을 감지하는 방법이 있습니까?

CIE XYZ와 같은 표준 색상 공간으로 변환 할 수 있도록 알아야합니다. 약간 잘못이라도 괜찮 으면 좋겠지 만, 전형적인 하드웨어는 최대한 가깝게하고 싶습니다.

답변

3

추가 규정없이 OpenGL에 들어가는 색상은 비디오 감마 램프가 적용된 상태에서 모니터로 바로 전달됩니다. OpenGL의 모든 색상 작업은 선형입니다.

그러나 OpenGL은 색상 작업을 수행하기 전에 색상 공간에서 텍스처 색상을 먼저 선형화하는 특수 sRGB 텍스처 포맷을 제공합니다. 이를 보완하기 위해 sRGB 프레임 버퍼 형식도 지원됩니다.

또한 (8 비트에서 낮은 충실도에 작은에)의 sRGB는 부적당 색 공간 일부 응용 프로그램에 대한 자세한 정보를 원하시면 http://www.g-truc.net/post-0263.htmlhttp://www.arcsynthesis.org/gltut/Texturing/Tut16%20Free%20Gamma%20Correction.html 물론

이러한를 참조하십시오. 이러한 상황에서는 "원시 색상"OpenGL 이미지 및 프레임 버퍼 형식을 권장하고 셰이더에서 색상 변환을 수행합니다. 텍스처 (R = X, G = Y, B = Z로 가정)에 대해 일부 HDR 이미지 형식 (즉, 채널 당 10 비트 이상)을 사용하여 일부 접촉 색상 공간 (XYZ는이 용도에 매우 적합합니다)을 사용하십시오. 스크린 외부 프레임 버퍼 객체로 렌더링하고 최종 사후 처리 단계에서 XYZ 프레임 버퍼에서 화면 색 공간으로 변환합니다.

또는 모니터가 사용하는 색 공간을 감지하는 방법이 있습니까?

OpenGL은 장치 관리를 다루지 않습니다. OS의 기능을 사용하여 출력 장치의 색상 프로파일을 결정해야합니다.

관련 문제