GLSL / SFML - 仅制作纹理alpha的一部分

时间:2014-03-02 06:13:20

标签: c# glsl sfml

我正在尝试获取当前纹理的一部分并将其转换为50%透明。我发送四个值,表示我想透明的矩形。然而,似乎每次都将coord.x / coord.y设置为(0,0),当我发送任何以(0,0)开头的矩形时,整个图像都是透明的。

我仍然是GLSL的新手,并且可能接近这个错误。任何关于正确方法的指针都将非常感谢!

中发送的值
sprite.Shader.SetParameter("texture", sprite.Texture);
sprite.Shader.SetParameter("x1", 0);
sprite.Shader.SetParameter("x2", 5);
sprite.Shader.SetParameter("y1", 0);
sprite.Shader.SetParameter("y2", sprite.Height - 1); // sprite.Height = 32

transparency.frag

uniform sampler2D texture;

uniform float x1;
uniform float x2;
uniform float y1;
uniform float y2;

void main() {
    vec2 coord = gl_TexCoord[0].xy;

    vec4 pixel_color = texture2D(texture, coord);

    if ((coord.x > x1) && (coord.x < x2) && (coord.y > y1) && (coord.y < y2))
    {
        pixel_color.a -= 0.5;
    }

    gl_FragColor = pixel_color;
}

1 个答案:

答案 0 :(得分:0)

纹理坐标不是像素,而是在0.0和1.0之间给出。

gl_TexCoord[0].xy;

此调用将返回一个值为0.0到1.0的vector2f。您正在检查标准化纹理坐标的像素坐标。要解决此问题,您可以缩放纹理坐标,也可以规范化像素坐标。