【问题标题】:How can I get float values using glReadPixels? [Android NDK es3.0]如何使用 glReadPixels 获取浮点值? 【安卓NDK es3.0】
【发布时间】:2015-07-03 03:54:51
【问题描述】:

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[0] 是 R 值,result[1] 是 G 值,result[2] 是 B 值,result[3] 是 A 值),这不是我想要的。

问题:

  1. 既然类型是 GL_UNSIGNED_BYTE,我应该使用 GLubyte 作为我的数组类型吗?
  2. 如何通过 glReadPixels 准确获取 2.22?
  3. GL_FLOAT 可以是 GLES 中 glReadPixels 的类型吗?

【问题讨论】:

    标签: android opengl-es android-ndk opengl-es-3.0


    【解决方案1】:
    1. 是的。回读格式必须与纹理格式匹配。
    2. 你不能,因为你没有读回浮点数据。您必须自己根据字节值重建它。
    3. 是的,如果纹理是浮点格式纹理(OpenGL ES 3.0 及更高版本)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 2016-09-17
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多