-
Notifications
You must be signed in to change notification settings - Fork 1
/
ray_calculation.c
62 lines (53 loc) · 2.01 KB
/
ray_calculation.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ray_calculation.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ansulist <ansulist@student.42abudhabi.a +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/02/06 07:16:01 by ansulist #+# #+# */
/* Updated: 2024/03/07 16:28:45 by ansulist ### ########.fr */
/* */
/* ************************************************************************** */
#include "cub3d.h"
t_point calculate_ray_direction(t_cub3d *cub3d, float camera_x)
{
t_point ray_direction;
ray_direction.x = cub3d->player.dir.x + cub3d->player.plane.x * camera_x;
ray_direction.y = cub3d->player.dir.y + cub3d->player.plane.y * camera_x;
return (ray_direction);
}
// length of ray from one x or y-side to next x or y-side
t_point calculate_delta_distance(t_point *ray_direction)
{
t_point delta_dist;
delta_dist.x = fabs(1. / ray_direction->x);
delta_dist.y = fabs(1. / ray_direction->y);
return (delta_dist);
}
t_point calculate_step(t_point *ray_direction)
{
t_point step;
if (ray_direction->x < 0)
step.x = -1;
else
step.x = 1;
if (ray_direction->y < 0)
step.y = -1;
else
step.y = 1;
return (step);
}
t_point calcsid(t_cub3d *cub3d, t_point *rayd, t_point *map, t_point *deltd)
{
t_point side_dist;
if (rayd->x < 0)
side_dist.x = (cub3d->player.pos.x - map->x) * deltd->x;
else
side_dist.x = (map->x + 1.0 - cub3d->player.pos.x) * deltd->x;
if (rayd->y < 0)
side_dist.y = (cub3d->player.pos.y - map->y) * deltd->y;
else
side_dist.y = (map->y + 1.0 - cub3d->player.pos.y) * deltd->y;
return (side_dist);
}