glReadPixels返回错误的值

问题描述:

我尝试获取呈现的像素颜色。glReadPixels返回错误的值

gl.glColor3f(1f, 0, 0); 
//draw 
gl.glReadPixels(lastX - pw/2, MyCanvas.this.getHeight() 
      - (lastY - ph/2), pw, ph, GL.GL_RED, GL.GL_FLOAT, 
      pixelBuffer); 
float r, g, b; 
r = pixelBuffer.getFloat(); 
g = pixelBuffer.getFloat(); 
b =pixelBuffer.getFloat(); 
pixelBuffer.rewind(); 
System.out.println(r+" "+g+" "+b); 

有真正的纯红颜色在屏幕上,但glReadPixels返回到R很奇怪值4.6006E-41,为什么???

+2

你确定你可以得到红,绿,蓝的出你'GL.GL_RED'通过后? – 2011-05-29 17:58:18

+0

缓冲区实际上可以保存所有三个值,但只有红色被存储,其他g和b被清零 – 2011-05-30 09:41:23

+0

这不是文档所说的。 – 2011-05-30 14:01:18

glReadPixels documentation说:由glPixelStore设置

存储参数,如GL_PACK_LSB_FIRST和GL_PACK_SWAP_BYTES,影响数据写入内存的方式。

因此请检查您的glPixelStore配置。换句话说,你的字节顺序是反向的。

0x0000803F => 4.600602988224807e-41 
0x3F800000 => 1.0 

相关链接:

使用GL_RGB而不是GL_RED作为格式。