Javascript WebGL:将数据转换为非方形alpha纹理
我对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
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)纹理以外的结果。另外,当我使用“方形”纹理时,效果很好。下面是一个演示:上面的条(某种能量条)应该在每帧中随机填充蓝色(但由于我的问题,它是纯黑色)。你完全正确。我很惊讶没有报告“超出索引”的错误(因为那是个错误)。非常感谢。