Daily Creative Coding

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

ライトで照らされたサイン波の表面

See the Pen sin surface with a light by aadebdeb (@aadebdeb) on CodePen.

#define PI 3.14159265359
#define TWO_PI PI * 2.0
#define HALF_PI PI / 2.0


precision mediump float;

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


void main(void) {
    vec2 st = (gl_FragCoord.xy * 2.0 - u_resolution) / min(u_resolution.x, u_resolution.y);
    vec2 mouse = (u_mouse * 2.0 - u_resolution) / min(u_resolution.x, u_resolution.y);

    float d = length(st);
    vec2 dir = normalize(st);

    float theta = d * 30.0 - u_time * 0.006;
    float v = sin(theta);
    vec3 normal = normalize(vec3(dir * cos(-theta), 1.0));

    vec3 light = vec3(mouse, 2.0);

    vec3 vecToLight = normalize(light - vec3(st, v * 1.0));
    vec3 color = mix(vec3(0.5, 0.3, 0.2), vec3(0.1, 0.2, 0.8), (v + 1.0) * 0.5);
    color = color + vec3(0.7, 0.7, 0.7) * max(dot(vecToLight, normal), 0.0);


    gl_FragColor = vec4(color, 1.0);
}
f:id:aa_debdeb:20170509095724p:plain