we got textures
3
.vscode/settings.json
vendored
@ -5,7 +5,8 @@
|
||||
"screen.h": "c",
|
||||
"mlx42.h": "c",
|
||||
"glfw3.h": "c",
|
||||
"vec_math.h": "c"
|
||||
"vec_math.h": "c",
|
||||
"texture.h": "c"
|
||||
},
|
||||
"cmake.ignoreCMakeListsMissing": true
|
||||
}
|
||||
BIN
assets/bricks_cyan_x64.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/bricks_green_x64.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
assets/bricks_orange_x64.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/bricksx64.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
assets/bricksx64_east.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
assets/bricksx64_north.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
assets/bricksx64_south.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
assets/bricksx64_west.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
15
inc/cub3d.h
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* cub3d.h :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/04 16:46:00 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* cub3d.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
# include "player.h"
|
||||
# include "collision.h"
|
||||
# include "parser.h"
|
||||
# include "texture.h"
|
||||
|
||||
int initialize_cub3d(t_game **game, const char *mapfile);
|
||||
|
||||
|
||||
20
inc/texture.h
Normal file
@ -0,0 +1,20 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* texture.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/06 15:46:20 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/06 15:59:52 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef TEXTURE_H
|
||||
# define TEXTURE_H
|
||||
|
||||
# include "cub3d.h"
|
||||
|
||||
int texture_load(t_game *game);
|
||||
|
||||
#endif
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/06 15:20:37 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/05/06 18:04:13 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -60,6 +60,7 @@ typedef struct s_map
|
||||
char *SO_texture;
|
||||
char *WE_texture;
|
||||
char *EA_texture;
|
||||
mlx_texture_t *textures[4];
|
||||
unsigned int floor_color;
|
||||
unsigned int ceiling_color;
|
||||
} t_map;
|
||||
|
||||
@ -1,16 +1,15 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* map_create.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/23 12:21:13 by whaffman #+# #+# */
|
||||
/* Updated: 2025/04/25 11:36:18 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* map_create.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/23 12:21:13 by whaffman #+# #+# */
|
||||
/* Updated: 2025/05/06 16:00:10 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "cub3d.h"
|
||||
|
||||
|
||||
@ -26,6 +25,7 @@ int map_create(t_game **game, const char *mapfile)
|
||||
perror("Error allocating memory for (*game)->map");
|
||||
return (FAILURE);
|
||||
}
|
||||
ft_memset((*game)->map->textures, 0, sizeof((*game)->map->textures));
|
||||
parse_args(mapfile, (*game));
|
||||
grid = copy_map((*game)->map->grid, (*game)->map->width, (*game)->map->height);
|
||||
if (!grid)
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/05/02 11:58:09 by whaffman #+# #+# */
|
||||
/* Updated: 2025/05/06 15:21:22 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/05/06 18:17:55 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -95,16 +95,16 @@ t_side get_side(t_vec2 ray_dir, double perp_dist)
|
||||
if (perp_dist > 0)
|
||||
{
|
||||
if (ray_dir.x > 0)
|
||||
return (SIDE_EAST);
|
||||
else
|
||||
return (SIDE_WEST);
|
||||
else
|
||||
return (SIDE_EAST);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ray_dir.y > 0)
|
||||
return (SIDE_SOUTH);
|
||||
else
|
||||
return (SIDE_NORTH);
|
||||
else
|
||||
return (SIDE_SOUTH);
|
||||
}
|
||||
}
|
||||
|
||||
@ -122,7 +122,10 @@ t_render cast_ray(t_game *game, int x)
|
||||
perp_dist = dda(ray_dir, pos, game->map);
|
||||
render.perp_dist = fabs(perp_dist);
|
||||
render.side = get_side(ray_dir, perp_dist);
|
||||
render.wall_x = (perp_dist > 0) * (pos.x + ray_dir.x * perp_dist) + (perp_dist <= 0) * (pos.y + ray_dir.y * perp_dist);
|
||||
if (perp_dist < 0)
|
||||
render.wall_x = pos.x + ray_dir.x * render.perp_dist;
|
||||
else
|
||||
render.wall_x = pos.y + ray_dir.y * render.perp_dist;
|
||||
render.wall_x -= floor(render.wall_x);
|
||||
return (render);
|
||||
}
|
||||
@ -140,22 +143,39 @@ unsigned int get_color(t_render render)
|
||||
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);
|
||||
}
|
||||
|
||||
void draw_line(t_game *game, t_render render, int x)
|
||||
{
|
||||
int y;
|
||||
int color;
|
||||
int lineHeight;
|
||||
int drawStart;
|
||||
int texDrawStart;
|
||||
int drawEnd;
|
||||
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;
|
||||
if (drawStart < 0)
|
||||
drawStart = 0;
|
||||
drawEnd = lineHeight / 2 + game->screen->height / 2;
|
||||
drawEnd = lineHeight / 2 + game->screen->height / 2;
|
||||
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 (y < drawStart)
|
||||
@ -163,9 +183,16 @@ void draw_line(t_game *game, t_render render, int x)
|
||||
else if (y > drawEnd)
|
||||
color = game->map->floor_color << 8 | (int)fabs(2 * y * 0xFF / (double)game->screen->height - 0xFF);
|
||||
else
|
||||
color = get_color(render);
|
||||
{
|
||||
|
||||
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);
|
||||
y++;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
41
src/texture/texutre_load.c
Normal file
@ -0,0 +1,41 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* texutre_load.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "texture.h"
|
||||
|
||||
void texture_delete(t_game *game)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (i < 4)
|
||||
{
|
||||
if (game->map->textures[i])
|
||||
mlx_delete_texture(game->map->textures[i]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int texture_load(t_game *game)
|
||||
{
|
||||
game->map->textures[SIDE_NORTH] = mlx_load_png(game->map->NO_texture);
|
||||
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);
|
||||
if (!game->map->textures[SIDE_NORTH] || !game->map->textures[SIDE_EAST]
|
||||
|| !game->map->textures[SIDE_SOUTH] || !game->map->textures[SIDE_WEST])
|
||||
{
|
||||
texture_delete(game);
|
||||
return (FAILURE);
|
||||
}
|
||||
return (SUCCESS);
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* initialize.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/04/25 11:20:49 by whaffman ######## odam.nl */
|
||||
/* ::: :::::::: */
|
||||
/* initialize.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/22 17:08:26 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/06 16:18:44 by qmennen ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -20,6 +20,8 @@ int initialize_cub3d(t_game **game, const char *mapfile)
|
||||
return (FAILURE);
|
||||
if (!map_create(game, mapfile))
|
||||
return (FAILURE);
|
||||
if (!texture_load(*game))
|
||||
return (FAILURE);
|
||||
if (!screen_create(game))
|
||||
return (FAILURE);
|
||||
if (!keyboard_create(game))
|
||||
|
||||
11
test.cub
@ -1,12 +1,11 @@
|
||||
|
||||
|
||||
NO ./path/file.png
|
||||
NO ./assets/bricksx64_north.png
|
||||
|
||||
WE ./path/file.png
|
||||
WE ./assets/bricksx64_west.png
|
||||
|
||||
SO ./path/file.png
|
||||
|
||||
EA ./path/file.png
|
||||
SO ./assets/bricksx64_south.png
|
||||
EA ./assets/bricksx64_east.png
|
||||
|
||||
F 90,30,30
|
||||
|
||||
@ -16,7 +15,7 @@ C 100,100,200
|
||||
|
||||
1111111 111 1111 111111 1111111111 111111
|
||||
1000001110111001 100001 1000001001 10001
|
||||
1000000000000001 100001 100000110111100011
|
||||
1001000000000001 100001 100000110111100011
|
||||
1000001110000001110011111111 110000001000000001
|
||||
1000001 10001000000010000001 100000001000000001
|
||||
1000001110001000000000000001111100000001000000001
|
||||
|
||||