specular.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* specular.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: salee2 <salee2@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/05/31 17:29:10 by salee2 #+# #+# */ 9 /* Updated: 2023/05/31 17:29:13 by salee2 ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "include/minirt.h" 14 15 t_vec3 reflect(t_vec3 v, t_vec3 n) 16 { 17 return (sub(scl_mul(2 * dot(v, n), n), v)); 18 } 19 20 t_color3 get_specular(t_scene *scene, t_vec3 light_dir, t_color3 color) 21 { 22 const double shininess_exp = 64; 23 const double reflection_coef = 0.5; 24 const t_vec3 reflect_dir = reflect(light_dir, scene->hit.normal); 25 const t_vec3 view_dir = norm(scl_mul(-1, scene->ray.dir)); 26 const double intensity = pow(fmax(dot(view_dir, reflect_dir), 0.0), \ 27 shininess_exp); 28 29 return (scl_mul(intensity, scl_mul(reflection_coef, color))); 30 }