@@ -8,14 +8,15 @@ uniform vec2 u_pointB;
88uniform vec2 u_pointC;
99uniform float u_time;
1010
11+ uniform vec3 u_color1;
12+ uniform vec3 u_color2;
13+
1114bool withTime = false;
12- float lineDarken = 0.5 ;
13- float noiseStrength = 0.5 ; // 0.25
14- float distanceStrength = 0.2 ;
15+ float noiseStrength = 0.75 ;
16+ float darkenStrength = 0.5 ;
17+ float distanceStrength = 0.25 ;
1518
1619vec3 bg = vec3 (0.0 );
17- vec3 rColor = vec3 (1.000 , 0.600 , 0.600 );
18- vec3 gColor = vec3 (0.086 , 0.858 , 0.768 );
1920
2021highp float rand(vec2 co) {
2122 highp float a = 12.9898 ;
@@ -27,7 +28,7 @@ highp float rand(vec2 co) {
2728}
2829
2930// Return minimum distance between line segment vw and point p
30- float getColorFromDistance (vec2 v, vec2 w, vec2 p) {
31+ float getDistance (vec2 v, vec2 w, vec2 p) {
3132 vec2 l = v - w;
3233 float l2 = dot (l, l); // i.e. |w-v|^2 - avoid a sqrt
3334 if (l2 == 0.0 ) return distance (p, v); // v == w case
@@ -37,7 +38,8 @@ float getColorFromDistance(vec2 v, vec2 w, vec2 p) {
3738 // We clamp t from [0,1] to handle points outside the segment vw.
3839 float t = clamp (dot (p - v, w - v) / l2, 0.0 , 1.0 );
3940 vec2 projection = v + t * (w - v); // Projection falls on the segment
40- return 1.0 - pow (distance (p, projection), distanceStrength);
41+ // return pow(distance(p, projection), distanceStrength);
42+ return pow (distance (p, projection), distanceStrength);
4143}
4244
4345float getPosition(vec2 p1, vec2 p2, vec2 px) {
@@ -51,18 +53,18 @@ void main() {
5153 vec2 pb = u_pointB.xy / u_resolution.xy;
5254 vec2 pc = u_pointC.xy / u_resolution.xy;
5355
54- float r = getColorFromDistance(pa, pb, px);
55- float g = getColorFromDistance(pa, pc, px);
56+ float d1 = getDistance(pa, pb, px);
57+ float c1 = 1.0 - getDistance(pa, pb, px);
58+ float d2 = getDistance(pa, pc, px);
59+ float c2 = 1.0 - getDistance(pa, pc, px);
5660
57- bool rOrNot = getPosition(pa, pb, px) > 0.0 ;
58- bool gOrNot = getPosition(pa, pc, px) > 0.0 ;
61+ bool isBeyondc1 = getPosition(pa, pb, px) > 0.0 ;
62+ bool isBeyondc2 = getPosition(pa, pc, px) > 0.0 ;
5963
6064 float noiseFactor = noiseStrength * rand(px) + 1.0 - noiseStrength;
61- float darkFactor = rOrNot || ! gOrNot ? lineDarken : 1.0 ;
65+ float darkFactor = isBeyondc1 || ! isBeyondc2 ? ( 1.0 - (darkenStrength * max (c1, c2))) : 1.0 / (d1 * d2) ;
6266
63- vec3 color1 = r * rColor;
64- vec3 color2 = g * gColor;
65- vec3 color = color1 + color2;
67+ vec3 color = c1 * u_color1 + c2 * u_color2;
6668
6769 gl_FragColor = vec4 (color * darkFactor * noiseFactor, 1.0 ); // R,G,B,A
6870}
0 commit comments