Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

【GLSL】波の干渉

See the Pen wave face by aadebdeb (@aadebdeb) on CodePen.

#define PI 3.14159265359
#define TWO_PI PI * 2.0


precision mediump float;

uniform float u_time;
uniform vec2 u_mouse;
uniform vec2 u_resolution;

vec2 getCoord() {
    float m = min(u_resolution.x, u_resolution.y);
    vec2 st = gl_FragCoord.xy / m;
    st = st * 2.0 - u_resolution / m;
    return st;
}

void main(void) {
    vec2 st = getCoord();

    vec2 oscs[3];
    oscs[0] = vec2(0.71, 0.39);
    oscs[1] = vec2(-0.72, 0.6);
    oscs[2] = vec2(0.23, -0.65);


    float v = 0.0;
    for (int i = 0; i < 3; i++) {
        float d = distance(st, oscs[i]);
        v += sin(-d * 20.0 + u_time * 0.01);
    }

    v = clamp(v, -3.0, 3.0);
    v /= 3.0;
    v = (v + 1.0) * 0.5;
    vec3 c1 = vec3(mix(vec3(1.0, 0.3, 1.0), vec3(1.0, 1.0, 1.0), (cos(u_time * 0.00041) + 1.0) * 0.5));[f:id:aa_debdeb:20170419233124p:plain]
    vec3 c2 = vec3(mix(vec3(1.0, 1.0, 0.5), vec3(0.5, 1.0, 1.0), (sin(u_time * 0.00031) + 1.0) * 0.5));
    vec3 c = mix(c1, c2, v);
    gl_FragColor = vec4(c, 1.0);
}
f:id:aa_debdeb:20170419233124p:plain