如何在OpenGL Android中获取精确的颜色?

3

看起来OpenGL应用了一些颜色空间转换:

渲染、glReadPixels,预期

(0.25,0.25,0.25,0.25), ( 56, 57, 59, 64), ( 64, 64, 64, 64)<br>
(0.50,0.50,0.50,0.50), (112,114,118,128), (128,128,128,128)<br>
(0.75,0.75,0.75,0.75), (168,171,178,191), (191,191,191,191)<br>
(1.00,1.00,1.00,1.00), (224,228,237,255), (255,255,255,255)<br>

我以字节的形式传递颜色时也会得到相同的结果,例如(64, 64, 64, 64)会产生(56, 57, 59, 64)等等... 照明被禁用,抖动也被禁用。显然这是一种颜色分量混合转换,某种颜色温度校正,它完全搞砸了所有东西。有人知道发生了什么,并如何禁用此颜色转换吗?注意:这不是glReadPixels的问题,实际上是渲染——白色物体在白色表面上渲染出来并不是白色,在屏幕上它会变暗一些...为什么!?更新:所以问题出在GLUtils.texImage2D(....)上。如果我不调用它,白色就是白色。如果我这样做,即使对于另一个渲染被注释掉的对象,这个调用也会将某种颜色转换应用于整个Gl上下文。那么GLUtils.texImage2D对颜色做了什么,如何避免这种情况呢?神秘解决:这只是关于为不应该被纹理化的对象禁用纹理。
1个回答

0

我读了一下,有些不同的地方... 如果我使用(255,255,255)清除表面,glReadPixels()会准确地获取到这个颜色,但是如果我渲染一个所有顶点都是(255,255,255)的对象,它会读取到(224,228,237)。 这不仅仅是glReadPixels的问题,实际上是渲染的问题:当我在用白色清除表面后渲染白色物体时,我可以看到这个物体,因为它实际上被绘制成比白色略暗的颜色... 问题是为什么,为什么,为什么这个该死的白色物体不是白色。 - Yuri Zisman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接