From 2f40dadf3eb80b7e9209dab6afbd979651fdc5e8 Mon Sep 17 00:00:00 2001 From: KP Date: Mon, 29 Jul 2024 17:30:32 -0500 Subject: [PATCH] Lambert -> phong shading --- Data/resources/shaders/.kp3d/map_f.glsl | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Data/resources/shaders/.kp3d/map_f.glsl b/Data/resources/shaders/.kp3d/map_f.glsl index e523196..1798ccd 100644 --- a/Data/resources/shaders/.kp3d/map_f.glsl +++ b/Data/resources/shaders/.kp3d/map_f.glsl @@ -45,7 +45,20 @@ vec4 MakeLight(vec3 norm, vec3 position, vec3 diffuse, float radius, float sharp light.position = position; light.diffuse = diffuse; light.radius = radius; - vec4 res = vec4(light.diffuse * Lambert(norm, normalize(light.position)), 1.0); + // vec4 res = vec4(light.diffuse * Lambert(norm, normalize(light.position)), 1.0); + + vec3 light_dir = normalize(light.position - v_position); + + vec3 view_dir = normalize(u_campos - v_position); + vec3 reflect_dir = reflect(-light_dir, norm); + float spec = max(dot(view_dir, reflect_dir), 0.0); + float diff = max(dot(norm, light_dir), 0.0); + power = 0.5; + vec3 ddiffuse = diff * light.diffuse; + vec3 specular = power * spec * light.diffuse; + vec4 res = vec4(ddiffuse + specular, 1.0); + //vec4 res = vec4(power * spec * light.diffuse, 1.0); + float alpha = kpc(distance(light.position, v_position), light.radius * sharpness, light.radius); res *= mix(vec4(light.diffuse, 1), vec4(0,0,0,1.0), alpha); @@ -64,7 +77,7 @@ void main() vec4 ambient = vec4(0.1, 0.1, 0.1, 1.0) * 1.5, light = ambient; - light += MakeLight(norm, u_campos, vec3(1.0, 1.0, 1.0), 5.0, 0.0, 1.0); + light += MakeLight(norm, u_campos, vec3(0.7), 5.0, 0.0, 1.0); light += MakeLight(norm, vec3(5.0, 2.0, -7.0 + cos(u_time/35.0) * 2.0), vec3(1.0, 0.6, 0.0), 5.0, 0.6, 1.0); light += MakeLight(norm, vec3(7, 2.0, -7.0 + -cos(u_time / 30.0) * 1.0), vec3(0.6, 0.9, 1.0), 5.0, 0.6, 1.0);