From 34d6863a4b13ec0efb50b632e487a7874e9469a4 Mon Sep 17 00:00:00 2001 From: Julian Date: Tue, 28 Jan 2020 17:08:41 +0100 Subject: [PATCH] brute force specular reflection --- index.html | 35 ++++++++++--------- src/main.ts | 97 ++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 104 insertions(+), 28 deletions(-) diff --git a/index.html b/index.html index c4c42a6..98d1ee5 100644 --- a/index.html +++ b/index.html @@ -98,6 +98,7 @@ varying vec3 v_fragPos; varying vec2 v_uv; + uniform vec3 eyePos; uniform sampler2D displace_map; vec3 lightPos = vec3(0.,0.,10.); //should be an directional light @@ -111,10 +112,10 @@ //calculate normal float gridPointDelta = (1. / 256.); vec3 currPoint = vec3(0.0,0.0,displace.x); - vec3 right = vec3(gridPointDelta,0.0,texture2D(displace_map,vec2(v_uv.x + gridPointDelta,v_uv.y)).x); - vec3 left = vec3(-gridPointDelta,0.0,texture2D(displace_map,vec2(v_uv.x - gridPointDelta,v_uv.y)).x); - vec3 up = vec3(0.,gridPointDelta,texture2D(displace_map,vec2(v_uv.x ,v_uv.y + gridPointDelta)).x); - vec3 down = vec3(0.,-gridPointDelta,texture2D(displace_map,vec2(v_uv.x ,v_uv.y - gridPointDelta)).x); + vec3 right = vec3(gridPointDelta,0.0,texture2D(displace_map,vec2(v_uv.x + gridPointDelta,v_uv.y)).x*0.1); + vec3 left = vec3(-gridPointDelta,0.0,texture2D(displace_map,vec2(v_uv.x - gridPointDelta,v_uv.y)).x*0.1); + vec3 up = vec3(0.,gridPointDelta,texture2D(displace_map,vec2(v_uv.x ,v_uv.y + gridPointDelta)).x*0.1); + vec3 down = vec3(0.,-gridPointDelta,texture2D(displace_map,vec2(v_uv.x ,v_uv.y - gridPointDelta)).x*0.1); //vec3 tangent = normalize(right - currPoint); //vec3 biTangent = normalize(up - currPoint); @@ -124,26 +125,28 @@ vec3 normal = cross(tangent, biTangent); vec3 norm = normalize(normal); - vec3 lightDir = normalize(lightPos- v_fragPos); + norm.y *= -1.; //Normal y direction is somehow inverted + vec3 lightDir = normalize(lightPos - v_fragPos); float diff = max(dot(norm,lightDir),0.0); vec3 diffuse = diff * lightColor; vec3 result = (diffuse) * vec3(0.0,0.0,1.0); //Old lightning - //vec3 toCameraVector = v_fragPos - vec3(0.,0.,0.); - //vec3 reflec = normalize(reflect(toCameraVector, normal)); + vec3 toCameraVector = normalize(v_fragPos - eyePos); + vec3 reflec = normalize(reflect(toCameraVector, norm)); //Schlicks approximation to Fresnelfactor - //float n1 = 1., n2 = 1.33333; - //float R0 = pow((n1-n2)/(n1+n2), 2.); - //float fresnel = R0 + (1. - R0)*pow((1.-dot(normal,reflec)),5.) ; + float n1 = 1., n2 = 1.33333; + float R0 = pow((n1-n2)/(n1+n2), 2.); + float fresnel = R0 + (1. - R0)*pow((1.-dot(norm,reflec)),5.) ; - //vec3 waterColor = vec3(34./255.,154./255.,211./255.); - //vec3 lightColor = vec3(1.,1.,1.); + //vec3 waterColor = vec3(34./255.,154./255.,211./255.); + vec3 oceanColor = vec3(0,.04,.04) * 10.; // under-sea colour + vec3 skyColor = vec3(1.,1.,1.); - //gl_FragColor = vec4(mix(waterColor, vec3(1.,1.,1.),fresnel).xyz, 1.); - gl_FragColor = vec4(result,1.0); + gl_FragColor = vec4(mix(oceanColor,skyColor,fresnel).xyz, 1.); + //gl_FragColor = vec4(result,1.0); //gl_FragColor = vec4(normal,1.0); //gl_FragColor = vec4(displace.x,displace.x,displace.x,1.0); //Show Perlin Noise texture deactivate vertex distrotion before } @@ -151,9 +154,9 @@