如何使用 glReadPixels 获取浮点值? [AndroidNDK es3.0]
How can I get float values using glReadPixels? [Android NDK es3.0]
C++代码:
float* data = (float*)malloc(texWidth*texHeight*sizeof(float)); // or GLfloat
float* result = (float*)malloc(texWidth*texHeight*sizeof(float)); // or GLfloat
for (int i = 0; i < texWidth * texHeight; i++) {
data[i] = 2.22;
}
...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
...
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
...
glReadPixels(0, 0, texWidth, texHeight, GL_RGBA, GL_UNSIGNED_BYTE, result);
for (int i = 0; i < 64; i++) {
LOGD("%f", result[i]);
}
现在我想读回值“2.22”,但现在我得到的是一些长浮点值。 (输出就像-188856716075009999660373357998301511680.000000,不是我想要的)。
我也试过用GLubyte作为result数组的类型,得到了颜色值(result[0]是R值,result[1]是G值,result[2]是B值,result[3]是一个值),这不是我想要的。
问题:
- 既然类型是 GL_UNSIGNED_BYTE,我应该使用 GLubyte 作为我的数组类型吗?
- 如何通过 glReadPixels 准确获取 2.22?
- GL_FLOAT可以是GLES中glReadPixels的类型吗?
- 是的。回读格式必须与纹理格式匹配。
- 你不能,因为你没有读回浮点数据。您必须自己从字节值重建它。
- 是,如果纹理是浮点格式纹理(OpenGL ES 3.0 以上版本)
C++代码:
float* data = (float*)malloc(texWidth*texHeight*sizeof(float)); // or GLfloat
float* result = (float*)malloc(texWidth*texHeight*sizeof(float)); // or GLfloat
for (int i = 0; i < texWidth * texHeight; i++) {
data[i] = 2.22;
}
...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
...
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
...
glReadPixels(0, 0, texWidth, texHeight, GL_RGBA, GL_UNSIGNED_BYTE, result);
for (int i = 0; i < 64; i++) {
LOGD("%f", result[i]);
}
现在我想读回值“2.22”,但现在我得到的是一些长浮点值。 (输出就像-188856716075009999660373357998301511680.000000,不是我想要的)。
我也试过用GLubyte作为result数组的类型,得到了颜色值(result[0]是R值,result[1]是G值,result[2]是B值,result[3]是一个值),这不是我想要的。
问题:
- 既然类型是 GL_UNSIGNED_BYTE,我应该使用 GLubyte 作为我的数组类型吗?
- 如何通过 glReadPixels 准确获取 2.22?
- GL_FLOAT可以是GLES中glReadPixels的类型吗?
- 是的。回读格式必须与纹理格式匹配。
- 你不能,因为你没有读回浮点数据。您必须自己从字节值重建它。
- 是,如果纹理是浮点格式纹理(OpenGL ES 3.0 以上版本)