我应该如何在directx/opengl中解释RGB颜色



所以,有许多不同的颜色空间都被称为RGB。有些是线性的,有些是。我假设每个监视器使用的是不同的。

我应该在directx或opengl着色器中解释哪一个RGB值?

是否有一个"安全"的色彩空间,我可以假设一个典型的用户将使用?比如,是否存在一个RGB空间,游戏行业的所有人都认为他们的用户会使用这个空间?

或者是否有一种方法来检测显示器正在使用的颜色空间?

我需要知道,这样我就可以转换和从标准色彩空间,如CIE XYZ。如果有一点错误也没关系,但我希望尽可能接近典型的硬件。

没有进一步的配置,颜色进入OpenGL直接通过显示器,只应用视频伽玛渐变。OpenGL中所有的颜色操作都是线性的。

然而,OpenGL确实提供了特殊的sRGB纹理格式,在进行颜色操作之前,首先从颜色空间线性化纹理颜色。为了补充这一点,还支持sRGB帧缓冲格式。

更多信息请参见http://www.g-truc.net/post-0263.html和http://www.arcsynthesis.org/gltut/Texturing/Tut16%20Free%20Gamma%20Correction.html

当然,对于某些应用来说,sRGB是一个不合适的色彩空间(太小,在8位时保真度很低)。在这些情况下,我建议使用"原始颜色"OpenGL图像和framebuffer格式,并在着色器中执行颜色转换。使用一些接触色彩空间(XYZ非常适合)和一些HDR图像格式(即每通道10或更多位)用于纹理(假设R=X, G=Y, B=Z)。渲染到屏幕外的framebuffer对象,并在最后的后处理步骤中从XYZ framebuffer转换到屏幕颜色空间。

或者是否有一种方法来检测显示器正在使用的颜色空间?

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

相关内容

  • 没有找到相关文章

最新更新