0
我正在尝试使用WebGL将场景渲染到帧缓冲区,并查看指定像素(被单击的像素)的颜色值。问题是当我尝试使用gl.readPixels获取所有像素的像素数据,但(0,0)返回空值(0,0,0,0)时。 (0,0)像素(左上角)返回预期的值,这是帧缓冲区使用的清晰颜色。这里是我使用的代码的主要部分:WebGL Framebuffer ClearColor Only仅影响(0,0)像素
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.viewport(0, 0, canvas.width, canvas.height);
gl.clearColor(1.0, 1.0, 1.0, 1.0);
gl.clearDepth(1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// render code goes here
var pixelData = new Uint8Array(4);
gl.readPixels(screenPositionX, screenPositionY, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixelData);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
如果我使用gl.readPixels上渲染的场景,我得到正确的结果,而不是当我使用它的帧缓存。我想这意味着我可以渲染帧缓冲区,然后使用gl.readPixels,但是我不希望这样做,因为帧缓冲区不是为了被看到而是用于数据收集。任何信息或建议?
编辑: 我找到了解决方案,并在下面发布。
您是否设置了视口? – 2014-12-03 09:27:37
我曾尝试过使用和不使用gl.viewport并获得了相同的结果,但我会继续并更新上面的代码以显示该代码。 – user4319280 2014-12-03 16:02:42
你可以显示你添加帧缓冲的附件吗?帧缓冲区只是附件(渲染缓冲区和/或纹理)的集合。渲染缓冲区和纹理是你想要读取的像素。 – gman 2014-12-05 02:29:46