基本上我有200×200像素画布,一个20×20×20像素的体素。所以我有100个体素。当我在画布上画画时,我想看看哪个像素被绘制,并且如果该像素位于体素的一个像素内,那么我将显示该体素。WebGL:INVALID_OPERATION:readPixels:ArrayBufferView尺寸不够大
voxelWidthPixel下面是体素宽度的像素数,voxelHeightPixel是体素高度的像素数。我使用一个循环,以便从(0,0)到(20,20),然后从(0,20)到(20,40)然后从(0,40)到(20,60)读取像素值,并最终到(180,160)到(200,180),然后是(180,180)到(200,200)。
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是arrayBuffer大小= 20 * 20 * 4 = 1600?由于我只是从(0,0)到(20,20)然后从(0,20)到(20,40)读数,从(0,0)到(20,20)的平方将保持400像素。不应该像素值足以获得所有RGBA值
第三和替换这两个值readPixels第四参数是宽度和高度,你的变量endPixelX和endPixelY的名字会建议您所提供的读取错误的尺寸。这将解释错误,但没有更多信息,不可能确定这是否是问题。 – Blindman67
@ Blindman67如果宽度和高度是帆布的?难道它不能像画布的一部分?我将画布分成20 X 20px的小部分,并给出这个小部分的bottomLeft和topRight坐标。 – spuemaacne
这两个值应该是20和20,它应该是'endPixelX-startPixelX'和'endPixelY - startPixelY'我有这个文档,宽度和高度是需要的。 – Blindman67