【发布时间】:2012-07-14 12:57:57
【问题描述】:
我正在尝试使用 glReadPixels 在 OpenGL ES 中检索颜色。我用 float[] 设置对象的颜色,例如{0.0f,0.5f,0.2f,1.0f} 如何将 glReadPixels 值转换为相同的 float[],因为它是无符号字节?
设置颜色:
gl.glColor4f(color[0], color[1], color[2], color[3]);
获取颜色:
ByteBuffer buf = ByteBuffer.allocate(4);
buf.order(ByteOrder.nativeOrder());
gl.glReadPixels((int) mx, height - (int) my, 1, 1, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, buf);
byte result[] = buff.array();
我不知道这是否已经被问过/回答过,但我还没有找到解决方案,我已经尝试了很长时间。
【问题讨论】:
-
将每个颜色值存储在一个浮点数中,然后将其除以 255.0 即可。注意会有舍入误差。例如,您的
.5现在可能更像.498。 -
@DavidSchwartz 如果我将颜色设置为 {1,0,0,0) 并将结果 [0] 除以 255.0,我得到 -0.003921569
-
@DavidSchwartz:有点复杂,请看这里:kaba.hilvi.org/programming/range/index.htm
-
@datenwolf 我不知道我应该如何使用这些信息。尝试在 Java 中实现该代码 sn-p,但效果不佳。没有更简单的方法吗?
标签: android opengl-es colors glreadpixels