void give_effect(t_env *e) { e->effect.vec = give_vec(e->obj_tmp, e); e->effect.shadow = give_shadow(e); e->effect.light = my_light(e); e->effect.bri = light_effect(e); //e->effect.light = mult_value(&(e->effect.light), e->effect.shadow); e->effect.bri = a_x_b(&(e->effect.bri), &(e->effect.light)); }
t_vec3d final_color(t_env *e) { t_vec3d normal; t_vec3d col_tmp; t_vec3d color; t_vec3d reflex; e->value = 100000000; e->obj_tmp = all_inter(e); e->color = (t_vec3d){0,0,0}; color = (t_vec3d){0,0,0}; if (e->obj_tmp && e->value > 0.0001) { //POUR LE SOL /*if(e->obj_tmp->type == 10) { int x = e->x + ((e->v / 0.2) * 50); int y = e->y - ((e->v2 / 0.2) * 50); y -= e->eye_pos.z * 3; if(x<0) x = -x; if(y<0) y = -y; int color1 = e->sol->data[y * e->sol->sizeline + x * e->sol->bpp / 8]; int color2 = e->sol->data[y * e->sol->sizeline + x * e->sol->bpp / 8 + 1]; int color3 = e->sol->data[y * e->sol->sizeline + x * e->sol->bpp / 8 + 2]; e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8] = color1; e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 1] = color2; e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 2] = color3; e->no = 1; } else*/ e->color = (t_vec3d){e->obj_tmp->color.x, e->obj_tmp->color.y, e->obj_tmp->color.z}; if (e->value < 100000000) give_my_pos(e); normal = give_vec(e->obj_tmp, e); double ref; ref = 1; color = e->color; // if(e->obj_tmp->type == 1 || e->obj_tmp->type == 0) /* if(e->obj_tmp->ref > 0) ref = e->obj_tmp->ref;//0.25; if (ref < 1 && e->nb_ref < REF) { e->nb_ref += 1; reflex = ft_reflex(&(e->ray_dir), &normal ); ajust(&reflex); normal = mult_value(&normal , 0.001); e->pos = plus(&(e->pos), &normal ); color = mult_value(&(color), ref); e->ray_origin = e->pos; e->ray_dir = reflex; col_tmp = final_color(e); col_tmp = mult_value(&col_tmp, 1 - ref); color = plus(&(color), &col_tmp); }*/ //if(e->obj_tmp->type == 1) SI ON VEUT REFRACTIONNER UNE VRAI IMAGE //SINON on affiche juste tel quel est decrite dans le fichier if(e->obj_tmp->refraction != 0 && e->myetat == 0) { e->myetat = 1; e->ray_dir = refract(e, &normal); ajust(&(e->ray_dir)); color = mult_value(&(color), 0.8); col_tmp = final_color(e); col_tmp = mult_value(&col_tmp, 1 - 0.5); color = plus(&(color), &col_tmp); } } //POUR LE CIEL /*else { e->no = 1; int x = e->x + ((e->v / 0.2) * 50); int y = e->y + ((e->v2 / 0.2) * 20); if(x<0) x = -x; if(y<0) y = -y; int color1 = e->skybox->data[y * e->skybox->sizeline + x * e->skybox->bpp / 8]; int color2 = e->skybox->data[y * e->skybox->sizeline + x * e->skybox->bpp / 8 + 1]; int color3 = e->skybox->data[y * e->skybox->sizeline + x * e->skybox->bpp / 8 + 2]; e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8] = color1; e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 1] = color2; e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 2] = color3; }*/ return (color); }