我正在尝试获取当前纹理的一部分并将其转换为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;
}
答案 0 :(得分:0)
纹理坐标不是像素,而是在0.0和1.0之间给出。
gl_TexCoord[0].xy;
此调用将返回一个值为0.0到1.0的vector2f。您正在检查标准化纹理坐标的像素坐标。要解决此问题,您可以缩放纹理坐标,也可以规范化像素坐标。