理解glsl语言的gl_FragCoord与u_resolution

1 概念

(1)u_resolution 是画布尺寸,即代表画布宽高

(2)gl_FragCoord:是一个 vec4 类型的变量 (x, y, z, 1/w),其中 x, y 是当前片元的窗口坐标。直译就是片元坐标

2 结合例子理解

如下效果和代码

#ifdef GL_ES
precision mediump float;
#endif
// u_resolution (画布尺寸)
uniform vec2 u_resolution;
void main() {
    vec2 st = gl_FragCoord.xy/u_resolution;
    gl_FragColor = vec4(st.x,st.y,0.0,1.0);
    
}

理解glsl语言的gl_FragCoord与u_resolution_第1张图片 

理解glsl语言的gl_FragCoord与u_resolution_第2张图片

 

如上画布宽高:(950,600)即u_resolution的宽高值是(950,600);

那么gl_FragCoord的取值范围就是 x在(0,950),y在(0,600)

所以vec2 st = gl_FragCoord.xy/u_resolution; st的x和y值都在0.0-1.0之间;

gl_FragCoord.xy/u_resolution在四个角的值为

左下角(0,0)处:x=0/950 y=0/600 st为(0.0,0.0);颜色值为(0.0,0.0,0.0,1.0)黑色

左上角(0,600)处:x=0/950 y600/600 st为(0.0,1.0);颜色值为(0.0,1.0,0.0,1.0)绿色

右上角(950,600)处:x=950/950 y=600/600 st为(1.0,1.0) ;颜色值为(1.0,1.0,0.0,1.0)黄色

右下角(950,0)处:x=950/950 y=0/600 st为(1.0,0.0);颜色值为(1.0,0.0,0.0,1.0)红色

你可能感兴趣的:(前端)