关于javascript:WebGL:INVALID_OPERATION:readPixels:ArrayBufferView的尺寸不足

WebGL: INVALID_OPERATION: readPixels: ArrayBufferView not large enough for dimensions

基本上我有200 X 200 px的画布,即20 X 20 X 20 px的体素。所以我有100个体素。当我在画布上绘制时,我想查看绘制了哪个像素,并且如果该像素在一个体素中,那么我将显示该体素。

下面的voxelWidthPixel是体素宽度的像素数,而voxelHeightPixel是体素高度的像素数。我正在使用循环,因此我读取的像素值从(0,0)到(20,20),然后是(0,??20)到(20,40),然后是(0,??40)到(20,60),最终达到(180,160)到(200,180),然后(180,180)到(200,200)。

1
2
3
4
5
6
7
for (var i =bottomleft.x, px =0 ; i < topRight.x; i = i + voxelSize, px = px + pixWidthVoxel){
    for (var j = bottomleft.y, py =0 ; j < topRight.y ; j = j + voxelSize, py = py + pixHeightVoxel){

        var pixelValues = new Uint8Array(voxelWidthPixel * voxelHeightPixel * 4);
        gl.readPixels( startPixelX, startPixelY, endPixelX, endPixelY, gl.RGBA, gl.UNSIGNED_BYTE, pixelValues);
    }
}

不应将pixelValues设置为size = 20 * 20 * 4 = 1600的arrayBuffer吗?而且由于我只读从(0,0)到(20,20),然后是(0,??20)到(20,40),因此从(0,0)到(20,20)的平方将成立400像素pixelvalues是否足以获取所有RGBA值?


gl.readPixels的第3和第4个参数是宽度和高度值。用endPixelX-startPixelXendPixelY - startPixelY

替换两个值endPixelXendPixelX