WebGL Framebuffer ClearColor仅影响(0,0)像素

时间:2014-12-03 09:26:03

标签: javascript opengl-es webgl framebuffer fbo

我正在尝试使用WebGL将场景渲染到帧缓冲区并查看指定像素(单击的像素)的颜色值。问题是当我尝试使用gl.readPixels所有像素获取像素数据但(0,0)返回空值(0,0,0,0)。 (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,但我不想这样做,因为帧缓冲区不是要被看到而是用于数据收集。有任何信息或建议吗?

编辑: 我找到了解决方案并将其发布在下面。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,这是其中一个愚蠢的错误。当我附加颜色附件的纹理时,我附加的纹理只有1x1像素。这可以解释为什么(0,0)坐标是唯一获得准确数据的坐标。所有其他像素都被认为超出了纹理的范围。一旦我将纹理大小固定到画布的大小,一切都有效。感谢gman让我指向正确的方向查看附件。