print 2D map and ray in 3D
This commit is contained in:
parent
850ddb299a
commit
9e4e7f41c8
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/05/04 18:08:14 by apommier #+# #+# */
|
/* Created: 2022/05/04 18:08:14 by apommier #+# #+# */
|
||||||
/* Updated: 2022/05/04 21:06:34 by apommier ### ########.fr */
|
/* Updated: 2022/05/05 02:37:46 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -15,11 +15,68 @@
|
|||||||
void print_ray2(t_data *img, float vx, float vy, float dist)
|
void print_ray2(t_data *img, float vx, float vy, float dist)
|
||||||
{
|
{
|
||||||
int i = -1;
|
int i = -1;
|
||||||
|
int red = 0;
|
||||||
|
|
||||||
|
red = red << 8;
|
||||||
|
red +=255;
|
||||||
|
red = red << 8;
|
||||||
|
red = red << 8;
|
||||||
while (++i < dist)
|
while (++i < dist)
|
||||||
{
|
{
|
||||||
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (vx) * i) , (img->player.y + (vy) * i) , 500);
|
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (vx) * i) , (img->player.y + (vy) * i) , red);
|
||||||
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (vx) * i) + 1, (img->player.y + (vy) * i) , 500);
|
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (vx) * i) + 1, (img->player.y + (vy) * i) , red);
|
||||||
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (vx) * i) , (img->player.y + (vy) * i) + 1, 500);
|
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (vx) * i) , (img->player.y + (vy) * i) + 1, red);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_red()
|
||||||
|
{
|
||||||
|
int red = 0;
|
||||||
|
|
||||||
|
red = red << 8;
|
||||||
|
red +=255;
|
||||||
|
red = red << 8;
|
||||||
|
red = red << 8;
|
||||||
|
return (red);
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_dark_red()
|
||||||
|
{
|
||||||
|
int red = 0;
|
||||||
|
|
||||||
|
red = red << 8;
|
||||||
|
red +=139;
|
||||||
|
red = red << 8;
|
||||||
|
red = red << 8;
|
||||||
|
return (red);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_ray3d(t_data *img, float dist, int ray, int type)
|
||||||
|
{
|
||||||
|
float line_height;
|
||||||
|
float line_offset;
|
||||||
|
int i;
|
||||||
|
int y;
|
||||||
|
int x;
|
||||||
|
|
||||||
|
x = 0;
|
||||||
|
i = 0;
|
||||||
|
line_height = img->map.size * 320 / dist;
|
||||||
|
if (line_height > 320)
|
||||||
|
line_height = 320;
|
||||||
|
line_offset = 160 - line_height / 2;
|
||||||
|
while (i < 8)
|
||||||
|
{
|
||||||
|
y = 0;
|
||||||
|
while (y < line_height)
|
||||||
|
{
|
||||||
|
if (type)
|
||||||
|
mlx_pixel_put(img->mlx, img->mlx_win, ray * 8 + 530 + i, y + line_offset , get_red());
|
||||||
|
else
|
||||||
|
mlx_pixel_put(img->mlx, img->mlx_win, ray * 8 + 530 + i, y + line_offset , get_dark_red());
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,18 +217,24 @@ void draw_ray(t_data *img)
|
|||||||
vx = cos(deg_to_rad(ray_angle));
|
vx = cos(deg_to_rad(ray_angle));
|
||||||
vy = -sin(deg_to_rad(ray_angle));
|
vy = -sin(deg_to_rad(ray_angle));
|
||||||
//printf("player.vx= %f vx= %f player.vy= %f vy= %f\n", img->player.vx, vx, img->player.vy, vy);
|
//printf("player.vx= %f vx= %f player.vy= %f vy= %f\n", img->player.vx, vx, img->player.vy, vy);
|
||||||
|
int wall_type;
|
||||||
if (dist_h != -1 && (dist_h < dist_v || dist_v == -1))
|
if (dist_h != -1 && (dist_h < dist_v || dist_v == -1))
|
||||||
{
|
{
|
||||||
print_ray2(img, vx, vy, fabs(dist_h));
|
print_ray2(img, vx, vy, fabs(dist_h));
|
||||||
dist_f = dist_h;
|
dist_f = dist_h;
|
||||||
|
wall_type = 0;
|
||||||
}
|
}
|
||||||
else if (dist_v != -1)
|
else if (dist_v != -1)
|
||||||
{
|
{
|
||||||
dist_f = dist_v;
|
dist_f = dist_v;
|
||||||
print_ray2(img, vx, vy, fabs(dist_v));
|
print_ray2(img, vx, vy, fabs(dist_v));
|
||||||
|
wall_type = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dist_f = 0;
|
dist_f = 0;
|
||||||
|
int ca = reset_angle(img->player.angle - ray_angle); //fisheye
|
||||||
|
dist_f = dist_f * cos(deg_to_rad(ca)); //fisheye
|
||||||
|
draw_ray3d(img, dist_f, nb_ray, wall_type);
|
||||||
ray_angle = reset_angle(ray_angle - 1);
|
ray_angle = reset_angle(ray_angle - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
10
srcs/main.c
10
srcs/main.c
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/02/13 16:42:55 by apommier #+# #+# */
|
/* Created: 2022/02/13 16:42:55 by apommier #+# #+# */
|
||||||
/* Updated: 2022/05/04 18:08:57 by apommier ### ########.fr */
|
/* Updated: 2022/05/05 02:12:30 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -17,9 +17,9 @@ void print_ray(t_data *img)
|
|||||||
int i = -1;
|
int i = -1;
|
||||||
while (++i < 15)
|
while (++i < 15)
|
||||||
{
|
{
|
||||||
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 3, (img->player.y + (img->player.vy) * i) + 3, 255);
|
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i), (img->player.y + (img->player.vy) * i) , 255 << 8);
|
||||||
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 4, (img->player.y + (img->player.vy) * i) + 3, 255);
|
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 1, (img->player.y + (img->player.vy) * i) , 255 << 8);
|
||||||
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i) + 3, (img->player.y + (img->player.vy) * i) + 4, 255);
|
mlx_pixel_put(img->mlx, img->mlx_win, (img->player.x + (img->player.vx) * i), (img->player.y + (img->player.vy) * i) + 1, 255 << 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ void print_player(player player, t_data *img)
|
|||||||
|
|
||||||
buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/player.xpm",
|
buffer = mlx_xpm_file_to_image(img->mlx, "./sprite/player.xpm",
|
||||||
&img_width, &img_height);
|
&img_width, &img_height);
|
||||||
mlx_put_image_to_window(img->mlx, img->mlx_win, buffer, player.x, player.y);
|
mlx_put_image_to_window(img->mlx, img->mlx_win, buffer, player.x - 3.5 , player.y -3.5);
|
||||||
mlx_destroy_image(img->mlx, buffer);
|
mlx_destroy_image(img->mlx, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/02/13 23:37:02 by apommier #+# #+# */
|
/* Created: 2022/02/13 23:37:02 by apommier #+# #+# */
|
||||||
/* Updated: 2022/05/04 21:17:30 by apommier ### ########.fr */
|
/* Updated: 2022/05/05 02:29:05 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -107,11 +107,11 @@ int key_press(int code, t_data *img)
|
|||||||
if (is_good(img, code))
|
if (is_good(img, code))
|
||||||
{
|
{
|
||||||
//printf("code = %d\n", code);
|
//printf("code = %d\n", code);
|
||||||
//mlx_clear_window(img->mlx, img->mlx_win);
|
mlx_clear_window(img->mlx, img->mlx_win);
|
||||||
print_map(img->map, img);
|
print_map(img->map, img);
|
||||||
print_player(img->player, img);
|
print_player(img->player, img);
|
||||||
print_ray(img);
|
|
||||||
draw_ray(img);
|
draw_ray(img);
|
||||||
|
print_ray(img);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (1);
|
return (1);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user