97 lines
2.5 KiB
C
97 lines
2.5 KiB
C
|
/* ************************************************************************** */
|
||
|
/* */
|
||
|
/* ::: :::::::: */
|
||
|
/* init_obj_prism.c :+: :+: :+: */
|
||
|
/* +:+ +:+ +:+ */
|
||
|
/* By: ntrahy <marvin@42.fr> +#+ +:+ +#+ */
|
||
|
/* +#+#+#+#+#+ +#+ */
|
||
|
/* Created: 2017/01/02 23:22:00 by ntrahy #+# #+# */
|
||
|
/* Updated: 2017/01/09 19:20:02 by scebula ### ########.fr */
|
||
|
/* */
|
||
|
/* ************************************************************************** */
|
||
|
|
||
|
#include "rt.h"
|
||
|
|
||
|
t_prism *free_prism(t_prism *prism)
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
i = 0;
|
||
|
if (prism)
|
||
|
{
|
||
|
free_tf_list(&(prism->tf_list));
|
||
|
while (i < 4)
|
||
|
{
|
||
|
if (prism->triangle[i])
|
||
|
free_obj(&prism->triangle[i]);
|
||
|
i++;
|
||
|
}
|
||
|
free_cut(&prism->cut);
|
||
|
free(prism);
|
||
|
prism = NULL;
|
||
|
}
|
||
|
return (NULL);
|
||
|
}
|
||
|
|
||
|
t_prism *compute_prism(t_prism *prism)
|
||
|
{
|
||
|
t_vect a;
|
||
|
t_vect b;
|
||
|
t_vect c;
|
||
|
t_vect d;
|
||
|
|
||
|
a = prism->a;
|
||
|
b = prism->b;
|
||
|
c = prism->c;
|
||
|
d = prism->d;
|
||
|
prism->triangle[0] = add_triangle(init_tri_w_p(a, b, c));
|
||
|
prism->triangle[1] = add_triangle(init_tri_w_p(b, d, c));
|
||
|
prism->triangle[2] = add_triangle(init_tri_w_p(a, c, d));
|
||
|
prism->triangle[3] = add_triangle(init_tri_w_p(a, b, d));
|
||
|
return (prism);
|
||
|
}
|
||
|
|
||
|
void prism_bzero(t_prism *prism)
|
||
|
{
|
||
|
prism->a = init_vector(-1, -1, 0, 1);
|
||
|
prism->b = init_vector(1, -1, 0, 1);
|
||
|
prism->c = init_vector(0, 1, 0, 1);
|
||
|
prism->d = init_vector(0, 0, 1, 1);
|
||
|
prism->color = set_color(255, 0, 0);
|
||
|
prism->tf_list = NULL;
|
||
|
prism->texture = NULL;
|
||
|
prism->bumpmap = NULL;
|
||
|
prism->reflection = 0.6;
|
||
|
prism->shine = 0.6;
|
||
|
prism->cut = NULL;
|
||
|
}
|
||
|
|
||
|
t_prism *init_prism(void)
|
||
|
{
|
||
|
t_prism *prism;
|
||
|
int i;
|
||
|
|
||
|
i = -1;
|
||
|
prism = (t_prism *)ft_memalloc(sizeof(t_prism));
|
||
|
prism_bzero(prism);
|
||
|
prism->triangle = (t_obj **)ft_memalloc(sizeof(t_obj *) * 4);
|
||
|
while (++i < 4)
|
||
|
prism->triangle[i] = NULL;
|
||
|
prism->closest_triangle = (int *)ft_memalloc(sizeof(int) * THREADS);
|
||
|
i = -1;
|
||
|
while (++i < THREADS)
|
||
|
prism->closest_triangle[i] = -1;
|
||
|
return (prism);
|
||
|
}
|
||
|
|
||
|
t_solid *get_prism_solid(void *p)
|
||
|
{
|
||
|
t_prism *prism;
|
||
|
t_solid *solid;
|
||
|
|
||
|
prism = (t_prism *)p;
|
||
|
solid = (t_solid *)ft_memalloc(sizeof(t_solid));
|
||
|
solid->prism = prism;
|
||
|
return (solid);
|
||
|
}
|