texture ajouté avec des incohérence a réglé, Il manque: Norme et leak
This commit is contained in:
		
							
								
								
									
										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 | 
							
								
								
									
										102
									
								
								game/dda.c
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								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,47 +105,75 @@ 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; | ||||
|  | ||||
| 	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) | ||||
| 	{ | ||||
| 		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(t_game *game, t_dda *dda, int x) | ||||
| { | ||||
| 	int	y; | ||||
|  | ||||
| 	y = 0; | ||||
| 	while (y < HEIGHT) | ||||
| 	{ | ||||
| 		if (y < dda->draw_start) | ||||
| 		{ | ||||
| 	y = -1; | ||||
| 	while (++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) | ||||
| 		{ | ||||
| 	draw_texture(game, dda, x); | ||||
| 	y = dda->draw_end - 1; | ||||
| 	while (++y < HEIGHT) | ||||
| 		mlx_put_pixel(game->window, x, y, game->map.color_top); | ||||
| } | ||||
| 		y++; | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
| void	draw_dda(t_game *game, t_dda *dda, int x) | ||||
| { | ||||
| 	unsigned int color; | ||||
|  | ||||
| 	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); | ||||
| } | ||||
|  | ||||
| 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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user