我正在重新使用http://www.html5rocks.com/en/tutorials/webgl/webgl_fundamentals/webgl/webgl-2d-image.html中的简单示例来加载一个16 * 16 png,它是完全黑色的,除了那里的一个点,我使用paint将RGB值设置为0,0,202。
在上面的例子中,我还将片段着色器更改为
vec4 x=floor(texture2D(u_image,v_texCoord).rgba*255.0);
if(x==vec4(48.0,0.0,220.0,255))
{ gl_FragColor = vec4(1.0,vec2(0.0),1.0);}
else
{ gl_FragColor = vec4(vec3(x),1.0);}
由于某些原因,我得到RGB = 48,0,220而不是最初预期的0,0,202?
这是我可以在本地保存的png ...
答案 0 :(得分:2)
我自己发现了这个问题。
WebGL确实使用预乘的alpha值并应用了一些色彩空间转换。
可以使用以下方法禁用预乘alpha gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,false);
可以使用以下方法禁用色彩空间转换: gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,false);
您需要在上传纹理之前调用这两个函数。