簡體   English   中英

如何使用glReadPixels獲取浮點值? [Android NDK 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 [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類型?
  1. 是。 回讀格式必須與紋理格式匹配。
  2. 您不能,因為您沒有回讀浮點數據。 您必須根據字節值自己重建它。
  3. 是的,如果紋理是浮動格式紋理(從OpenGL ES 3.0開始)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM