|
6 | 6 | /* By: TheTerror <jfaye@student.42lyon.fr> +#+ +:+ +#+ */ |
7 | 7 | /* +#+#+#+#+#+ +#+ */ |
8 | 8 | /* Created: 2023年08月23日 21:27:05 by TheTerror #+# #+# */ |
9 | | -/* Updated: 2023/08/23 21:27:20 by TheTerror ### ########lyon.fr */ |
| 9 | +/* Updated: 2023/09/07 17:22:54 by TheTerror ### ########lyon.fr */ |
10 | 10 | /* */ |
11 | 11 | /* ************************************************************************** */ |
12 | 12 |
|
13 | 13 | #include "inters.h" |
14 | 14 |
|
| 15 | +t_bool ft_define_pl_normal(t_pl *pl, t_vec *pl_n); |
| 16 | + |
| 17 | +t_bool ft_ray_inter_pl(t_vars *v, t_pl *pl) |
| 18 | +{ |
| 19 | + t_vec pl_n; |
| 20 | + t_vec p_ro; |
| 21 | + t_coord ray_o; |
| 22 | + double nom; |
| 23 | + double denom; |
| 24 | + double length; |
| 25 | + |
| 26 | + ray_o.x = v->ray.o.x; |
| 27 | + ray_o.y = v->ray.o.y; |
| 28 | + ray_o.z = v->ray.o.z; |
| 29 | + ft_vectornormalize(&pl->dir, &pl->dir); |
| 30 | + ft_vectornormalize(&v->ray.dir, &v->ray.dir); |
| 31 | + ft_define_pl_normal(pl, &pl_n); |
| 32 | + denom = ft_vecdotvec(&pl_n, &v->ray.dir); |
| 33 | + ft_pointsdiff(&pl->p, &ray_o, &p_ro); |
| 34 | + nom = ft_vecdotvec(&p_ro, &pl_n); |
| 35 | +// return (v->ray.color = ft_color(&v->cy[0]->rgb), __FALSE); |
| 36 | + if (denom > -0.000000000001 && denom < 0.00000000001) |
| 37 | + return (__FALSE); |
| 38 | + length = nom / denom; |
| 39 | + if (ft_assess_color(v, length)) |
| 40 | + return (v->ray.color = ft_color(&pl->rgb), __TRUE); |
| 41 | +// return (v->ray.color = ft_color(&v->cy[0]->rgb), __TRUE); |
| 42 | + return (__FALSE); |
| 43 | +} |
| 44 | + |
| 45 | +t_bool ft_define_pl_normal(t_pl *pl, t_vec *pl_n) |
| 46 | +{ |
| 47 | + t_vec op; |
| 48 | + t_vec pm; |
| 49 | + |
| 50 | + op.x = pl->p.x; |
| 51 | + op.y = pl->p.y; |
| 52 | + op.z = pl->p.z; |
| 53 | + ft_vectornormalize(&op, &op); |
| 54 | + pm.x = (pl->dir.y * op.z) - (pl->dir.z * op.y); |
| 55 | + pm.y = (pl->dir.z * op.x) - (pl->dir.x * op.z); |
| 56 | + pm.z = (pl->dir.x * op.y) - (pl->dir.y * op.x); |
| 57 | + ft_vectornormalize(&pm, &pm); |
| 58 | + pl_n->x = (pm.y * pl->dir.z) - (pm.z * pl->dir.y); |
| 59 | + pl_n->y = (pm.z * pl->dir.x) - (pm.x * pl->dir.z); |
| 60 | + pl_n->z = (pm.x * pl->dir.y) - (pm.y * pl->dir.x); |
| 61 | + return (__TRUE); |
| 62 | +} |
0 commit comments