半透明精灵在通过片段着色器后不透明

时间:2013-11-16 06:42:33

标签: c# .net shader sfml

我正在使用SFML.net 2.1。 我已经成功实现了一个片段着色器,它根据团队颜色改变了精灵的颜色。

Example color change

但是,当我将完整精灵的颜色设置为半透明颜色时

让我们说RGBA(255,255,255,100)

生成的精灵不像预期的那样是半透明的,但保持完全不透明。 如果我注释掉着色器,我的代码就可以工作,但只要着色器处于活动状态,它就无法正常工作。

The image is not transparent!

这是我的着色器代码,以防可能出现问题:

uniform sampler2D texture;

uniform vec4 sourceColor;
uniform vec4 targetColor;

uniform float tolerance;

void main()
{
    // lookup the pixel in the texture
    vec4 pixel = texture2D(texture, gl_TexCoord[0].xy);

    if(abs(pixel.r - sourceColor.r) < tolerance && abs(pixel.g - sourceColor.g) < tolerance && abs(pixel.b - sourceColor.b) < tolerance)
    {
        gl_FragColor = targetColor;
    }
    else
    {
        gl_FragColor = pixel;
    }
}

非常感谢任何帮助。

修改

经过进一步调查,在绘制对象时,似乎没有考虑对象的整个“颜色”字段,而不仅仅是alpha通道

EDIT2:

我通过将每个帧的当前颜色传递给着色器找到了解决此问题的方法。但是,我很想知道它应该如何完成。

1 个答案:

答案 0 :(得分:0)

你实际上是将值设置为这样的整数吗?

而不是(255,255,255,100),尝试(1,1,1,0.4)