floor and ceilingtexture
This commit is contained in:
parent
b0a0cfe722
commit
a54f811a93
BIN
assets/ceiling64x64.png
Normal file
BIN
assets/ceiling64x64.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
BIN
assets/floor.png
Normal file
BIN
assets/floor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.6 KiB |
@ -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"
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
||||
@ -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])
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user