manque texture et direction

This commit is contained in:
ReverseSky 2024-10-11 05:23:55 +02:00
parent c1e17997ff
commit c598ad59cc
4 changed files with 45 additions and 17 deletions

5
.gitignore vendored
View file

@ -50,3 +50,8 @@ modules.order
Module.symvers Module.symvers
Mkfile.old Mkfile.old
dkms.conf dkms.conf
# Files
Libft
Minilibx
.vscode

53
algo.c
View file

@ -6,7 +6,7 @@
/* By: greg <greg@student.42.fr> +#+ +:+ +#+ */ /* By: greg <greg@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/10/01 16:24:58 by grobledo #+# #+# */ /* Created: 2024/10/01 16:24:58 by grobledo #+# #+# */
/* Updated: 2024/10/10 18:22:08 by greg ### ########.fr */ /* Updated: 2024/10/11 05:16:06 by greg ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -61,7 +61,8 @@ static int render(t_ray *ray)
int x; int x;
double width = 640; double width = 640;
double height = 480; double height = 480;
int mapX, mapY, hit, side; int hit;
int side;
int *img_data = (int *)mlx_get_data_addr(ray->img_ptr, &(int){32}, &(int){width * 4}, &(int){0}); int *img_data = (int *)mlx_get_data_addr(ray->img_ptr, &(int){32}, &(int){width * 4}, &(int){0});
// clear image data // clear image data
@ -75,8 +76,8 @@ static int render(t_ray *ray)
ray->raydirX = ray->dirX + ray->planeX * ray->cameraX; ray->raydirX = ray->dirX + ray->planeX * ray->cameraX;
ray->raydirY = ray->dirY + ray->planeY * ray->cameraX; ray->raydirY = ray->dirY + ray->planeY * ray->cameraX;
mapX = (int)ray->posX; ray->mapX = (int)ray->posX;
mapY = (int)ray->posY; ray->mapY = (int)ray->posY;
ray->deltadistX = (ray->raydirX == 0) ? 1e30 : fabs(1 / ray->raydirX); ray->deltadistX = (ray->raydirX == 0) ? 1e30 : fabs(1 / ray->raydirX);
ray->deltadistY = (ray->raydirY == 0) ? 1e30 : fabs(1 / ray->raydirY); ray->deltadistY = (ray->raydirY == 0) ? 1e30 : fabs(1 / ray->raydirY);
@ -85,22 +86,22 @@ static int render(t_ray *ray)
if (ray->raydirX < 0) if (ray->raydirX < 0)
{ {
ray->stepX = -1; ray->stepX = -1;
ray->sidedistX = (ray->posX - mapX) * ray->deltadistX; ray->sidedistX = (ray->posX - ray->mapX) * ray->deltadistX;
} }
else else
{ {
ray->stepX = 1; ray->stepX = 1;
ray->sidedistX = (mapX + 1.0 - ray->posX) * ray->deltadistX; ray->sidedistX = (ray->mapX + 1.0 - ray->posX) * ray->deltadistX;
} }
if (ray->raydirY < 0) if (ray->raydirY < 0)
{ {
ray->stepY = -1; ray->stepY = -1;
ray->sidedistY = (ray->posY - mapY) * ray->deltadistY; ray->sidedistY = (ray->posY - ray->mapY) * ray->deltadistY;
} }
else else
{ {
ray->stepY = 1; ray->stepY = 1;
ray->sidedistY = (mapY + 1.0 - ray->posY) * ray->deltadistY; ray->sidedistY = (ray->mapY + 1.0 - ray->posY) * ray->deltadistY;
} }
hit = 0; hit = 0;
@ -110,17 +111,17 @@ static int render(t_ray *ray)
if(ray->sidedistX < ray->sidedistY) if(ray->sidedistX < ray->sidedistY)
{ {
ray->sidedistX += ray->deltadistX; ray->sidedistX += ray->deltadistX;
mapX += ray->stepX; ray->mapX += ray->stepX;
side = 0; side = 0;
} }
else else
{ {
ray->sidedistY += ray->deltadistY; ray->sidedistY += ray->deltadistY;
mapY += ray->stepY; ray->mapY += ray->stepY;
side = 1; side = 1;
} }
//Check if ray has hit a wall //Check if ray has hit a wall
if(worldMap[mapX][mapY] == 1) if(worldMap[ray->mapX][ray->mapY] == 1)
hit = 1; hit = 1;
} }
if(side == 0) if(side == 0)
@ -139,12 +140,25 @@ static int render(t_ray *ray)
drawEnd = height - 1; drawEnd = height - 1;
// draw vertical line // draw vertical line
int y = drawStart; int y = 0;
while (y <= drawStart)
{
img_data[y * (int)width + x] = 0x29f8ff;;
y++;
}
y = drawStart;
while (y <= drawEnd) while (y <= drawEnd)
{ {
img_data[y * (int)width + x] = 0xFF0000; img_data[y * (int)width + x] = 0xFF0000;
y++; y++;
} }
y++;
while (y <= height)
{
img_data[y * (int)width + x] = 0xFF985C;
y++;
}
x++; x++;
} }
@ -158,14 +172,18 @@ static int keypress(int keycode, t_ray *ray)
//move forward if no wall in front of you //move forward if no wall in front of you
if (keycode == 119) if (keycode == 119)
{ {
ray->posX += ray->dirX * ray->movespeed; if (worldMap[(int)((ray->posX + ray->dirX * ray->movespeed))][(int)(ray->posY)] != 1)
ray->posY += ray->dirY * ray->movespeed; ray->posX += ray->dirX * ray->movespeed;
if (worldMap[(int)(ray->posX)][(int)(ray->posY + ray->dirY * ray->movespeed)] != 1)
ray->posY += ray->dirY * ray->movespeed;
} }
//move backwards if no wall behind you //move backwards if no wall behind you
if (keycode == 115) if (keycode == 115)
{ {
ray->posX -= ray->dirX * ray->movespeed; if (worldMap[(int)(ray->posX - ray->dirX * ray->movespeed)][(int)(ray->posY)] != 1)
ray->posY -= ray->dirY * ray->movespeed; ray->posX -= ray->dirX * ray->movespeed;
if (worldMap[(int)(ray->posX)][(int)(ray->posY - ray->dirY * ray->movespeed)] != 1)
ray->posY -= ray->dirY * ray->movespeed;
} }
//rotate to the right //rotate to the right
if (keycode == 100) if (keycode == 100)
@ -189,6 +207,9 @@ static int keypress(int keycode, t_ray *ray)
ray->planeX = ray->planeX * cos(ray->rotspeed) - ray->planeY * sin(ray->rotspeed); ray->planeX = ray->planeX * cos(ray->rotspeed) - ray->planeY * sin(ray->rotspeed);
ray->planeY = ray->oldPlaneX * sin(ray->rotspeed) + ray->planeY * cos(ray->rotspeed); ray->planeY = ray->oldPlaneX * sin(ray->rotspeed) + ray->planeY * cos(ray->rotspeed);
} }
if (keycode == 65307)
exit(0);
// render the updated frame after key press // render the updated frame after key press
render(ray); render(ray);
return (0); return (0);

4
algo.h
View file

@ -6,7 +6,7 @@
/* By: greg <greg@student.42.fr> +#+ +:+ +#+ */ /* By: greg <greg@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/09/30 15:45:59 by grobledo #+# #+# */ /* Created: 2024/09/30 15:45:59 by grobledo #+# #+# */
/* Updated: 2024/10/10 17:53:01 by greg ### ########.fr */ /* Updated: 2024/10/11 04:32:39 by greg ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -56,6 +56,8 @@ typedef struct s_ray
void *win_ptr; void *win_ptr;
void *img_ptr; void *img_ptr;
int *img_data; int *img_data;
int mapX;
int mapY;
} t_ray; } t_ray;
#endif #endif

BIN
cub3d

Binary file not shown.