20 grid = ray_cast->grid;
21 delta_distance = ray_cast->delta_distance;
22 if (ray_cast->ray_dir.x < 0)
24 ray_cast->step_dir.x = -1;
25 ray_cast->next_distance.x
26 = (view_point->x - (double)grid.x) * delta_distance.x;
30 ray_cast->step_dir.x = 1;
31 ray_cast->next_distance.x
32 = ((double)grid.x + 1.0 - view_point->x) * delta_distance.x;
41 grid = ray_cast->grid;
42 delta_distance = ray_cast->delta_distance;
43 if (ray_cast->ray_dir.y < 0)
45 ray_cast->step_dir.y = -1;
46 ray_cast->next_distance.y
47 = (view_point->y - (double)grid.y) * delta_distance.y;
51 ray_cast->step_dir.y = 1;
52 ray_cast->next_distance.y
53 = ((double)grid.y + 1.0 - view_point->y) * delta_distance.y;
64static void set_direction_and_distance_for_dda(
67 set_x_side(ray_cast, view_point);
68 set_y_side(ray_cast, view_point);
75 if (ray_cast.ray_dir.x == 0)
76 delta_distance.x = 1e30;
78 delta_distance.x = fabs(1 / ray_cast.ray_dir.x);
79 if (ray_cast.ray_dir.y == 0)
80 delta_distance.y = 1e30;
82 delta_distance.y = fabs(1 / ray_cast.ray_dir.y);
97void init_ray(
t_frame *frame,
int x)
103 camera_forcal_plane = frame->player->camera_forcal_plane;
104 ray_dir = frame->player->ray_dir;
105 ray_cast.camera_plane_x = 2 * x / (double)IMG_3D_WIDTH - 1;
107 = ray_dir.x + camera_forcal_plane.x * ray_cast.camera_plane_x;
109 = ray_dir.y + camera_forcal_plane.y * ray_cast.camera_plane_x;
110 ray_cast.grid.x = (int)frame->player->view_point.x;
111 ray_cast.grid.y = (int)frame->player->view_point.y;
112 ray_cast.delta_distance = (
t_vector)get_delta_distance(ray_cast);
113 set_direction_and_distance_for_dda(&ray_cast, &frame->player->view_point);
114 frame->ray_cast = ray_cast;
single still image for render_frame