2012-12-26 35 views
2

所以,有很多不同的顏色空間,名稱爲RGB。有些是線性的,有些是伽瑪射線。我假設哪一個正在使用因顯示器而異。我應該如何在directx/opengl中解釋RGB顏色?

哪一個我應該將directx或opengl着色器中的rgb值解釋爲?

是否有一個'安全'的色彩空間,我可以假設一個典型的用戶將使用?比如說,遊戲行業的每個人都假設他們的用戶會使用RGB空間嗎?

或者有沒有辦法來檢測顯示器正在使用的顏色空間?

我需要知道,以便我可以轉換爲標準色彩空間,如CIE XYZ。如果它有點不對,這很好,但我希望儘可能的接近典型的硬件。

回答

3

沒有進一步的規定,進入OpenGL的顏色直接進入顯示器,僅應用了視頻伽瑪斜坡。 OpenGL中的所有顏色操作都是線性的。

但是,OpenGL確實提供了特殊的sRGB紋理格式,它在進行顏色操作之前首先線性化來自顏色空間的紋理顏色。爲了補充這一點,還支持sRGB幀緩衝格式。

另請參見這些進一步信息http://www.g-truc.net/post-0263.htmlhttp://www.arcsynthesis.org/gltut/Texturing/Tut16%20Free%20Gamma%20Correction.html

當然對於一些應用sRGB是一個不適宜的色彩空間(小,以低的​​保真度在8位)。在這些情況下,我建議使用「原始顏色」OpenGL圖像和幀緩衝格式,並在着色器中執行顏色轉換。對於紋理(假設R = X,G = Y,B = Z),使用一些接觸色彩空間(XYZ非常適合此)與某種HDR圖像格式(即每個通道10個或更多位)。渲染到屏幕外的幀緩衝區對象,並在最終的後處理步驟中從XYZ幀緩衝區轉換到屏幕色彩空間。

或者有沒有辦法來檢測顯示器正在使用的顏色空間?

OpenGL不處理設備管理。您將不得不使用操作系統的設施來確定輸出設備的顏色配置文件。