rt/src/init_obj_cube.c

95 lines
3.2 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* init_obj_cube.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ntrahy <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/01/02 23:21:24 by ntrahy #+# #+# */
/* Updated: 2017/01/11 14:04:30 by scebula ### ########.fr */
/* */
/* ************************************************************************** */
#include "rt.h"
void init_cube_triangles(t_cube *cube, t_vect p[6])
{
t_vect corner1;
t_vect corner2;
corner1 = cube->corner1;
corner2 = cube->corner2;
cube->triangle[0] = add_triangle(init_tri_w_p(p[3], p[0], corner1));
cube->triangle[1] = add_triangle(init_tri_w_p(corner1, p[4], p[3]));
cube->triangle[2] = add_triangle(init_tri_w_p(corner2, p[1], p[0]));
cube->triangle[3] = add_triangle(init_tri_w_p(p[0], p[3], corner2));
cube->triangle[4] = add_triangle(init_tri_w_p(p[5], p[2], p[1]));
cube->triangle[5] = add_triangle(init_tri_w_p(p[1], corner2, p[5]));
cube->triangle[6] = add_triangle(init_tri_w_p(p[4], corner1, p[2]));
cube->triangle[7] = add_triangle(init_tri_w_p(p[2], p[5], p[4]));
cube->triangle[8] = add_triangle(init_tri_w_p(p[3], p[4], p[5]));
cube->triangle[9] = add_triangle(init_tri_w_p(p[5], corner2, p[3]));
cube->triangle[10] = add_triangle(init_tri_w_p(corner1, p[0], p[1]));
cube->triangle[11] = add_triangle(init_tri_w_p(p[1], p[2], corner1));
}
t_cube *compute_cube(t_cube *cube)
{
t_vect corner1;
t_vect corner2;
t_vect p[6];
corner1 = cube->corner1;
corner2 = cube->corner2;
p[0] = init_vector(corner2.x, corner1.y, corner1.z, 1);
p[1] = init_vector(corner2.x, corner1.y, corner2.z, 1);
p[2] = init_vector(corner1.x, corner1.y, corner2.z, 1);
p[3] = init_vector(corner2.x, corner2.y, corner1.z, 1);
p[4] = init_vector(corner1.x, corner2.y, corner1.z, 1);
p[5] = init_vector(corner1.x, corner2.y, corner2.z, 1);
init_cube_triangles(cube, p);
return (cube);
}
void cube_bzero(t_cube *cube)
{
cube->corner1 = init_vector(-1, -1, 1, 1);
cube->corner2 = init_vector(1, 1, -1, 1);
cube->color = set_color(0, 255, 255);
cube->tf_list = NULL;
cube->reflection = 0.7;
cube->shine = 0.7;
cube->texture = NULL;
cube->bumpmap = NULL;
cube->cut = NULL;
}
t_cube *init_cube(void)
{
t_cube *cube;
int i;
i = -1;
cube = (t_cube *)ft_memalloc(sizeof(t_cube));
cube->closest_triangle = (int *)ft_memalloc(sizeof(int) * THREADS);
while (++i < THREADS)
cube->closest_triangle[i] = -1;
i = -1;
cube->triangle = (t_obj **)ft_memalloc(sizeof(t_obj *) * 12);
while (++i < 12)
cube->triangle[i] = NULL;
cube_bzero(cube);
return (cube);
}
t_solid *get_cube_solid(void *p)
{
t_cube *cube;
t_solid *solid;
cube = (t_cube *)p;
solid = (t_solid *)ft_memalloc(sizeof(t_solid));
solid->cube = cube;
return (solid);
}