t_k *luminosite(t_spot *spot, t_k *k, t_objet *obj, t_utils *utils) { double a; double tmp; t_utils l; t_objet obj3; a = 0.0; init_new_color(k); trans_inv(utils, obj, 0); obj_rot(utils, obj, -1, 1); calc_coord(k, &obj3, utils); utils = init_norm(obj, obj3, utils); while (spot != NULL) { init_distance(spot, &l, obj3); tmp = calc_cos(utils, l); get_new_color(k, (tmp < 0.0 ? tmp = 0.0 : tmp), obj, spot); spot = spot->next; a++; } obj_rot(utils, obj, 1, 1); trans_nor(utils, obj, 0); check_color(k, a, utils); return (k); }
t_k *luminosite(t_spot *spot, t_k *k, t_objet *obj, t_utils *utils) { t_utils L; t_objet obj3; double tmp; double a; a = 0.0; init_new_color(k); trans_inv(utils, obj, 0); obj_rot(utils, obj, -1, 1); calc_coord(k, &obj3, utils); utils = my_init_norm(obj, obj3, utils); while (spot != NULL) { init_distance(spot, &L, obj3); tmp = calc_cos(utils, L); if (obj->texture == 1 || obj->texture == 2) k = texture(obj3, k, obj->texture); get_new_color(k, (tmp < 0.0 ? tmp = 0.0 : tmp), obj, spot); spot = spot->next; a++; } obj_rot(utils, obj, 1, 1); trans_nor(utils, obj, 0); check_color(k, a, utils); return (k); }
t_k calc(double x, double y, t_param *param, t_k *k) { t_k closest; t_objet *tmp; t_utils utils; k = NULL; init_k(&closest); init_utils(&utils); tmp = param->objet; init_utils_eye(&utils, param, x, y); obj_rot(&utils, NULL, -1, 0); while (tmp != NULL) { k = search_k(tmp, utils, k, param); tmp = tmp->next; } closest = fill_closest(k, closest); if (k) free(k); return (closest); }