2

因此,有许多不同的颜色空间,名称为 RGB。有些是线性的,有些是伽玛。我假设正在使用哪一个因监视器而异。

我应该将directx或opengl着色器中的rgb值解释为哪一个?

是否有我可以假设典型用户将使用的“安全”色彩空间?比如,游戏行业的每个人都认为他们的用户会使用 RGB 空间吗?

或者有没有办法检测显示器正在使用什么色彩空间?

我需要知道,这样我才能在 CIE XYZ 等标准色彩空间之间进行转换。如果它有点错误,那很好,但我希望尽可能接近典型的硬件。

4

1 回答 1

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 图像和帧缓冲区格式并在着色器中执行颜色转换。为纹理使用一些接触色彩空间(XYZ 非常适合)和一些 HDR 图像格式(即每个通道 10 位或更多位)(假设 R=X、G=Y、B=Z)。渲染到屏幕外帧缓冲区对象,并在最后的后处理步骤中从 XYZ 帧缓冲区转换到屏幕颜色空间。

或者有没有办法检测显示器正在使用什么色彩空间?

OpenGL 不处理设备管理。您必须使用操作系统的工具来确定输出设备的颜色配置文件。

于 2012-12-26T20:18:18.427 回答