/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* raytrace.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gbrochar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/02/07 15:35:45 by gbrochar #+# #+# */ /* Updated: 2019/02/13 18:57:43 by gbrochar ### ########.fr */ /* */ /* ************************************************************************** */ #include "rtv1.h" t_obj_list *intersect_ray(t_env *e, t_ray r) { t_obj_list *browser; t_obj_list *closest_obj; closest_obj = NULL; browser = e->objs; while (browser) { browser->t = e->func.intersect_obj[browser->type](browser->obj, r); browser = browser->next; } browser = e->objs; while (browser) { if (browser->t > 0 && (!closest_obj || browser->t < closest_obj->t)) closest_obj = browser; browser = browser->next; } return (closest_obj); } void raytrace_pixel(t_env *e, int x, int y) { t_ray r; t_obj_list *closest_object; r = set_ray(e, x, y); closest_object = intersect_ray(e, r); if (closest_object) put_pixel(e, x, y, phong(e, r, closest_object)); else put_pixel(e, x, y, color(0, 0, 0)); } void raytrace(t_env *e) { int x; int y; y = -1; while (++y < WINY) { x = -1; while (++x < WINX) raytrace_pixel(e, x, y); } mlx_put_image_to_window(e->mlx.ptr, e->mlx.win, e->mlx.img, 0, 0); }