De lengte van de pixelvector invoeren in de fract() functie. zie ook The Book of shaders hoofdstuk 7 terug naar de inleiding
Het artikel bevat de shaders shader 2 shader 3 shader 4
Met float pct = fract(d*8.0); (regel 14) verschijnen er 8 bogen van 0 t/m 90 graden en 3 kortere bogen.
het toevoegen van st*2.0 - 1.0; (regel 11)
met de vectorlengte d * 8.0 invoeren in fract dus "fract(d*8.0)" ontstaan 8 volledige cirkels.
In regel 13 wordt de vectorlengte met de stelling van pythagoras berekend en heeft dus hetzelfde effect als de code in regel 12.
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
void main(){
vec2 st = gl_FragCoord.xy/u_resolution.xy;
// vec2 st = (gl_FragCoord.xy * 2.0 - u_resolution.xy)/u_resolution.y;
// st = st *2.-1.0;
float d= length(st);
// float d = sqrt(st.x*st.x + st.y*st.y);
float pct = fract(d);
// float pct = fract(d*8.0);
// float pct = fract(length(st*16.0-8.0));
gl_FragColor = vec4(vec3(pct),1.0);
}
Vier cirkels in de vier kwadranten
cirkels in het eerste kwadrant
vanuit dit punt, getoond.
cirkels in het eerste en derde kwadrant
In het derde kwadrant zijn x en y negatief door float d = length((st)-0.5) * length((st)+0.5); komen er ook cirkels in het derde kwadrant (regel 13 ingeschakeld)
cirkels in de vier kwadranten.
(regel 14 ingeschakeld)
acht bogen van 0 t/m 90 graden in de vier kwadranten
Door regel 18 in te schakelen krijgt de shader een groen kleurtje.
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
void main(){
vec2 st = gl_FragCoord.xy/u_resolution.xy;
st = st *2.-1.0; // Zo komt het (0,0) punt in het midden van het canvas
// float d = length((st)-0.5);
// float d = length((st)-0.5) * length((st)+0.5);
float d = length(abs(st)-0.5);
// float d = length(abs(st)-1.0);
float pct = fract(d*8.0);
gl_FragColor = vec4(vec3(pct),1.0);
// gl_FragColor = vec4(pct*(vec3(0.078,0.500,0.262)),1.0);
}
zie het smoothstep() artikel
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
uniform float u_time;
void main(){
vec2 st = (gl_FragCoord.xy * 2.0 - u_resolution.xy)/u_resolution.y;
// float d = length(abs(st)-0.180) * length(abs(st)-0.840);
// float d = length(abs(st)-0.252) / length(abs(st)-0.344);
// float d = length(abs(st)-0.180) + length(abs(st)-0.840);
float d = length(abs(st)-0.564) - length(abs(st)-0.832);
float pct = fract(d*8.);
// float pct = fract(d*sin(u_time/5.)*8.);
gl_FragColor = pct+vec4(vec3(0.500,0.006,0.218),1.0);
// gl_FragColor = pct+vec4(vec3(abs(sin(u_time/2.)*2.),0.3,abs(cos(u_time/2.000))),1.0);
}
De zwart naar grijs gradient in de cirkel ontstaat door "d' aboluut te maken (regel 13)
shader 4
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 u_resolution;
void main() {
vec2 st = (gl_FragCoord.xy * 2.0 - u_resolution.xy)/u_resolution.y;
float d = length(st);
d = d - 0.500;
d = abs(d);
// d = fract(d*3.056);
gl_FragColor = vec4(vec3(d),1.0);
}