t_item *new_cyl(t_env *env) { t_item *item; item = new_t_item(env); item->cyl = t_cyl_creator(new_t_vec(0, 0, 0), new_t_vec(1, 0, 0), 3); item->next = NULL; itemadator(env, item); return (item); }
t_triangle *new_t_triangle(void) { t_triangle *triangle; triangle = malloc(sizeof(t_triangle)); triangle->p1 = new_t_vec(1, -1, 0); triangle->p2 = new_t_vec(1, 0, 1); triangle->p3 = new_t_vec(1, 1, 0); return (triangle); }
t_carre *divisecarrerisatorauxi(t_carre *tmp, t_carre *c2) { FLOAT_SIZE size; size = c2->size / 2.0; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x + size, c2->pos.y, c2->pos.z)); tmp = tmp->next; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x, c2->pos.y + size, c2->pos.z)); tmp = tmp->next; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x + size, c2->pos.y + size, c2->pos.z)); tmp = tmp->next; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x, c2->pos.y, c2->pos.z + size)); tmp = tmp->next; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x + size, c2->pos.y, c2->pos.z + size)); tmp = tmp->next; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x, c2->pos.y + size, c2->pos.z + size)); tmp = tmp->next; tmp->next = new_t_carrespe(size, new_t_vec(c2->pos.x + size, c2->pos.y + size, c2->pos.z + size)); return (tmp->next); }
t_sphere *new_t_sphere(FLOAT_SIZE x, FLOAT_SIZE y, FLOAT_SIZE z, FLOAT_SIZE r) { t_sphere *sphere; sphere = malloc(sizeof(t_sphere)); sphere->c = new_t_vec(x, y, z); sphere->ray = r; return (sphere); }
void carresisator(t_env *env) { t_carre *c; int i; int test2; int test3; i = -1; test3 = env->nb_obj * 1.5 + 5; test2 = env->nb_obj / 10 + 30; env->carre = new_t_carrespe(1000000, new_t_vec(-500000, -500000, -500000)); c = env->carre; while (c && i < NB_CARRE - 17) { if ((impactcarre(c, env, 0)) > test2 && c->size > 10) { i += 7; c = divisecarrerisator(c, env); } else c = c->next; } carresisatorauxi(env); }
t_carre *divisecarrerisator(t_carre *c2, t_env *env) { t_carre *c; t_carre *tmp; tmp = env->carre; c = new_t_carrespe(c2->size / 2.0, new_t_vec(c2->pos.x, c2->pos.y, c2->pos.z)); if (env->carre == c2) env->carre = c; else { while (tmp && tmp->next != c2) tmp = tmp->next; tmp->next = c; } tmp = c; if (tmp == NULL) ft_putendl("dafuq3"); tmp = divisecarrerisatorauxi(tmp, c2); tmp->next = c2->next; free(c2); return (c); }
inline t_vec add_vec(const t_vec v1, const t_vec v2) { return (new_t_vec(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z)); }
inline t_vec sub_vec(const t_vec v1, const t_vec v2) { return (new_t_vec(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z)); }
inline t_vec prod_vector(const t_vec v1, const t_vec v2) { return (new_t_vec(v1.y * v2.z - v1.z * v2.y, v1.z * v2.x - v1.x * v2.z, v1.x * v2.y - v1.y * v2.x)); }
inline t_vec vec_mult(const t_vec v1, const FLOAT_SIZE x) { return (new_t_vec(v1.x * x, v1.y * x, v1.z * x)); }
t_vec *sub_vec(t_vec *v1, t_vec *v2) { return (new_t_vec(v1->x - v2->x , v1->y - v2->y, v1->z - v2->z)); }
t_vec *prod_vector(t_vec *v1, t_vec *v2) { return (new_t_vec(v1->y * v2->z - v1->z * v2->y, v1->z * v2->x - v1->x * v2->z, v1->x * v2->y - v1->y * v2->x)); }
t_vec *vec_mult(t_vec *v1, double x) { return (new_t_vec(v1->x * x , v1->y * x, v1->z * x)); }