未渲染使用像素数据的webgl纹理

未渲染使用像素数据的webgl纹理,webgl,textures,Webgl,Textures,在webgl中使用像素数据绘制纹理时,不会渲染纹理。对象显示为白色。有人能告诉我下面代码中的错误吗 function handleLoadedTexture(texture ) { gl.bindTexture(gl.TEXTURE_2D, texture); gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 16,16,0, gl.RGBA, g

在webgl中使用像素数据绘制纹理时,不会渲染纹理。对象显示为白色。有人能告诉我下面代码中的错误吗

 function handleLoadedTexture(texture ) {
    gl.bindTexture(gl.TEXTURE_2D, texture);
    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 16,16,0, gl.RGBA, gl.UNSIGNED_BYTE, texture.data);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
    gl.bindTexture(gl.TEXTURE_2D, null);
    try{
    }
    catch(e){       
            console.log("Error : "+ e.name + "\n"+ e.message);
            console.log(gl.getError());
    }
}


var neheTexture;
var data;
function initTexture() {
    neheTexture = gl.createTexture();

    data =[];
    for(var i=0;i<256*4;i++)
    {       
            if(i%4==0 || i%4==3)
                    data[i] = 1;
            else data[i] =0;
    }
    neheTexture.data =  new Uint8Array(data);

}
函数handleLoadedTexture(纹理){
gl.bindTexture(gl.TEXTURE_2D,纹理);
gl.pixelStorei(gl.UNPACK\u FLIP\u Y\u WEBGL,真);
gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,16,16,0,gl.RGBA,gl.UNSIGNED_字节,TEXTURE.data);
gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MAG\u过滤器,gl.NEAREST);
gl.texParameteri(gl.TEXTURE\u 2D,gl.TEXTURE\u MIN\u过滤器,gl.NEAREST);
gl.bindTexture(gl.TEXTURE_2D,空);
试一试{
}
第(e)款{
console.log(“错误:+e.name+”\n“+e.message”);
console.log(gl.getError());
}
}
var neheTexture;
var数据;
函数initTexture(){
neheTexture=gl.createTexture();
数据=[];

对于(var i=0;i而言,这个问题几乎肯定存在于您的绘图代码中,因此请也发布这个问题,但有一点我想指出:

您正在使用设置为1的红色和alpha通道初始化纹理,但我很确定这并没有达到您认为应该达到的效果。这样的纹理数据以字节为单位进行描述,其值范围为0-255。这意味着1,而不是您可能认为的“全强度”,实际上是1/256强度(从0到1的比例为0.004)。这意味着您的代码生成的纹理几乎完全透明,只有轻微的红色

如果您想要完全不透明的红色,您实际上需要这样做您的循环:

for(var i=0; i<256*4; i++) {       
        if(i%4==0 || i%4==3)
            data[i]=255;
        else 
            data[i]=0;
}

for(var i=0;i显示用于绘制对象的代码。非常感谢..现在已解决..我感到困惑,因为着色器中的RGB值为0到1。