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); } }
int raytracer(t_obj *obj, t_cam cam) { int i; int j; t_r r; double **c2w; t_save save; if (!(c2w = ft_init_matrix(&cam.b.vx, &cam.b.vy, &cam.b.vz))) return (-1); ft_init_ray(&r); r.o_w = cam.ro; j = -1; while (++j < HEIGHT) { i = -1; while (++i < WIDTH) { obj->depth = 0; ft_find_pixel_pos_on_screen(&cam.rp, i, j); ft_mult_vect_by_matrix(&r.d_w, c2w, cam.rp); ft_vect_difference(&r.d_w, r.d_w, r.o_w); ft_normalize_vect(&r.d_w); obj->pixel[j][i] = ft_trace(*obj, &r, &save); } } return (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); }
void ft_raycast(t_all *all) { FN.img = mlx_new_image(FN.mlx, LARG, HAUT); FN.data = mlx_get_data_addr(FN.img, &FN.bpp, &FN.sizeline, &FN.endian); all->x = 0; while (all->x < LARG) { ft_init_ray(all, &RAY, &PLAYER); ft_calc_dest_dist(all, &RAY); ft_check_hit(all, &RAY); ft_calc_wall_dist(all, &RAY); ft_calc_height_line(&RAY); ft_check_wall_color(all, &RAY); ft_verline(&RAY, all); all->x++; } mlx_put_image_to_window(FN.mlx, FN.win, FN.img, 0, 0); ft_move(all, &PLAYER, &KEY); }