javascript - WebGL:INVALID_OPERATION:readPixels:ArrayBufferView 对于尺寸来说不够大

标签 javascript webgl glreadpixels

基本上我有 200 X 200 像素的 Canvas ,一个 20 X 20 X 20 像素的体素。所以我有 100 个体素。当我在 Canvas 上绘图时,我想查看绘制了哪个像素,如果该像素位于其中一个体素内,那么我将显示该体素。

下面的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 不应该是 size = 20 * 20 * 4 = 1600 的 arrayBuffer 吗?由于我只读取 (0,0) 到 (20,20),然后读取 (0, 20) 到 (20,40),因此从 (0,0) 到 (20,20) 的平方将包含 400像素。像素值不应该足以获取所有 RGBA 值吗?

最佳答案

gl.readPixels 的第三个和第四个参数是宽度和高度值。将两个值 endPixelXendPixelX 替换为 endPixelX-startPixelXendPixelY - startPixelY

关于javascript - WebGL:INVALID_OPERATION:readPixels:ArrayBufferView 对于尺寸来说不够大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33559632/

相关文章:

javascript - 我如何使用机器人检查 Discord 中的角色?

javascript - 根据表单选择下拉选项重定向到 URL

javascript - 如何在 Threejs 中使用外部和内部网格对象渲染带有剪裁平面和模板的帽子

ios - glReadPixel 停止使用 iOS6 Beta

firefox - webGL readPixels 和 FireFox 35

javascript - Jquery onselect onchange 单选按钮值

javascript - 捕获无序列表中 anchor 元素的点击

javascript - vec3.unproject()鼠标碰撞问题

textures - webgl -babylonjs 天空盒纹理未显示

python - 如何在Python和OpenGL中使用glReadPixels?