46 lines
1.4 KiB
GLSL
46 lines
1.4 KiB
GLSL
precision highp float;
|
|
|
|
varying highp vec2 vTextureCoord;
|
|
varying highp vec4 vNormal;
|
|
varying highp vec3 vPosition;
|
|
|
|
uniform sampler2D uSampler;
|
|
|
|
void make_kernel(inout vec4 n[9], sampler2D tex, vec2 coord)
|
|
{
|
|
float w = 1.0 / 640.;
|
|
float h = 1.0 / 640.;
|
|
|
|
n[0] = texture2D(tex, coord + vec2( -w, -h));
|
|
n[1] = texture2D(tex, coord + vec2(0.0, -h));
|
|
n[2] = texture2D(tex, coord + vec2( w, -h));
|
|
n[3] = texture2D(tex, coord + vec2( -w, 0.0));
|
|
n[4] = texture2D(tex, coord);
|
|
n[5] = texture2D(tex, coord + vec2( w, 0.0));
|
|
n[6] = texture2D(tex, coord + vec2( -w, h));
|
|
n[7] = texture2D(tex, coord + vec2(0.0, h));
|
|
n[8] = texture2D(tex, coord + vec2( w, h));
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
vec4 n[9];
|
|
make_kernel( n, uSampler, vTextureCoord);
|
|
|
|
vec4 sobel_edge_h = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);
|
|
vec4 sobel_edge_v = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);
|
|
vec4 sobel = sqrt((sobel_edge_h * sobel_edge_h) + (sobel_edge_v * sobel_edge_v));
|
|
|
|
if ((1. - sobel.r) + (1. - sobel.g) + (1. - sobel.b) < 2.5)
|
|
gl_FragColor = vec4(1.0 - sobel.rgb, 1.0 );
|
|
else {
|
|
vec3 n = normalize(vec3(-50., 100., 50.) - vPosition);
|
|
float diffuse = max(dot(normalize(vNormal.xyz), n), 0.);
|
|
float specular = pow(
|
|
max(dot(
|
|
reflect(n, normalize(vNormal.xyz)),
|
|
normalize(vec3(0., 0., -50.) - vPosition)),
|
|
0.), 10.);
|
|
gl_FragColor = vec4((diffuse * 0.8) + (vec3(0.2)) + (specular * vec3(1.)), 1.0);
|
|
}
|
|
} |