【问题标题】:Fragment Shader: wrong color value from texture片段着色器:纹理的颜色值错误
【发布时间】:2015-07-19 11:16:16
【问题描述】:

我正在重新使用来自http://www.html5rocks.com/en/tutorials/webgl/webgl_fundamentals/webgl/webgl-2d-image.html 的简单示例来加载一个 16*16 的 png,它完全是黑色的,除了那里的一个点,我使用绘画将 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,你可以保存在本地...

【问题讨论】:

  • 为什么这个问题没有任何评论就得到-1???

标签: textures webgl opengl-es-2.0


【解决方案1】:

我自己发现了问题。

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/

【讨论】:

    猜你喜欢
    • 2011-10-04
    • 2013-09-17
    • 1970-01-01
    • 2016-07-28
    • 2016-03-06
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多