OpenGL帧缓冲区像素读取疑问:data[0]对应单分量还是三分量?
帧缓冲区像素读取数据格式疑问
帧缓冲区创建代码
glGenFramebuffers(1, &frameBufferObject); glBindFramebuffer(GL_FRAMEBUFFER, frameBufferObject); glGenTextures(1, &frameBufferTexture); glBindTexture(GL_TEXTURE_2D, frameBufferTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32UI, width, height, 0, GL_RGB_INTEGER, GL_UNSIGNED_INT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, frameBufferTexture, 0);
像素读取代码
unsigned int* data=new unsigned int[width*height*3]; glReadPixels(0,0,width,height,GL_RGB_INTEGER,GL_UNSIGNED_INT,data);
问题解答
data[0]仅代表红色分量,原因如下:
- 帧缓冲区附接的纹理格式是
GL_RGB32UI,意味着每个像素的红、绿、蓝三个分量各自占用独立的32位无符号整数空间,是三个分开的unsigned int值。 - 调用
glReadPixels时指定的格式为GL_RGB_INTEGER、类型为GL_UNSIGNED_INT,GL会按照逐分量依次存储的规则写入数据:- 第一个像素的红分量存在
data[0],绿分量在data[1],蓝分量在data[2] - 第二个像素的红分量在
data[3],后续像素以此类推
- 第一个像素的红分量存在
内容的提问来源于stack exchange,提问作者BackSpace7777777
相关产品推荐
相关产品推荐

