Opengl es GLSL将片段着色器遮罩拟合到顶点坐标

Opengl es GLSL将片段着色器遮罩拟合到顶点坐标,opengl-es,glsl,shader,glsles,Opengl Es,Glsl,Shader,Glsles,我的片段着色器中有一个笑脸面具,它占据了整个窗口(1) 我将较小的坐标传递给顶点着色器,试图将笑脸缩小为较小的框(2)(期望的结果) 但是,结果是(3) 如何使片段着色器适合我传递给顶点着色器的坐标,使其看起来像(2),而不是(3) 下面是相关的代码片段。如果您需要更多代码,请告诉我 --顶点着色器-- --片段着色器-- 谢谢 编辑1: 以下是在前后传递给顶点着色器的两组坐标 编辑2: 感谢Rabbid76提供的解决方案!下面显示了我最终传递到顶点着色器的uv坐标 // locat

我的片段着色器中有一个笑脸面具,它占据了整个窗口(1)

我将较小的坐标传递给顶点着色器,试图将笑脸缩小为较小的框(2)(期望的结果)

但是,结果是(3)

如何使片段着色器适合我传递给顶点着色器的坐标,使其看起来像(2),而不是(3)

下面是相关的代码片段。如果您需要更多代码,请告诉我

--顶点着色器--

--片段着色器--

谢谢

编辑1:

以下是在前后传递给顶点着色器的两组坐标

编辑2:

感谢Rabbid76提供的解决方案!下面显示了我最终传递到顶点着色器的uv坐标

    // location = 0
    GLfloat vertices[] = { 
        -0.8, -0.8, 0.0,
        -0.2, -0.8, 0.0,
        -0.2, -0.2, 0.0,
        -0.8, -0.2, 0.0
    };

    // location = 1
    GLfloat uv[] = { 
        0.0, 0.0,
        1.0, 0.0,
        1.0, 1.0,
        0.0, 1.0
    };

为uv坐标添加其他属性。属性必须在[0.0,1.0]范围内。(0,0左下角和(1,1)右上角。将属性从顶点着色器传递到片段着色器:

#版本300 es
vec3 VP位置中的布局(位置=0);
vec2 vUV中的布局(位置=1);
输出vec2uv;
void main()
{
uv=vUV;
gl_位置=vec4(vPosition,1.0);
} 
使用片段着色器输入
uv
而不是
vec2 uv=gl\u FragCoord.xy/vec2(宽度、高度);

/[…]
在vec2uv中;
void main()
{
//vec2 uv=gl_FragCoord.xy/vec2(宽度、高度);删除
// [...]
}

必须为uv坐标添加单独的属性。uv坐标在[0.0,1.0]范围内。非常感谢!@Ian谢谢。不客气。
#version 300 es
                               
precision mediump float;       

uniform float width;           
uniform float height;          

out vec4 fragColor;            

float Circle(vec2 uv, vec2 p, float r, float blur) {
    float d = length(uv - p);  
    return smoothstep(r, r-blur, d);
} 

void main() {                  
    vec2 uv = gl_FragCoord.xy / vec2(width, height);

    uv -= 0.5;                 
    uv.x *= width / height;
      
    float blur = 0.005;        
      
    float c = Circle(uv, vec2(0., 0.), 0.25, blur);
    c -= Circle(uv, vec2(-0.1, 0.1), 0.05, blur);
    c -= Circle(uv, vec2(0.1, 0.1), 0.05, blur);
    
    float mouth = Circle(uv, vec2(0., 0.), 0.15, blur);
    mouth -= Circle(uv, vec2(0., 0.05), 0.15, blur);
  
    c -= clamp(mouth, 0., 1.); 
  
    fragColor = vec4(vec3(1., 1., 0.) * c, 1.0);
}
    // location = 0
    GLfloat vertices[] = { 
        -0.8, -0.8, 0.0,
        -0.2, -0.8, 0.0,
        -0.2, -0.2, 0.0,
        -0.8, -0.2, 0.0
    };

    // location = 1
    GLfloat uv[] = { 
        0.0, 0.0,
        1.0, 0.0,
        1.0, 1.0,
        0.0, 1.0
    };