0

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);

}
4

1 に答える 1

2

問題はほぼ確実に描画コードにあるので、それも投稿してください。ただし、指摘したいことが1つあります。

赤とアルファのチャンネルを1に設定してテクスチャを初期化していますが、それが思ったとおりに機能していないことは間違いありません。このようなテクスチャデータはバイト単位で記述され、値の範囲は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;
}
于 2012-08-10T21:12:40.077 に答える