创建WebGL纹理会切断一些数据

时间:2016-08-03 20:54:42

标签: javascript image-processing webgl

我正在使用WebGL并尝试使用多个图像创建一个纹理,所有图像都由浮点数组成,然后我将其转换为RGBA。

这是我的代码:

var dataTexture = new Uint8Array(array.length*4);
for(var i=0; i<array.length; i+=4)
{
    dataTexture[i] = 255*parseFloat(array[i/4]);
    dataTexture[i+1] = 255*255*parseFloat(array[i/4]);
    dataTexture[i+2] = 255*255*255*parseFloat(array[i/4]);
    dataTexture[i+3] = 255;
}

gl.bindTexture(gl.TEXTURE_2D, self.mTexture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 512, 512, 0, gl.RGBA, gl.UNSIGNED_BYTE, dataTexture);      
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);

gl.drawArrays(gl.TRIANGLES, 0, 6);

这是显示的图像:

我无法发布理想的图像,但所有黑条之间应该有一些东西。

我不明白的是,当我尝试预设值时,它会起作用,如下面的代码所示:

这是显示的图像。

这不是理想的输出,而只是设置值如何工作的一个例子。

为什么我的图像中间缺失,我该怎么做才能修复它?谢谢!

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你在这里要做什么。

dataTexture[i] = 255*parseFloat(array[i/4]);
dataTexture[i+1] = 255*255*parseFloat(array[i/4]);
dataTexture[i+2] = 255*255*255*parseFloat(array[i/4]);
dataTexture[i+3] = 255;

您可以在Uint8Array元素中放置的最大值是255.那么array条目的范围是多少,因为您将它们乘以65025然后乘以16581375

array也是由文字构成的吗?否则你为什么要调用parseFloat?