texture ajouté avec des incohérence a réglé, Il manque: Norme et leak
This commit is contained in:
parent
d22ab7e610
commit
8533722131
2
Makefile
2
Makefile
@ -9,7 +9,7 @@ SRCS := ${SRCS_MAP} \
|
||||
OBJS := ${SRCS:.c=.o}
|
||||
CC := clang
|
||||
LIBS := libftx/libftx.a MLX42/build/libmlx42.a -ldl -lglfw -lm
|
||||
CFLAGS := -g -Wall -Wextra -Werror -Wno-conversion -Ofast
|
||||
CFLAGS := -g -Wall -Wextra -Werror -Wno-conversion #-Ofast
|
||||
NAME := cub3D
|
||||
|
||||
all: ${NAME}
|
||||
|
BIN
assets/red.png
BIN
assets/red.png
Binary file not shown.
Before Width: | Height: | Size: 631 B After Width: | Height: | Size: 182 KiB |
BIN
assets/red_.png
Normal file
BIN
assets/red_.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 631 B |
94
game/dda.c
94
game/dda.c
@ -6,7 +6,7 @@
|
||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/05/02 15:49:00 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/05/05 15:54:46 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/05/09 14:40:18 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -105,46 +105,74 @@ unsigned int get_rgba(int r, int g, int b, int a)
|
||||
return (r << 24 | g << 16 | b << 8 | a);
|
||||
}
|
||||
|
||||
void draw_line(t_game *game, t_dda *dda, unsigned int color, int x)
|
||||
|
||||
static uint32_t switch_color_bytes(uint32_t bad)
|
||||
{
|
||||
uint32_t good;
|
||||
|
||||
good = ((bad & 0xff) << 24) | (((bad >> 8) & 0xff) << 16)
|
||||
| (((bad >> 16) & 0xff) << 8) | bad >> 24;
|
||||
return (good);
|
||||
}
|
||||
|
||||
uint32_t get_pixel_color(mlx_texture_t *texture, uint32_t x, uint32_t y) {
|
||||
uint32_t *pixel_ptr = (uint32_t*)(texture->pixels + (y * texture->width + x) * texture->bytes_per_pixel);
|
||||
return switch_color_bytes(*pixel_ptr);
|
||||
}
|
||||
|
||||
int get_texture_side(t_dda *dda)
|
||||
{
|
||||
if (dda->side == 0 && dda->step_x < 0)
|
||||
return (0);
|
||||
if (dda->side == 0 && dda->step_x > 0)
|
||||
return (1);
|
||||
if (dda->side == 1 && dda->step_y < 0)
|
||||
return (2);
|
||||
if (dda->side == 1 && dda->step_y > 0)
|
||||
return (3);
|
||||
return (0);
|
||||
}
|
||||
|
||||
void draw_texture(t_game *game, t_dda *dda, double x)
|
||||
{
|
||||
t_texture_draw tex;
|
||||
t_ply *ply;
|
||||
int y;
|
||||
|
||||
y = 0;
|
||||
while (y < HEIGHT)
|
||||
ply = &game->ply;
|
||||
tex.texture = game->textures[get_texture_side(dda)];
|
||||
if (dda->side == 0)
|
||||
tex.wall_x = ply->pos_y + dda->perp_wall_dist * game->ray.dir_y;
|
||||
else
|
||||
tex.wall_x = ply->pos_x + dda->perp_wall_dist * game->ray.dir_x;
|
||||
tex.wall_x -= floor(tex.wall_x);
|
||||
tex.x = (int)(tex.wall_x * (double)tex.texture->width);
|
||||
if ((dda->side == 0 && game->ray.dir_x > 0)
|
||||
|| (dda->side == 1 && game->ray.dir_y < 0))
|
||||
tex.x = tex.texture->width - tex.x - 1;
|
||||
tex.step = 1.0 * tex.texture->height / dda->line_height;
|
||||
tex.pos = (dda->draw_start - tex.texture->height / 2 + dda->line_height / 2) * tex.step;
|
||||
y = dda->draw_start - 1;
|
||||
printf("tex.x: %d\n", tex.x);
|
||||
while (++y < dda->draw_end)
|
||||
{
|
||||
if (y < dda->draw_start)
|
||||
{
|
||||
mlx_put_pixel(game->window, x, y, game->map.color_bot);
|
||||
}
|
||||
else if (y >= dda->draw_start && y <= dda->draw_end)
|
||||
{
|
||||
mlx_put_pixel(game->window, x, y, color);
|
||||
}
|
||||
else if (y > dda->draw_end)
|
||||
{
|
||||
mlx_put_pixel(game->window, x, y, game->map.color_top);
|
||||
}
|
||||
y++;
|
||||
tex.y = (int)tex.pos & (tex.texture->height - 1);
|
||||
tex.pos += tex.step;
|
||||
mlx_put_pixel(game->window, x, y, get_pixel_color(tex.texture, tex.x, tex.y));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void draw_dda(t_game *game, t_dda *dda, int x)
|
||||
void draw(t_game *game, t_dda *dda, int x)
|
||||
{
|
||||
unsigned int color;
|
||||
int y;
|
||||
|
||||
if (dda->step_x < 0 && dda->side == 0) // NORTH
|
||||
color = get_rgba(0, 0, 200, 255);
|
||||
else if (dda->step_x > 0 && dda->side == 0) // SOUTH
|
||||
color = get_rgba(200, 0, 0, 255);
|
||||
else if (dda->step_y < 0 && dda->side == 1) // EAST
|
||||
color = get_rgba(0, 200, 0, 255);
|
||||
else if (dda->step_y > 0 && dda->side == 1) // WEST
|
||||
color = get_rgba(50, 100, 50, 255);
|
||||
else
|
||||
color = get_rgba(0, 0, 0, 255);
|
||||
|
||||
draw_line(game, dda, color, x);
|
||||
y = -1;
|
||||
while (++y < dda->draw_start)
|
||||
mlx_put_pixel(game->window, x, y, game->map.color_bot);
|
||||
draw_texture(game, dda, x);
|
||||
y = dda->draw_end - 1;
|
||||
while (++y < HEIGHT)
|
||||
mlx_put_pixel(game->window, x, y, game->map.color_top);
|
||||
}
|
||||
|
||||
void dda(t_game *game, int x)
|
||||
@ -154,5 +182,5 @@ void dda(t_game *game, int x)
|
||||
init_dda(game, &dda);
|
||||
loop_dda(game, &dda);
|
||||
ray_dda(&dda);
|
||||
draw_dda(game, &dda, x);
|
||||
draw(game, &dda, x);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/04/26 12:59:53 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/05/03 14:50:16 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/05/09 12:44:57 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -16,8 +16,7 @@ int start_game(t_map map)
|
||||
{
|
||||
t_game game;
|
||||
|
||||
init(map, &game);
|
||||
if (!game.mlx)
|
||||
if (init(map, &game))
|
||||
return (1);
|
||||
game.window = mlx_new_image(game.mlx, WIDTH, HEIGHT);
|
||||
if (!game.window)
|
||||
|
16
game/game.h
16
game/game.h
@ -6,7 +6,7 @@
|
||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/04/26 15:29:34 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/05/05 16:54:19 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/05/09 13:11:40 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -56,18 +56,28 @@ typedef struct s_dda
|
||||
int draw_end;
|
||||
} t_dda;
|
||||
|
||||
typedef struct s_texture_draw
|
||||
{
|
||||
mlx_texture_t *texture;
|
||||
double wall_x;
|
||||
int x;
|
||||
int y;
|
||||
double pos;
|
||||
double step;
|
||||
} t_texture_draw;
|
||||
|
||||
typedef struct s_game
|
||||
{
|
||||
mlx_t *mlx;
|
||||
mlx_image_t *window;
|
||||
mlx_image_t textures[4];
|
||||
mlx_texture_t *textures[4];
|
||||
t_ply ply;
|
||||
t_map map;
|
||||
t_ray ray;
|
||||
} t_game;
|
||||
|
||||
/* INIT */
|
||||
void init(t_map map, t_game *game);
|
||||
int init(t_map map, t_game *game);
|
||||
|
||||
/* MANAGE */
|
||||
void manage(mlx_key_data_t keydata, void *param);
|
||||
|
20
game/init.c
20
game/init.c
@ -6,7 +6,7 @@
|
||||
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2023/04/27 14:50:22 by erey-bet #+# #+# */
|
||||
/* Updated: 2023/05/05 17:05:49 by erey-bet ### ########.fr */
|
||||
/* Updated: 2023/05/09 12:44:43 by erey-bet ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -36,30 +36,32 @@ void init_ray(t_ray *ray)
|
||||
ray->dir_y = 0;
|
||||
}
|
||||
|
||||
int init_textures(t_map map, mlx_image_t **textures)
|
||||
int init_textures(t_map map, mlx_texture_t *textures[4])
|
||||
{
|
||||
(*textures)[0] = mlx_load_png(map.img_path[0]);
|
||||
textures[0] = mlx_load_png(map.img_path[0]);
|
||||
if (!textures[0])
|
||||
return (1);
|
||||
(*textures)[1] = mlx_load_png(map.img_path[1]);
|
||||
textures[1] = mlx_load_png(map.img_path[1]);
|
||||
if (!textures[1])
|
||||
return (1);
|
||||
(*textures)[2] = mlx_load_png(map.img_path[2]);
|
||||
textures[2] = mlx_load_png(map.img_path[2]);
|
||||
if (!textures[2])
|
||||
return (1);
|
||||
(*textures)[3] = mlx_load_png(map.img_path[3]);
|
||||
textures[3] = mlx_load_png(map.img_path[3]);
|
||||
if (!textures[3])
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
void init(t_map map, t_game *game)
|
||||
int init(t_map map, t_game *game)
|
||||
{
|
||||
game->mlx = mlx_init(WIDTH, HEIGHT, "jan lili", true);
|
||||
if (!game->mlx)
|
||||
return ;
|
||||
return (1);
|
||||
game->map = map;
|
||||
init_ply(map, &game->ply);
|
||||
init_ray(&game->ray);
|
||||
init_textures(map, &game->textures);
|
||||
if (init_textures(map, game->textures))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
NO ./path_to_the_north_texture
|
||||
SO ./path_to_the_south_texture
|
||||
WE ./path_to_the_west_texture
|
||||
EA ./path_to_the_east_texture
|
||||
NO ./assets/red.png
|
||||
SO ./assets/blue.png
|
||||
WE ./assets/green.png
|
||||
EA ./assets/purple.png
|
||||
|
||||
F 200,100,0
|
||||
C 225,30,0
|
||||
|
Loading…
Reference in New Issue
Block a user