片段着色器:纹理的颜色值错误

时间:2015-07-19 11:16:17

标签: textures webgl opengl-es-2.0

我正在重新使用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 ... enter image description here

1 个答案:

答案 0 :(得分:2)

我自己发现了这个问题。

WebGL确实使用预乘的alpha值并应用了一些色彩空间转换。

可以使用以下方法禁用预乘alpha gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,false);

可以使用以下方法禁用色彩空间转换: gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,false);

您需要在上传纹理之前调用这两个函数。

感谢此帖http://games.greggman.com/game/webgl-image-processing/

相关问题