manque texture et direction
This commit is contained in:
parent
c1e17997ff
commit
c598ad59cc
4 changed files with 45 additions and 17 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -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
53
algo.c
|
@ -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
4
algo.h
|
@ -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
BIN
cub3d
Binary file not shown.
Loading…
Add table
Reference in a new issue