我正在使用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);
这是显示的图像:
我无法发布理想的图像,但所有黑条之间应该有一些东西。
我不明白的是,当我尝试预设值时,它会起作用,如下面的代码所示:
这是显示的图像。
这不是理想的输出,而只是设置值如何工作的一个例子。
为什么我的图像中间缺失,我该怎么做才能修复它?谢谢!
答案 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?