【问题标题】:GLSL/SFML - Only make portion of texture alphaGLSL/SFML - 只制作部分纹理 alpha
【发布时间】:2014-04-03 04:30:09
【问题描述】:

我正在尝试获取当前纹理的一部分并将其设置为 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;
}

【问题讨论】:

    标签: c# glsl sfml


    【解决方案1】:

    纹理坐标不是以像素为单位,而是在 0.0 到 1.0 之间给出。

    gl_TexCoord[0].xy;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多