我在这里似乎遇到了一个奇怪的情况,因为根据各个地方的各种搜索,似乎没有其他人有同样的问题。大多数问题都与混合或照明或任何其他任务有关......在我的情况下,问题作为着色缺陷存在。
我希望着色器提供准确的颜色;也就是说,如果我截取我正在处理的东西并使用颜色选择器,我希望它以我在代码中使用的相同颜色显示。看起来很简单,对吧?
void main(void)
{
gl_FragColor = vec4(0.0, 175.0 / 255.0, 50.0 / 255.0, 1.0);
}
也够简单吧?现在,在有人大喊“这是分裂!它不会完全按照你的数字!” 我已经用灰度进行了测试,并找到了一种方法可以使其 100% 准确地使用灰色阴影,但是颜色会发生一些奇怪的事情......我使用它,当我截图并使用颜色选择器时,我得到:R:68 , G: 166, B: 45
现在,我不是数学天才,但我很确定没有额外编辑的 0.0 是红色的平面 0。在此之前,我试图传递一个统一的颜色,所以我开始查看我的代码,看看我在做什么奇怪的事情,尽管我有 95% 的把握不是。然后我只是用这个固定的、硬编码的 vec4 替换了所有内容,以查看 IT 是否提供了正确的信息。
任何人都知道为什么我会得到奇怪的红色值,也许其他两个值不存在?当然,他们很近……但我想更近一点;确切地说,如果可能的话。
编辑:所以...我对 glReadPixels 并不完全熟悉,所以如果我做错了,请告诉我。但是,我的结果是我期望的输出。
GLfloat *data = new GLfloat[4];
if (data)
{
glReadPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT, data);
std::cout << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << std::endl;
std::cout << data[0] * 255.0 << " " << data[1] * 255.0 << " " << data[2] * 255.0 << " " << data[3] * 255.0 << std::endl;
delete data;
}
着色器:0.0、0.0、1.0、1.0
来自 ReadPixels 的 RGBA:0、0、1、1
着色器:0.0、175.0 / 255.0、50.0 / 255.0、1
来自 ReadPixels 的 RGBA:0、0.686275、0.196078、1
来自 ReadPixels 的 RGBA 乘以 255:0、175、50、255