gl_FragCoord tergug naar de inleiding zie The Book of Shaders hoofdstuk 3
gl_FragCoord bevat de relatieve coordinaten (x, y, z, 1/w) van de pixels in een fragment
Deze waarden worden genormaliseerd door ze te delen door de resolutie van het canvas (uniform vec2 u_resolution)
vec2 st = gl_FragCoord.xy/u_resolution;
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
void main() {
vec2 st = gl_FragCoord.xy/u_resolution;
// gl_FragColor = vec4(vec3(st.x),1.0); // geeft, in x richting, een overgang van zwart naar wit
gl_FragColor = vec4(st.x,st.y,0.0,1.0);
}
Een shader met bewegende kleurpatronen met de uniform float u_time
Als voorbeeld een schets met abs(sin(u_time)/st.x) in het rode kanaal en st.y in het groene kanaal van de gl_FragColor vector.
In het canvas beweegt zich over het geel-rode veld, een zwart-groen veld van rechts naar links en terug.st.x (staat in de noemer) heeft afhankelijk van de pixelpositie waarden tussen de 0.0 en 1.0, de sinus beweegt zich eerst van 0.0 naar 1.0
abs(sin(u_time)/st.x zal aanvankelijk veel groter zijn dan 1 !! in glsl worden deze waarden genormaliseerd naar 1
In het dalende deel, als de sinus van 1 naar 0 gaat, gaat het rode kanaal van 0 naar 1 en het zwart-groene beeld zal zich weer naar rechts terug trekken.
regel 11 in- en regel 14 uitgeschakeld | regel 12 in- en regel 14 uitgeschakeld |
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
uniform float u_time;
void main() {
vec2 st = gl_FragCoord.xy/u_resolution;
// gl_FragColor = vec4(1.0, st.y, 0.0, 1.0);
// gl_FragColor = vec4(0.0, st.y, 0.0, 1.0);
// gl_FragColor = vec4(0.0, abs(sin(u_time)/st.y), 0.0, 1.0);
gl_FragColor = vec4(abs(sin(u_time)/st.x), st.y, 0.0, 1.0);
}