void ft_get_color(t_ray *ray, t_obj *obj) { t_col *col; col = (t_col *)malloc(sizeof(t_col)); ft_init_col(ray, col); if (ray->d < D_MAX) { ft_get_color_obj(ray, obj, col); if (ray->opt_f == 0) { col->amb[0] = col->obj[0] * obj->amb[0]; col->amb[1] = col->obj[1] * obj->amb[1]; col->amb[2] = col->obj[2] * obj->amb[2]; ft_calc_li(ray, obj, col); ft_calc_col(col, ray); if (ray->refl != NULL) ft_get_color(ray->refl, obj); if (ray->tran != NULL) ft_get_color(ray->tran, obj); } ft_rec_col(ray, obj); } ft_get_dir_li(ray, obj, col); free(col); }
int ft_fill_cylinder(int fd, t_obj *tobj) { char *line; int i; static int wich = 0; t_cyl *ttcyw; i = -1; if (!(((t_cyl ***)tobj->type)[CYLINDER][wich] = (t_cyl *)\ malloc(sizeof(t_cyl)))) return (-1); ttcyw = ((t_cyl ***)tobj->type)[CYLINDER][wich]; while (++i < 5) { if (get_next_line(fd, &line) <= 0 || line[0] == '#') { ft_putstr_fd("Hay un problema con el cylindro", 2); return (-1); } ttcyw->sf = i == 0 ? ft_get_color(line) : ttcyw->sf; ttcyw->em = i == 1 ? ft_get_color(line) : ttcyw->em; ttcyw->c = i == 2 ? ft_get_vect(line) : ttcyw->c; ttcyw->r = i == 3 ? atof(line) : ttcyw->r; ttcyw->flag = i == 4 ? *line : ttcyw->flag; } wich++; return (0); }
int ft_color(char *fmt, int i, int size, t_printf *conv) { char *color; color = ft_strsub(fmt, i, size); if (ft_strcmp(color, "{eoc}") == 0) ft_get_color(0, conv); else if (ft_strcmp(color, "{black}") == 0) ft_get_color(1, conv); else if (ft_strcmp(color, "{red}") == 0) ft_get_color(2, conv); else if (ft_strcmp(color, "{green}") == 0) ft_get_color(3, conv); else if (ft_strcmp(color, "{yellow}") == 0) ft_get_color(4, conv); else if (ft_strcmp(color, "{blue}") == 0) ft_get_color(5, conv); else if (ft_strcmp(color, "{pink}") == 0) ft_get_color(6, conv); else if (ft_strcmp(color, "{cyan}") == 0) ft_get_color(7, conv); else if (ft_strcmp(color, "{grey}") == 0) ft_get_color(8, conv); else ft_not_color(color, conv); ft_memdel((void **)&color); return (i + size); }
void ft_texture_to_int(t_env *env) { int y; int x; int z; z = 0; while (z < 13) { y = 0; while (y < TEX_HEIGHT) { x = 0; while (x < TEX_WIDTH) { ft_get_color(env, x, y, z); env->texture[z][TEX_WIDTH * y + x] = toi(env->r, env->g, env->b); x++; } y++; } z++; } }
void ft_ray_cast(t_dt *dt, t_obj *obj) { t_ray *ray; int pix[2]; pix[1] = 0; ft_set_param(dt); while (pix[1] < Y_MAX) { pix[0] = 0; while (pix[0] < X_MAX) { ray = (t_ray *)malloc(sizeof(t_ray)); ray->pix[1] = pix[1]; ray->pix[0] = pix[0]; ft_init_ray(ray, dt); ft_inter(ray, obj); ft_get_color(ray, obj); ft_mlx_add_col(dt, ray); pix[0] = pix[0] + 1; free(ray); } pix[1] = pix[1] + 1; mlx_put_image_to_window(dt->conn, dt->win, dt->img, 0, 0); } }
void *ft_rc_th4(void *env) { t_ray *ray; int pix[2]; t_env *tmp; tmp = (t_env *)env; pix[1] = 3 * Y_MAX / 4; while (pix[1] < Y_MAX) { pix[0] = 0; while (pix[0] < X_MAX) { ray = (t_ray *)malloc(sizeof(t_ray)); ray->pix[1] = pix[1]; ray->pix[0] = pix[0]; ft_init_ray(ray, tmp->dt); ft_inter(ray, tmp->obj); ft_get_color(ray, tmp->obj); ft_mlx_add_col(tmp->dt, ray); pix[0] = pix[0] + 1; free(ray); } pix[1] = pix[1] + 1; } return (NULL); }
static void ft_draw_line(t_env *e, t_val pos, int *v) { if (!v) ft_error(); ft_fill_int_v(e, pos, v); while (1) { if ((v[6] + e->o_x) >= 0 && (v[6] + e->o_x) <= e->screen_width && (v[8] + e->o_y) >= 0 && (v[8] + e->o_y) <= e->screen_height) mlx_pixel_put(e->mlx, e->win, (v[6] + e->o_x), (v[8] + e->o_y), ft_get_color(pos.z, e->color_map)); if ((v[6] == v[7]) && (v[8] == v[9])) break ; v[5] = v[4]; if (v[5] > -v[0]) v[4] -= v[1]; if (v[5] > -v[0]) v[6] += v[2]; if (v[5] < v[1]) v[4] += v[0]; if (v[5] < v[1]) v[8] += v[3]; } free(v); }
int ft_key_hook(int keycode, t_env *e) { if (e && (keycode == ESC)) { write(1, "You've quit the program.\n", 25); exit(0); } else { if (e && (keycode == CTRL)) e->img->angle += M_PI; else if (e && (keycode == 99)) ft_get_color(e); else if (e && (keycode == 114)) { e->img->pos_x = 1.0; e->img->pos_y = 1.0; e->img->angle = 0.0; e->img->color = 0x4B0082; } ft_move(e, keycode); ft_draw_wall(e); } return (0); }
void ft_create_menu(t_scene *scn) { int x; int y; y = 0; while (y < 200) { x = 0; while (x < SIZE_W) { ft_generate_image(scn->menu, x, y, ft_get_color(0, 200, 255, 255 - y)); x++; } y++; } }