From 87ec86411a63e4a2c9f48d8c61839f07fa45bd05 Mon Sep 17 00:00:00 2001 From: cadubentzen Date: Mon, 20 Nov 2017 23:20:47 -0300 Subject: [PATCH] fix shadows --- js/fragment_shader.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/js/fragment_shader.js b/js/fragment_shader.js index fed82e1..3b3bc9a 100644 --- a/js/fragment_shader.js +++ b/js/fragment_shader.js @@ -183,7 +183,8 @@ bool intersectSomethingGoingToLight(vec3 origin, vec3 N_aux) { } bool intersectSomething(vec3 origin, vec3 rayDirection, out vec3 intersection, - out vec3 N, out vec3 color, out vec3 reflectedColor) { + out vec3 N, out vec3 color, out vec3 reflectedColor, + out bool shadow) { float dist1, dist2; vec3 V, L, R; vec3 V2, N2, L2; @@ -212,8 +213,12 @@ bool intersectSomething(vec3 origin, vec3 rayDirection, out vec3 intersection, if (intersectSomethingGoingToLight(intersection, N)) { reflectedColor = vec3(0.0, 0.0, 0.0); + color = reflectedColor; + shadow = true; + return true; } + shadow = false; R = reflect(L, N); color = colorAt(reflectedColor, V, N, L, R); return true; @@ -245,15 +250,16 @@ void main() { vec3 color, tempColor, colorMax, reflectedColor; vec3 N; + bool shadow = false; - if (intersectSomething(cameraPosition, rayDirection, intersection1, N, color, reflectedColor)) { + if (intersectSomething(cameraPosition, rayDirection, intersection1, N, color, reflectedColor, shadow)) { colorMax = (reflectedColor + vec3(0.7))/1.7; rayDirection = reflect(rayDirection, N); - if (intersectSomething(intersection1, rayDirection, intersection2, N, tempColor, reflectedColor)) { + if (!shadow && intersectSomething(intersection1, rayDirection, intersection2, N, tempColor, reflectedColor, shadow)) { color += tempColor * colorMax; colorMax = (reflectedColor + vec3(0.7))/1.7; rayDirection = reflect(rayDirection, N); - if (intersectSomething(intersection2, rayDirection, intersection1, N, tempColor, reflectedColor)) { + if (!shadow && intersectSomething(intersection2, rayDirection, intersection1, N, tempColor, reflectedColor, shadow)) { color += tempColor * colorMax; } }