/ miniRT / practice / miniRT_practice / specular.c
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  }