Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebGL:将数据转换为非方形alpha纹理_Javascript_Webgl_Textures - Fatal编程技术网

Javascript WebGL:将数据转换为非方形alpha纹理

Javascript WebGL:将数据转换为非方形alpha纹理,javascript,webgl,textures,Javascript,Webgl,Textures,我对webGL有一个奇怪的问题 我使用的是一个动态生成的纹理,其中只有alpha通道起作用。 代码如下: var texture = new Uint8Array(ar); // ar is my array gl.bindTexture(gl.TEXTURE_2D, this.transparencyTexture); gl.texImage2D(gl.TEXTURE_2D, 0, gl.ALPHA, array.length, array[0].length, 0, gl.ALPHA, g

我对webGL有一个奇怪的问题

我使用的是一个动态生成的纹理,其中只有alpha通道起作用。 代码如下:

var texture  = new Uint8Array(ar); // ar is my array
gl.bindTexture(gl.TEXTURE_2D, this.transparencyTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.ALPHA, array.length, array[0].length, 0, gl.ALPHA, gl.UNSIGNED_BYTE, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);   
我总是使用POT数组的“宽度”和“高度”,但每当“宽度”和“高度”不起作用时。所以它目前只适用于正方形

可以做些什么

编辑:


在JSFIDLE中,js的第76行不正确:

ar.push(array[x][(array.length - 1) - y] ?  128 : 0);
我认为这应该是:

ar.push(array[x][(array[0].length - 1) - y] ?  128 : 0);

看起来像是一个浏览器错误,但是如果没有更多的细节就很难知道。例如,你的纹理坐标是什么?您从
gl.getError()
中得到了什么?它在视觉上是如何显示的?只是好奇,但是
array.length,array[0]。length
?那么您有一个JavaScript中的二维数组?这与ar有什么关系?我提供了正确的坐标(也用于其他纹理)。gl.getError()返回0。它只显示为vec4(0,0,0,0)像素/片段。我正确地从二维数组生成ar。我检查了ar长度,它等于array.length*array[0].length。即使我生成的是错误的(我没有),它也会产生100%的vec4(0,0,0,0)纹理以外的结果。另外,当我使用“方形”纹理时,效果很好。下面是一个演示:上面的条(某种能量条)应该在每帧中随机填充蓝色(但由于我的问题,它是纯黑色)。你完全正确。我很惊讶没有报告“超出索引”的错误(因为那是个错误)。非常感谢。