WebGL toonShader

93 阅读1分钟

stringkun.github.io/DemoShow/ex…

image.png

varying vec3 vNormal;
void main() {
    vNormal = normalize(normalMatrix * normal);
    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
uniform vec3 light;
varying vec3 vNormal;
uniform vec3 color;
void main() {
    //这个是灯光与法线的dot
    float diffuse = dot(normalize(light), vNormal);
    float dir = length(vNormal * vec3(0.0, 0.0, 1.0));
    if (dir < 0.5) {
        dir = 0.0;
        gl_FragColor = vec4(dir, dir, dir, 1.0);
    }
    else {
        //与等的角度越小的 diffuse越大 越亮
        if (diffuse > 0.8) {
            diffuse = 1.0;
        }
        else if (diffuse > 0.5) {
            diffuse = 0.6;
        }
        else if (diffuse > 0.2) {
            diffuse = 0.4;
        }
        else {
            diffuse = 0.2;
        }
        gl_FragColor = vec4( color* diffuse, 1.0);
    }

}