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

Posted

技术标签:

【中文标题】我应该如何在 directx/opengl 中解释 RGB 颜色?【英文标题】:how should i intepret RGB colors in directx/opengl? 【发布时间】:2012-12-26 20:06:40 【问题描述】:

所以,有许多不同的颜色空间,名称为 RGB。有些是线性的,有些是伽玛。我假设正在使用的显示器因显示器而异。

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于我应该如何在 directx/opengl 中解释 RGB 颜色?的主要内容,如果未能解决你的问题,请参考以下文章

在 rfc7230 中遇到“应该”应该如何解释?

几秒钟后我的窗口内容消失了

我应该如何解释这些 VTune 结果?

我应该如何解释 Apache 的 ab 基准测试工具的结果?

我应该如何解释 pca.components_ 的输出

Lightstreamer 新手:我应该如何解释这个 Web 请求?