我仍在努力从片段着色器中读取像素,有一些问题需要解决。 我知道 gl_FragColor 返回 vec4 表示 RGBA,即 4 个通道。 接着,我使用 glReadPixels 读取 FBO 并将其写入数据。
GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
这个功能可以正常工作,但速度存在问题。我想只读取RGB而忽略alpha通道。我尝试了:
GLubyte *pixels = new GLubyte[640*480*3];
glReadPixels(0, 0, 640,480, GL_RGB, GL_UNSIGNED_BYTE, pixels);
尝试了替换,但并没有起作用。我猜是因为gl_FragColor返回了4个通道,也许我需要在此之前进行一些处理?实际上,由于我的返回图像(gl_FragColor)是灰度的,所以我做了类似于以下的操作:
float gray = 0.5 //or some other values
gl_FragColor = vec4(gray,gray,gray,1.0);
有没有更高效的方法使用glReadPixels而不是使用前4个通道的方法?有什么建议吗?顺便说一句,这是OpenGL ES 2.0代码。