看起来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对颜色做了什么,如何避免这种情况呢?神秘解决:这只是关于为不应该被纹理化的对象禁用纹理。