floor and ceilingtexture

This commit is contained in:
Quinten Mennen 2025-05-06 19:03:21 +02:00
parent b0a0cfe722
commit a54f811a93
9 changed files with 77 additions and 45 deletions

BIN
assets/ceiling64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/floor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
/* Updated: 2025/05/06 15:56:57 by qmennen ### ########.fr */
/* Updated: 2025/05/06 18:54:42 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -16,8 +16,8 @@
# define FAILURE 0
# define SUCCESS 1
# define WIDTH 1920
# define HEIGHT 1080
# define WIDTH 1280
# define HEIGHT 720
# define TITLE "Cub3D"
# define RESET "\033[0m"

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
/* Updated: 2025/05/06 18:04:13 by qmennen ### ########.fr */
/* Updated: 2025/05/06 18:36:47 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -60,6 +60,8 @@ typedef struct s_map
char *SO_texture;
char *WE_texture;
char *EA_texture;
mlx_texture_t *texture_floor;
mlx_texture_t *texture_ceiling;
mlx_texture_t *textures[4];
unsigned int floor_color;
unsigned int ceiling_color;

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 15:46:08 by qmennen #+# #+# */
/* Updated: 2025/05/06 15:20:18 by qmennen ### ########.fr */
/* Updated: 2025/05/06 18:56:57 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */
/* Updated: 2025/05/06 18:17:55 by qmennen ### ########.fr */
/* Updated: 2025/05/06 19:01:32 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -130,26 +130,11 @@ t_render cast_ray(t_game *game, int x)
return (render);
}
unsigned int get_color(t_render render)
{
double dist;
const unsigned int color[4] = {
0x488B49,
0x4AAD52,
0x6EB257,
0xC5E063};
dist = (render.perp_dist == 0) * 1e30 + (render.perp_dist > 1) * render.perp_dist + (render.perp_dist <= 1) * 1;
return (color[render.side] << 8 | (int)(1.0 / dist * 255));
}
unsigned int get_texture_color(mlx_texture_t *texture, t_render render, int tex_x, int tex_y)
{
int index;
double dist;
if (render.side == SIDE_NORTH || render.side == SIDE_EAST)
tex_x = texture->width - tex_x - 1;
index = (tex_x + tex_y * texture->height) * texture->bytes_per_pixel;
dist = (render.perp_dist == 0) * 1e30 + (render.perp_dist > 1) * render.perp_dist + (render.perp_dist <= 1) * 1;
return texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 | (int)(1.0 / dist * 255);
@ -166,7 +151,6 @@ void draw_line(t_game *game, t_render render, int x)
int tex_x;
int tex_y;
y = 0;
lineHeight = (int)(game->screen->height / render.perp_dist);
drawStart = -lineHeight / 2 + game->screen->height / 2;
texDrawStart = drawStart;
@ -176,18 +160,13 @@ void draw_line(t_game *game, t_render render, int x)
if (drawEnd >= game->screen->height)
drawEnd = game->screen->height - 1;
tex_x = (int)(render.wall_x * (double)game->map->textures[render.side]->width);
while (y < game->screen->height)
if (render.side == SIDE_NORTH || render.side == SIDE_EAST)
tex_x = game->map->textures[render.side]->width - tex_x - 1;
y = drawStart;
while (y <drawEnd)
{
if (y < drawStart)
color = game->map->ceiling_color << 8 | (int)fabs(2 * y * 0xFF / (double)game->screen->height - 0xFF);
else if (y > drawEnd)
color = game->map->floor_color << 8 | (int)fabs(2 * y * 0xFF / (double)game->screen->height - 0xFF);
else
{
tex_y = (int)(((double) game->map->textures[render.side]->height / (double) lineHeight) * (y - texDrawStart));
color = get_texture_color(game->map->textures[render.side], render, tex_x, tex_y);
}
if (x < 0 || x >= game->screen->width || y < 0 || y >= game->screen->height)
break;
mlx_put_pixel(game->screen->img, x, y, color);
@ -196,12 +175,50 @@ void draw_line(t_game *game, t_render render, int x)
}
}
void draw_floor(t_game *game)
{
int y;
int x;
int color;
double row_dist;
t_vec2 floor_step;
t_vec2 floor_pos;
t_vec2_int floor_cell;
t_vec2_int tex_coords;
const t_vec2 left_ray = sub(game->player->dir, game->player->camera);
const t_vec2 right_ray = add(game->player->dir, game->player->camera);
y = 0;
while (y < game->screen->height)
{
row_dist = 0.5 * game->screen->height / (y - game->screen->height / 2.0);
floor_step = mul(mul(sub(right_ray, left_ray), row_dist), 1.0 / game->screen->width);
floor_pos = add(game->player->pos, mul(left_ray, row_dist));
x = 0;
while (x < game->screen->width)
{
floor_cell = (t_vec2_int){(int)floor_pos.x, (int)floor_pos.y};
tex_coords = (t_vec2_int){(int) (64 * (floor_pos.x - floor_cell.x)) & 63,
(int) (64 * (floor_pos.y - floor_cell.y)) & 63};
floor_pos = add(floor_pos, floor_step);
color = get_texture_color(game->map->texture_floor, (t_render){row_dist, 0, 0}, tex_coords.x, tex_coords.y);
mlx_put_pixel(game->screen->img, x, y, color);
color = get_texture_color(game->map->texture_ceiling, (t_render){row_dist, 0, 0}, tex_coords.x, tex_coords.y);
mlx_put_pixel(game->screen->img, x, game->screen->height - y - 1, color);
x++;
}
y++;
}
}
void cast_rays(t_game *game)
{
int x;
t_render render;
int x;
t_render render;
x = 0;
draw_floor(game);
while (x < game->screen->width)
{
render = cast_ray(game, x);
@ -209,3 +226,4 @@ void cast_rays(t_game *game)
x++;
}
}

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* render.c :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */
/* Updated: 2025/05/04 16:54:33 by whaffman ######## odam.nl */
/* ::: :::::::: */
/* render.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/15 16:28:10 by qmennen #+# #+# */
/* Updated: 2025/05/06 19:02:53 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/05/06 15:45:58 by qmennen #+# #+# */
/* Updated: 2025/05/06 15:55:30 by qmennen ### ########.fr */
/* Updated: 2025/05/06 19:01:15 by qmennen ### ########.fr */
/* */
/* ************************************************************************** */
@ -23,6 +23,16 @@ void texture_delete(t_game *game)
mlx_delete_texture(game->map->textures[i]);
i++;
}
if (game->map->texture_floor)
{
mlx_delete_texture(game->map->texture_floor);
game->map->texture_floor = NULL;
}
if (game->map->texture_ceiling)
{
mlx_delete_texture(game->map->texture_ceiling);
game->map->texture_ceiling = NULL;
}
}
int texture_load(t_game *game)
@ -31,6 +41,8 @@ int texture_load(t_game *game)
game->map->textures[SIDE_EAST] = mlx_load_png(game->map->EA_texture);
game->map->textures[SIDE_SOUTH] = mlx_load_png(game->map->SO_texture);
game->map->textures[SIDE_WEST] = mlx_load_png(game->map->WE_texture);
game->map->texture_floor = mlx_load_png("./assets/floor.png");
game->map->texture_ceiling = mlx_load_png("./assets/ceiling64x64.png");
if (!game->map->textures[SIDE_NORTH] || !game->map->textures[SIDE_EAST]
|| !game->map->textures[SIDE_SOUTH] || !game->map->textures[SIDE_WEST])
{

View File

@ -1,11 +1,11 @@
NO ./assets/bricksx64_north.png
NO ./assets/bricks_cyan_x64.png
WE ./assets/bricksx64_west.png
WE ./assets/bricks_green_x64.png
SO ./assets/bricksx64_south.png
EA ./assets/bricksx64_east.png
SO ./assets/bricks_orange_x64.png
EA ./assets/bricksx64.png
F 90,30,30