2015-11-06 194 views
0

基本上我有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值

+0

第三和替換這兩個值readPixels第四參數是寬度和高度,你的變量endPixelX和endPixelY的名字會建議您所提供的讀取錯誤的尺寸。這將解釋錯誤,但沒有更多信息,不可能確定這是否是問題。 – Blindman67

+0

@ Blindman67如果寬度和高度是帆布的?難道它不能像畫布的一部分?我將畫布分成20 X 20px的小部分,並給出這個小部分的bottomLeft和topRight座標。 – spuemaacne

+0

這兩個值應該是20和20,它應該是'endPixelX-startPixelX'和'endPixelY - startPixelY'我有這個文檔,寬度和高度是需要的。 – Blindman67

回答

1

gl.readPixels的第三個和第四個參數是寬度和高度值。 endPixelXendPixelXendPixelX-startPixelXendPixelY - startPixelY