From fe145d4c59886b857b0966f8e9b673cfacc0695f Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Mon, 24 Feb 2020 22:20:33 +0100 Subject: found 2 infinit loops hehe --- inc/cub3d.h | 3 ++- map/map_one.cub | 2 +- src/ft_draw_sprite.c | 47 +++++++++++++++++++++++++---------------------- src/ft_raycasting.c | 50 +++++++++++++++++++++++++++----------------------- 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/inc/cub3d.h b/inc/cub3d.h index 5f1c6f8..c3236a5 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -90,6 +90,7 @@ void ft_draw_life_bar(size_t map_w, const int8_t life, t_cub *cl); void ft_music(t_cub *cl); -void ft_draw_sprite(t_cub *cl, int i); +void ft_calc_sprite_norme(t_cub *cl); +void ft_draw_sprite(t_cub *cl); # endif diff --git a/map/map_one.cub b/map/map_one.cub index d135e42..05cb705 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -19,7 +19,7 @@ F 50,190,124 1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 -1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 1 +1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 9cd7dae..a3371b4 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -16,38 +16,41 @@ #include #include #include - +/* void ft_draw_verline_sprite(t_cub *cl, int x, int y, int tex_y) { if (cl->tlist[4].tex_x) - cl->img.ptr[x * 4 + (cl->img.sizeline * y)] = - (char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 * - cl->tlist[4].img_h * tex_y]; - cl->img.ptr[x * 4 + (cl->img.sizeline * y) + 1] = - (char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 * - cl->tlist[4].img_h * tex_y + 1]; - cl->img.ptr[x * 4 + (cl->img.sizeline * y) + 2] = - (char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 * - cl->tlist[4].img_h * tex_y + 2]; - cl->img.ptr[x * 4 + cl->wlist->x_size * y + 3] = (char)0; } - +*/ void - ft_draw_sprite(t_cub *cl, int x) + ft_draw_sprite(t_cub *cl) { - int hor_it; + int itx; + int ity; int d; + int tex_x; int tex_y; - hor_it = cl->sp_list.s_start_y; - while (hor_it < cl->sp_list.s_end_y) + itx = cl->sp_list.s_start_x; + while (itx < cl->sp_list.s_end_x) { - d = hor_it * 256 - cl->wlist->y_size * 128 + cl->rlist.line_h * 128; - d = (d <= 0) ? (-d) : (d); - tex_y = ((d * cl->tlist[4].img_h) / cl->rlist.line_h) / 256; - (tex_y < 0) ? (tex_y = 0) : 0; - ft_draw_verline_sprite(cl, x, hor_it, tex_y); - hor_it++; + tex_x = (int)((itx - (-cl->sp_list.s_w / 2 + cl->sp_list.s_screen_x)) + * cl->tlist[4].img_w / cl->sp_list.s_w); + ity = cl->sp_list.s_start_y; + while (ity < cl->sp_list.s_end_y) + { + d = ity * 256 - cl->wlist->y_size * 128 + cl->sp_list.s_h * 128; + tex_y = ((d * cl->tlist[4].img_h) / cl->sp_list.s_h) / 256; + if (*(cl->tlist[4].ptr + tex_x + tex_y * cl->tlist[4].sizeline / 4)) + { + /*cl->img.ptr[tex_x * 4 + (cl->img.sizeline * tex_y)] =*/ + /*(char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 **/ + /*cl->tlist[4].img_h * tex_y];*/ + /*puts("qwe");*/ + } + ity++; + } + itx++; } } diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index d51b77f..626ced4 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -13,34 +13,17 @@ #include #include #include +#include #include #include -static void - ft_calc_sprite_norme(t_cub *cl) -{ - if (cl->sp_list.s_start_y < 0) - cl->sp_list.s_start_y = 0; - cl->sp_list.s_end_y = cl->sp_list.s_h / 2 + cl->wlist->y_size / 2; - if (cl->sp_list.s_end_y > (int)cl->wlist->y_size) - cl->sp_list.s_end_y = cl->wlist->y_size - 1; - cl->sp_list.s_w = abs((int)(cl->wlist->x_size - * cl->sp_list.sprite_transform_y)); /*sprite width*/ - cl->sp_list.s_start_x = -cl->sp_list.s_w / 2 + cl->sp_list.s_screen_x; - if (cl->sp_list.s_start_x < 0) - cl->sp_list.s_start_y = 0; - cl->sp_list.s_end_x = cl->sp_list.s_w / 2 + cl->wlist->x_size; - if (cl->sp_list.s_end_x < (int)cl->wlist->x_size) - cl->sp_list.s_end_x = cl->wlist->x_size - 1; -} - static void ft_calc_sprite(t_cub *cl) { cl->sp_list.s_x = cl->sp_list.s_pos_x - cl->plist->pos_x; cl->sp_list.s_y = cl->sp_list.s_pos_y - cl->plist->pos_y; - cl->sp_list.inv_c_m = 1.0 / (cl->plist->plane_x * cl->plist->dir_x - - cl->plist->dir_y * cl->plist->plane_y); + cl->sp_list.inv_c_m = 1.0 / (cl->plist->plane_x * cl->plist->dir_y + - cl->plist->dir_x * cl->plist->plane_y); cl->sp_list.sprite_transform_x = cl->sp_list.inv_c_m * (cl->plist->dir_y * cl->sp_list.s_x - cl->plist->dir_x * cl->sp_list.s_y); @@ -52,10 +35,32 @@ static void / cl->sp_list.sprite_transform_y)); cl->sp_list.s_h = abs((int)(cl->wlist->y_size * cl->sp_list.sprite_transform_y)); - cl->sp_list.s_start_y = -cl->sp_list.s_h / 2 + cl->wlist->y_size / 2; ft_calc_sprite_norme(cl); } +void + ft_calc_sprite_norme(t_cub *cl) +{ + cl->sp_list.s_start_y = -cl->sp_list.s_h / 2 + cl->wlist->y_size / 2; + if (cl->sp_list.s_start_y < 0) + cl->sp_list.s_start_y = 0; + cl->sp_list.s_end_y = cl->sp_list.s_h / 2 + cl->wlist->y_size / 2; + if (cl->sp_list.s_end_y > (int)cl->wlist->y_size) + cl->sp_list.s_end_y = cl->wlist->y_size - 1; + cl->sp_list.s_w = abs((int)(cl->wlist->x_size + * cl->sp_list.sprite_transform_y)); /*sprite width*/ + cl->sp_list.s_start_x = -cl->sp_list.s_w / 2 + cl->sp_list.s_screen_x; + if (cl->sp_list.s_start_x < 0) + cl->sp_list.s_start_y = 0; + cl->sp_list.s_end_x = cl->sp_list.s_w / 2 + cl->wlist->x_size; + if (cl->sp_list.s_end_x < (int)cl->wlist->x_size) + cl->sp_list.s_end_x = cl->wlist->x_size - 1; + /*ft_printf("start x: %d\nstart y : %d\n", cl->sp_list.s_start_x, cl->sp_list.s_start_y);*/ + /*ft_printf("end x: %d\nend y : %d\n", cl->sp_list.s_end_x, cl->sp_list.s_end_y);*/ + /*ft_draw_sprite(cl);*/ +} + + void ft_calc_tex(t_cub *clist) { @@ -112,6 +117,7 @@ void i = 0; wl = cl->wlist; + ft_calc_sprite(cl); while (i < wl->x_size) { ft_initray(cl, i); @@ -124,8 +130,6 @@ void cl->rlist.wall_b = wl->y_size - 1; ft_choose_tex(cl); ft_calc_tex(cl); - ft_calc_sprite(cl); - /* ft_draw_sprite(cl , i); */ ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); i++; } -- cgit v1.2.3 From 3363be36b7ffe90fc335e07ebb1dae14366216e8 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Mon, 24 Feb 2020 23:14:16 +0100 Subject: gang --- inc/cub3d.h | 1 + src/ft_draw_scene.c | 1 + src/ft_draw_sprite.c | 6 +++--- src/ft_raycasting.c | 5 ++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/inc/cub3d.h b/inc/cub3d.h index c3236a5..8eebc00 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -90,6 +90,7 @@ void ft_draw_life_bar(size_t map_w, const int8_t life, t_cub *cl); void ft_music(t_cub *cl); +void ft_calc_sprite(t_cub *cl); void ft_calc_sprite_norme(t_cub *cl); void ft_draw_sprite(t_cub *cl); diff --git a/src/ft_draw_scene.c b/src/ft_draw_scene.c index b5f2283..0df3596 100644 --- a/src/ft_draw_scene.c +++ b/src/ft_draw_scene.c @@ -22,6 +22,7 @@ void clist->wlist->x_size, clist->wlist->y_size); clist->img.ptr = mlx_get_data_addr(clist->img.img, &clist->img.bpp, &clist->img.sizeline, &clist->img.endian); + ft_calc_sprite(clist); ft_castray(clist); if (clist->ishud) ft_draw_hud(clist); diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index a3371b4..7e7114f 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -44,9 +44,9 @@ void tex_y = ((d * cl->tlist[4].img_h) / cl->sp_list.s_h) / 256; if (*(cl->tlist[4].ptr + tex_x + tex_y * cl->tlist[4].sizeline / 4)) { - /*cl->img.ptr[tex_x * 4 + (cl->img.sizeline * tex_y)] =*/ - /*(char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 **/ - /*cl->tlist[4].img_h * tex_y];*/ + cl->img.ptr[tex_x * 4 + (cl->img.sizeline * tex_y)] = + (char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 * + cl->tlist[4].img_h * tex_y]; /*puts("qwe");*/ } ity++; diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 626ced4..5bf0785 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -17,7 +17,7 @@ #include #include -static void +void ft_calc_sprite(t_cub *cl) { cl->sp_list.s_x = cl->sp_list.s_pos_x - cl->plist->pos_x; @@ -57,7 +57,7 @@ void cl->sp_list.s_end_x = cl->wlist->x_size - 1; /*ft_printf("start x: %d\nstart y : %d\n", cl->sp_list.s_start_x, cl->sp_list.s_start_y);*/ /*ft_printf("end x: %d\nend y : %d\n", cl->sp_list.s_end_x, cl->sp_list.s_end_y);*/ - /*ft_draw_sprite(cl);*/ + ft_draw_sprite(cl); } @@ -117,7 +117,6 @@ void i = 0; wl = cl->wlist; - ft_calc_sprite(cl); while (i < wl->x_size) { ft_initray(cl, i); -- cgit v1.2.3 From cc85b0a701b558e18299822f7091fc2fd137b14b Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Tue, 25 Feb 2020 16:43:54 +0100 Subject: bunch of garbage --- inc/cub3d.h | 1 + inc/cub3d_structs.h | 4 ++- map/map_one.cub | 4 +-- src/ft_draw_sprite.c | 30 +++++++++------------- src/ft_get_player_spawn.c | 1 + src/ft_get_sprite.c | 4 +-- src/ft_raycasting.c | 63 ++++++++++++++++++++++++----------------------- 7 files changed, 52 insertions(+), 55 deletions(-) diff --git a/inc/cub3d.h b/inc/cub3d.h index 8eebc00..24ea92a 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -93,5 +93,6 @@ void ft_music(t_cub *cl); void ft_calc_sprite(t_cub *cl); void ft_calc_sprite_norme(t_cub *cl); void ft_draw_sprite(t_cub *cl); +void ft_get_sprite_spawn(t_cub *cl); # endif diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index a173e8c..91a1ee9 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -50,6 +50,8 @@ typedef struct s_rgb typedef struct s_sprite { int32_t s_screen_x; + int32_t x; + int32_t y; int32_t s_pos_x; int32_t s_pos_y; double s_x; @@ -137,7 +139,7 @@ typedef struct s_cub struct s_rgb f_rgb; struct s_rgb c_rgb; struct s_img tlist[5]; - struct s_sprite sp_list; + struct s_sprite sprites; } t_cub; # endif diff --git a/map/map_one.cub b/map/map_one.cub index 05cb705..5a322c2 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,8 +10,8 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 -1 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 0 1 +1 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 7e7114f..28ffb10 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -16,32 +16,24 @@ #include #include #include -/* -void - ft_draw_verline_sprite(t_cub *cl, int x, int y, int tex_y) -{ - if (cl->tlist[4].tex_x) -} -*/ + void ft_draw_sprite(t_cub *cl) { - int itx; - int ity; int d; int tex_x; int tex_y; - itx = cl->sp_list.s_start_x; - while (itx < cl->sp_list.s_end_x) + cl->sprites.x = cl->sprites.s_start_x; + while (cl->sprites.x < cl->sprites.s_end_x) { - tex_x = (int)((itx - (-cl->sp_list.s_w / 2 + cl->sp_list.s_screen_x)) - * cl->tlist[4].img_w / cl->sp_list.s_w); - ity = cl->sp_list.s_start_y; - while (ity < cl->sp_list.s_end_y) + tex_x = (int)((cl->sprites.x - (-cl->sprites.s_w / 2 + cl->sprites.s_screen_x)) + * cl->tlist[4].img_w / cl->sprites.s_w); + cl->sprites.y = cl->sprites.s_start_y; + while (cl->sprites.y < cl->sprites.s_end_y) { - d = ity * 256 - cl->wlist->y_size * 128 + cl->sp_list.s_h * 128; - tex_y = ((d * cl->tlist[4].img_h) / cl->sp_list.s_h) / 256; + d = cl->sprites.y * 256 - cl->wlist->y_size * 128 + cl->sprites.s_h * 128; + tex_y = ((d * cl->tlist[4].img_h) / cl->sprites.s_h) / 256; if (*(cl->tlist[4].ptr + tex_x + tex_y * cl->tlist[4].sizeline / 4)) { cl->img.ptr[tex_x * 4 + (cl->img.sizeline * tex_y)] = @@ -49,8 +41,8 @@ void cl->tlist[4].img_h * tex_y]; /*puts("qwe");*/ } - ity++; + cl->sprites.y++; } - itx++; + cl->sprites.x++; } } diff --git a/src/ft_get_player_spawn.c b/src/ft_get_player_spawn.c index 617ec22..774a80e 100644 --- a/src/ft_get_player_spawn.c +++ b/src/ft_get_player_spawn.c @@ -82,6 +82,7 @@ void plist->start_x = plist->pos_x; plist->start_y = plist->pos_y; ft_get_start_side(clist->mlist->map[y][x], clist->plist); + ft_get_sprite_spawn(clist); return ; } x++; diff --git a/src/ft_get_sprite.c b/src/ft_get_sprite.c index 806489f..76629c5 100644 --- a/src/ft_get_sprite.c +++ b/src/ft_get_sprite.c @@ -28,8 +28,8 @@ void { if (ft_ischarset("2", clist->mlist->map[y][x])) { - clist->sp_list.s_pos_x = x + 0.5; - clist->sp_list.s_pos_y = y + 0.5; + clist->sprites.s_pos_x = x + 0.5; + clist->sprites.s_pos_y = y + 0.5; return ; } x++; diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 5bf0785..be4a815 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -20,44 +20,45 @@ void ft_calc_sprite(t_cub *cl) { - cl->sp_list.s_x = cl->sp_list.s_pos_x - cl->plist->pos_x; - cl->sp_list.s_y = cl->sp_list.s_pos_y - cl->plist->pos_y; - cl->sp_list.inv_c_m = 1.0 / (cl->plist->plane_x * cl->plist->dir_y + cl->sprites.s_x = cl->sprites.s_pos_x - cl->plist->pos_x; + cl->sprites.s_y = cl->sprites.s_pos_y - cl->plist->pos_y; + cl->sprites.inv_c_m = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); - cl->sp_list.sprite_transform_x = cl->sp_list.inv_c_m - * (cl->plist->dir_y * cl->sp_list.s_x - - cl->plist->dir_x * cl->sp_list.s_y); - cl->sp_list.sprite_transform_y = cl->sp_list.inv_c_m - * (cl->plist->plane_y * cl->sp_list.s_x - - cl->plist->plane_x * cl->sp_list.s_y); - cl->sp_list.s_screen_x = (int)((cl->wlist->y_size / 2) - * (1 + cl->sp_list.sprite_transform_x - / cl->sp_list.sprite_transform_y)); - cl->sp_list.s_h = - abs((int)(cl->wlist->y_size * cl->sp_list.sprite_transform_y)); + cl->sprites.sprite_transform_x = cl->sprites.inv_c_m + * (cl->plist->dir_y * cl->sprites.s_x + - cl->plist->dir_x * cl->sprites.s_y); + cl->sprites.sprite_transform_y = cl->sprites.inv_c_m + * (-cl->plist->plane_y * cl->sprites.s_x + + cl->plist->plane_x * cl->sprites.s_y); + cl->sprites.s_screen_x = (int)((cl->wlist->x_size / 2) + * (1 + cl->sprites.sprite_transform_x + / cl->sprites.sprite_transform_y)); + cl->sprites.s_h = + abs((int)(cl->wlist->y_size * cl->sprites.sprite_transform_y)); ft_calc_sprite_norme(cl); } void ft_calc_sprite_norme(t_cub *cl) { - cl->sp_list.s_start_y = -cl->sp_list.s_h / 2 + cl->wlist->y_size / 2; - if (cl->sp_list.s_start_y < 0) - cl->sp_list.s_start_y = 0; - cl->sp_list.s_end_y = cl->sp_list.s_h / 2 + cl->wlist->y_size / 2; - if (cl->sp_list.s_end_y > (int)cl->wlist->y_size) - cl->sp_list.s_end_y = cl->wlist->y_size - 1; - cl->sp_list.s_w = abs((int)(cl->wlist->x_size - * cl->sp_list.sprite_transform_y)); /*sprite width*/ - cl->sp_list.s_start_x = -cl->sp_list.s_w / 2 + cl->sp_list.s_screen_x; - if (cl->sp_list.s_start_x < 0) - cl->sp_list.s_start_y = 0; - cl->sp_list.s_end_x = cl->sp_list.s_w / 2 + cl->wlist->x_size; - if (cl->sp_list.s_end_x < (int)cl->wlist->x_size) - cl->sp_list.s_end_x = cl->wlist->x_size - 1; - /*ft_printf("start x: %d\nstart y : %d\n", cl->sp_list.s_start_x, cl->sp_list.s_start_y);*/ - /*ft_printf("end x: %d\nend y : %d\n", cl->sp_list.s_end_x, cl->sp_list.s_end_y);*/ - ft_draw_sprite(cl); + cl->sprites.s_start_y = -cl->sprites.s_h / 2 + cl->wlist->y_size / 2; + if (cl->sprites.s_start_y < 0) + cl->sprites.s_start_y = 0; + cl->sprites.s_end_y = cl->sprites.s_h / 2 + cl->wlist->y_size / 2; + if (cl->sprites.s_end_y > (int)cl->wlist->y_size) + cl->sprites.s_end_y = cl->wlist->y_size - 1; + cl->sprites.s_w = abs((int)(cl->wlist->y_size + / cl->sprites.sprite_transform_y)); /*sprite width*/ + cl->sprites.s_start_x = -cl->sprites.s_w / 2 + cl->sprites.s_screen_x; + if (cl->sprites.s_start_x < 0) + cl->sprites.s_start_x = 0; + cl->sprites.s_end_x = cl->sprites.s_w / 2 + cl->sprites.s_screen_x; + printf("%d\n", cl->sprites.s_w); + if (cl->sprites.s_end_x > (int)cl->wlist->x_size) + cl->sprites.s_end_x = cl->wlist->x_size - 1; + /*ft_printf("start x: %d\nend x : %d\n", cl->sprites.s_start_x, cl->sprites.s_end_x);*/ + /*ft_printf("start y: %d\nend y : %d\n", cl->sprites.s_start_y, cl->sprites.s_end_y);*/ + /*ft_draw_sprite(cl);*/ } -- cgit v1.2.3 From 51dd3734caadd0c3b943da3410772c65558280cc Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Tue, 25 Feb 2020 17:33:15 +0100 Subject: ??? --- inc/cub3d.h | 2 +- inc/cub3d_structs.h | 26 ++++++++-------- src/ft_draw_sprite.c | 44 +++++++++++++-------------- src/ft_get_sprite.c | 4 +-- src/ft_raycasting.c | 85 ++++++++++++++++++++++++++-------------------------- 5 files changed, 82 insertions(+), 79 deletions(-) diff --git a/inc/cub3d.h b/inc/cub3d.h index 24ea92a..310e00d 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -92,7 +92,7 @@ void ft_draw_life_bar(size_t map_w, void ft_music(t_cub *cl); void ft_calc_sprite(t_cub *cl); void ft_calc_sprite_norme(t_cub *cl); -void ft_draw_sprite(t_cub *cl); +void ft_draw_sprite(t_cub *cl, t_sprite *sprite); void ft_get_sprite_spawn(t_cub *cl); # endif diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index 91a1ee9..a8ae385 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -49,24 +49,26 @@ typedef struct s_rgb typedef struct s_sprite { - int32_t s_screen_x; + int32_t spritescreenx; int32_t x; int32_t y; + int32_t tex_x; + int32_t tex_y; int32_t s_pos_x; int32_t s_pos_y; - double s_x; - double s_y; - int32_t s_h; - int32_t s_w; - int32_t s_start_x; - int32_t s_start_y; - int32_t s_end_x; - int32_t s_end_y; + double spritex; + double spritey; + int32_t spriteheight; + int32_t spritewidth; + int32_t drawstartx; + int32_t drawstarty; + int32_t drawendx; + int32_t drawendy; int32_t s_tex_y; - double sprite_transform_x; - double sprite_transform_y; + double transformx; + double transformy; double sprite_dist; - double inv_c_m; + double invdet; } t_sprite; typedef struct s_player diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 28ffb10..03d3ca7 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -18,31 +18,31 @@ #include void - ft_draw_sprite(t_cub *cl) + ft_draw_sprite(t_cub *cl, t_sprite *sprite) { - int d; - int tex_x; - int tex_y; - - cl->sprites.x = cl->sprites.s_start_x; - while (cl->sprites.x < cl->sprites.s_end_x) + int32_t d; + sprite->x = sprite->drawstartx; + while (sprite->x < sprite->drawendx) { - tex_x = (int)((cl->sprites.x - (-cl->sprites.s_w / 2 + cl->sprites.s_screen_x)) - * cl->tlist[4].img_w / cl->sprites.s_w); - cl->sprites.y = cl->sprites.s_start_y; - while (cl->sprites.y < cl->sprites.s_end_y) - { - d = cl->sprites.y * 256 - cl->wlist->y_size * 128 + cl->sprites.s_h * 128; - tex_y = ((d * cl->tlist[4].img_h) / cl->sprites.s_h) / 256; - if (*(cl->tlist[4].ptr + tex_x + tex_y * cl->tlist[4].sizeline / 4)) + sprite->tex_x = (int32_t)((sprite->x - (-sprite->spritewidth / 2 + + sprite->spritescreenx)) * cl->tlist[4].img_w / sprite->spritewidth); + sprite->y = sprite->drawstarty; + if (sprite->transformy > 0 && sprite->x >= 0 && + sprite->x < (int32_t)cl->wlist->x_size) + while (sprite->y < sprite->drawendy) { - cl->img.ptr[tex_x * 4 + (cl->img.sizeline * tex_y)] = - (char)cl->tlist[4].ptr[cl->tlist[4].tex_x * 4 + 4 * - cl->tlist[4].img_h * tex_y]; - /*puts("qwe");*/ + d = (sprite->y) * 256 - cl->wlist->y_size * 128 + + sprite->spriteheight * 128; + sprite->tex_y = ((d * cl->tlist[4].img_h) / + sprite->spriteheight) / 256; + if (*(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * + cl->tlist[4].sizeline / 4)) + *(cl->img.ptr + sprite->x + sprite->y * + cl->img.sizeline / 4) = + *(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4); + sprite->y++; } - cl->sprites.y++; - } - cl->sprites.x++; + sprite->x++; } + } diff --git a/src/ft_get_sprite.c b/src/ft_get_sprite.c index 76629c5..d99f12e 100644 --- a/src/ft_get_sprite.c +++ b/src/ft_get_sprite.c @@ -28,8 +28,8 @@ void { if (ft_ischarset("2", clist->mlist->map[y][x])) { - clist->sprites.s_pos_x = x + 0.5; - clist->sprites.s_pos_y = y + 0.5; + clist->sprites.spritex = x + 0.5; + clist->sprites.spritey = y + 0.5; return ; } x++; diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index be4a815..d97c231 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -18,49 +18,49 @@ #include void - ft_calc_sprite(t_cub *cl) + ft_sprite_height(t_cub *cl, t_sprite *sprite) { - cl->sprites.s_x = cl->sprites.s_pos_x - cl->plist->pos_x; - cl->sprites.s_y = cl->sprites.s_pos_y - cl->plist->pos_y; - cl->sprites.inv_c_m = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - - cl->plist->dir_x * cl->plist->plane_y); - cl->sprites.sprite_transform_x = cl->sprites.inv_c_m - * (cl->plist->dir_y * cl->sprites.s_x - - cl->plist->dir_x * cl->sprites.s_y); - cl->sprites.sprite_transform_y = cl->sprites.inv_c_m - * (-cl->plist->plane_y * cl->sprites.s_x - + cl->plist->plane_x * cl->sprites.s_y); - cl->sprites.s_screen_x = (int)((cl->wlist->x_size / 2) - * (1 + cl->sprites.sprite_transform_x - / cl->sprites.sprite_transform_y)); - cl->sprites.s_h = - abs((int)(cl->wlist->y_size * cl->sprites.sprite_transform_y)); - ft_calc_sprite_norme(cl); + sprite->spriteheight = abs((int)(cl->wlist->y_size / (sprite->transformy))); + sprite->drawstarty = -sprite->spriteheight / 2 + cl->wlist->y_size / 2; + if (sprite->drawstarty < 0) + sprite->drawstarty = 0; + sprite->drawendy = sprite->spriteheight / 2 + cl->wlist->y_size / 2; + if (sprite->drawendy >= (int)cl->wlist->y_size) + sprite->drawendy = cl->wlist->y_size; } void - ft_calc_sprite_norme(t_cub *cl) + ft_sprite_width(t_cub *cl, t_sprite *sprite) { - cl->sprites.s_start_y = -cl->sprites.s_h / 2 + cl->wlist->y_size / 2; - if (cl->sprites.s_start_y < 0) - cl->sprites.s_start_y = 0; - cl->sprites.s_end_y = cl->sprites.s_h / 2 + cl->wlist->y_size / 2; - if (cl->sprites.s_end_y > (int)cl->wlist->y_size) - cl->sprites.s_end_y = cl->wlist->y_size - 1; - cl->sprites.s_w = abs((int)(cl->wlist->y_size - / cl->sprites.sprite_transform_y)); /*sprite width*/ - cl->sprites.s_start_x = -cl->sprites.s_w / 2 + cl->sprites.s_screen_x; - if (cl->sprites.s_start_x < 0) - cl->sprites.s_start_x = 0; - cl->sprites.s_end_x = cl->sprites.s_w / 2 + cl->sprites.s_screen_x; - printf("%d\n", cl->sprites.s_w); - if (cl->sprites.s_end_x > (int)cl->wlist->x_size) - cl->sprites.s_end_x = cl->wlist->x_size - 1; - /*ft_printf("start x: %d\nend x : %d\n", cl->sprites.s_start_x, cl->sprites.s_end_x);*/ - /*ft_printf("start y: %d\nend y : %d\n", cl->sprites.s_start_y, cl->sprites.s_end_y);*/ - /*ft_draw_sprite(cl);*/ + sprite->spritewidth = abs((int)(cl->wlist->x_size / (sprite->transformy))); + sprite->drawstartx = -sprite->spritewidth / 2 + sprite->spritescreenx; + if (sprite->drawstartx < 0) + sprite->drawstartx = 0; + sprite->drawendx = sprite->spritewidth / 2 + sprite->spritescreenx; + if (sprite->drawendx >= (int)cl->wlist->x_size) + sprite->drawendx = cl->wlist->x_size; } +void + ft_calc_sprite(t_cub *cl) +{ + t_sprite sprite; + + sprite = cl->sprites; + sprite.spritex = (sprite.spritex + 0.5) - cl->plist->pos_x; + sprite.spritey = (sprite.spritey + 0.5) - cl->plist->pos_y; + sprite.invdet = 1.0 / (cl->plist->plane_x * + cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); + sprite.transformx = sprite.invdet * (cl->plist->dir_y * + sprite.spritex - cl->plist->dir_x * sprite.spritey); + sprite.transformy = sprite.invdet * + (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); + sprite.spritescreenx = (int)((cl->wlist->x_size / 2) * + (1 + sprite.transformx / sprite.transformy)); + ft_sprite_height(cl, &sprite); + ft_sprite_width(cl, &sprite); + ft_draw_sprite(cl, &sprite); +} void ft_calc_tex(t_cub *clist) @@ -82,8 +82,8 @@ void - clist->tlist[clist->w_side].tex_x - 1; } -static void - ft_initray(t_cub *cl, uint16_t i) + static void +ft_initray(t_cub *cl, uint16_t i) { t_win *wl; t_player *pl; @@ -103,15 +103,15 @@ static void if (cl->rlist.side == 0) { cl->rlist.wall_dist = (cl->rlist.sqx - cl->rlist.x_ray_pos + - (1 - cl->mlist->x_step) / 2) / cl->rlist.x_ray_dir; + (1 - cl->mlist->x_step) / 2) / cl->rlist.x_ray_dir; } else cl->rlist.wall_dist = (cl->rlist.sqy - cl->rlist.y_ray_pos + - (1 - cl->mlist->y_step) / 2) / cl->rlist.y_ray_dir; + (1 - cl->mlist->y_step) / 2) / cl->rlist.y_ray_dir; } -void - ft_castray(t_cub *cl) + void +ft_castray(t_cub *cl) { uint16_t i; t_win *wl; @@ -130,6 +130,7 @@ void cl->rlist.wall_b = wl->y_size - 1; ft_choose_tex(cl); ft_calc_tex(cl); + ft_calc_sprite(cl); ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); i++; } -- cgit v1.2.3 From 3f8b598e0a1b60475fdf8aa98c601b4513a24efa Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Tue, 25 Feb 2020 18:09:57 +0100 Subject: gee --- map/map_one.cub | 4 ++-- src/ft_draw_scene.c | 2 +- src/ft_draw_sprite.c | 8 +++++--- src/ft_raycasting.c | 1 - 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/map/map_one.cub b/map/map_one.cub index 5a322c2..3f5eb59 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -1,4 +1,4 @@ -R 1400 900 +R 1000 700 NO ./media/img/BRIQUASSES.xpm SO ./media/img/BRIQUASSE_3.xpm @@ -10,7 +10,7 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 diff --git a/src/ft_draw_scene.c b/src/ft_draw_scene.c index 0df3596..3f43495 100644 --- a/src/ft_draw_scene.c +++ b/src/ft_draw_scene.c @@ -22,8 +22,8 @@ void clist->wlist->x_size, clist->wlist->y_size); clist->img.ptr = mlx_get_data_addr(clist->img.img, &clist->img.bpp, &clist->img.sizeline, &clist->img.endian); - ft_calc_sprite(clist); ft_castray(clist); + ft_calc_sprite(clist); if (clist->ishud) ft_draw_hud(clist); mlx_put_image_to_window(clist->wlist->wlx, diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 03d3ca7..701587f 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -21,6 +21,7 @@ void ft_draw_sprite(t_cub *cl, t_sprite *sprite) { int32_t d; + sprite->x = sprite->drawstartx; while (sprite->x < sprite->drawendx) { @@ -31,14 +32,15 @@ void sprite->x < (int32_t)cl->wlist->x_size) while (sprite->y < sprite->drawendy) { + puts("qwe"); d = (sprite->y) * 256 - cl->wlist->y_size * 128 + sprite->spriteheight * 128; sprite->tex_y = ((d * cl->tlist[4].img_h) / - sprite->spriteheight) / 256; + sprite->spriteheight) / 128; if (*(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4)) - *(cl->img.ptr + sprite->x + sprite->y * - cl->img.sizeline / 4) = + cl->img.ptr[sprite->x + sprite->y * + cl->img.sizeline / 4] = *(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4); sprite->y++; } diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index d97c231..59021d3 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -130,7 +130,6 @@ ft_castray(t_cub *cl) cl->rlist.wall_b = wl->y_size - 1; ft_choose_tex(cl); ft_calc_tex(cl); - ft_calc_sprite(cl); ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); i++; } -- cgit v1.2.3 From 903fe03f0f6b1f70faa3139b57db24cb6c51b0a6 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Wed, 26 Feb 2020 12:19:10 +0100 Subject: only one floating sprite, one line / 2 correct, start and end seems flawed --- src/ft_draw_sprite.c | 4 ++-- src/ft_raycasting.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 701587f..c81e72b 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -22,6 +22,7 @@ void { int32_t d; + printf("start x : %d\nstart y : %d\nend x : %d\nend y : %d\n", sprite->drawstartx, sprite->drawstarty, sprite->drawendy, sprite->drawendy); sprite->x = sprite->drawstartx; while (sprite->x < sprite->drawendx) { @@ -32,7 +33,6 @@ void sprite->x < (int32_t)cl->wlist->x_size) while (sprite->y < sprite->drawendy) { - puts("qwe"); d = (sprite->y) * 256 - cl->wlist->y_size * 128 + sprite->spriteheight * 128; sprite->tex_y = ((d * cl->tlist[4].img_h) / @@ -40,7 +40,7 @@ void if (*(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4)) cl->img.ptr[sprite->x + sprite->y * - cl->img.sizeline / 4] = + cl->img.sizeline] = *(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4); sprite->y++; } diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 59021d3..e7cc4ef 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -47,12 +47,12 @@ void t_sprite sprite; sprite = cl->sprites; - sprite.spritex = (sprite.spritex + 0.5) - cl->plist->pos_x; - sprite.spritey = (sprite.spritey + 0.5) - cl->plist->pos_y; + sprite.spritex = (sprite.spritex + 1) - cl->plist->pos_x; + sprite.spritey = (sprite.spritey + 1) - cl->plist->pos_y; sprite.invdet = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); sprite.transformx = sprite.invdet * (cl->plist->dir_y * - sprite.spritex - cl->plist->dir_x * sprite.spritey); + sprite.spritey - cl->plist->dir_x * sprite.spritex); sprite.transformy = sprite.invdet * (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); sprite.spritescreenx = (int)((cl->wlist->x_size / 2) * -- cgit v1.2.3 From 859f84a4c6819e91d38b1cacdc39d94a7df71969 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Fri, 28 Feb 2020 10:57:51 +0100 Subject: on est al --- inc/cub3d_defines.h | 2 +- src/ft_draw_sprite.c | 34 ++++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/inc/cub3d_defines.h b/inc/cub3d_defines.h index c4be489..e201228 100644 --- a/inc/cub3d_defines.h +++ b/inc/cub3d_defines.h @@ -49,7 +49,7 @@ ** ====== MOVE SPEED ====== */ -# define FT_MOVE_SPEED 0.2 +# define FT_MOVE_SPEED 0.1 # define FT_STRAFE_SPEED 0.1 # define FT_ROT_SPEED 0.09 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index c81e72b..45f9217 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -24,6 +24,10 @@ void printf("start x : %d\nstart y : %d\nend x : %d\nend y : %d\n", sprite->drawstartx, sprite->drawstarty, sprite->drawendy, sprite->drawendy); sprite->x = sprite->drawstartx; + /* sprite->drawstartx = 1000; */ + /* sprite->drawstarty = 200; */ + /* sprite->drawendx = 700; */ + /* sprite->drawendy = 1000; */ while (sprite->x < sprite->drawendx) { sprite->tex_x = (int32_t)((sprite->x - (-sprite->spritewidth / 2 + @@ -31,20 +35,22 @@ void sprite->y = sprite->drawstarty; if (sprite->transformy > 0 && sprite->x >= 0 && sprite->x < (int32_t)cl->wlist->x_size) - while (sprite->y < sprite->drawendy) - { - d = (sprite->y) * 256 - cl->wlist->y_size * 128 + - sprite->spriteheight * 128; - sprite->tex_y = ((d * cl->tlist[4].img_h) / - sprite->spriteheight) / 128; - if (*(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * - cl->tlist[4].sizeline / 4)) - cl->img.ptr[sprite->x + sprite->y * - cl->img.sizeline] = - *(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4); - sprite->y++; - } + while (sprite->y < sprite->drawendy) + { + d = (sprite->y) * 256 - cl->wlist->y_size * 128 + + sprite->spriteheight * 128; + sprite->tex_y = ((d * cl->tlist[4].img_h) / + sprite->spriteheight) / 128; + if (*(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * + cl->tlist[4].sizeline / 4)) + { + cl->img.ptr[sprite->x + sprite->y * + cl->img.sizeline] = + *(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4); + + } + sprite->y++; + } sprite->x++; } - } -- cgit v1.2.3 From 1073379d9815d1f463310e661d3aabcf53c594e2 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Fri, 28 Feb 2020 13:39:36 +0100 Subject: hooooooooooooooooooooo --- src/ft_draw_sprite.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 45f9217..d99e1be 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -24,10 +24,6 @@ void printf("start x : %d\nstart y : %d\nend x : %d\nend y : %d\n", sprite->drawstartx, sprite->drawstarty, sprite->drawendy, sprite->drawendy); sprite->x = sprite->drawstartx; - /* sprite->drawstartx = 1000; */ - /* sprite->drawstarty = 200; */ - /* sprite->drawendx = 700; */ - /* sprite->drawendy = 1000; */ while (sprite->x < sprite->drawendx) { sprite->tex_x = (int32_t)((sprite->x - (-sprite->spritewidth / 2 + @@ -37,20 +33,24 @@ void sprite->x < (int32_t)cl->wlist->x_size) while (sprite->y < sprite->drawendy) { - d = (sprite->y) * 256 - cl->wlist->y_size * 128 + + d = sprite->y * 256 - cl->wlist->y_size * 128 + sprite->spriteheight * 128; sprite->tex_y = ((d * cl->tlist[4].img_h) / sprite->spriteheight) / 128; - if (*(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * - cl->tlist[4].sizeline / 4)) + if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] != 0) { - cl->img.ptr[sprite->x + sprite->y * - cl->img.sizeline] = - *(cl->tlist[4].ptr + sprite->tex_x + sprite->tex_y * cl->tlist[4].sizeline / 4); - + cl->img.ptr[sprite->x * 4 + (sprite->y * + cl->img.sizeline)] = + cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]; + cl->img.ptr[sprite->x * 4 + (sprite->y * + cl->img.sizeline) + 1] = + cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y + 1]; + cl->img.ptr[sprite->x * 4 + (sprite->y * + cl->img.sizeline) + 2] = + cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y + 2]; } sprite->y++; } - sprite->x++; - } + sprite->x++; + } } -- cgit v1.2.3 From b19155962b963cfa2ce7a7ff8ed5bf1ba662f799 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Fri, 28 Feb 2020 13:51:59 +0100 Subject: lets GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO --- src/ft_draw_sprite.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index d99e1be..875e527 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -35,9 +35,9 @@ void { d = sprite->y * 256 - cl->wlist->y_size * 128 + sprite->spriteheight * 128; - sprite->tex_y = ((d * cl->tlist[4].img_h) / + sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / sprite->spriteheight) / 128; - if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] != 0) + if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] != (char)0) { cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = -- cgit v1.2.3 From 8f852afcfa170070b6f0ac2e321546990d87e401 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Fri, 28 Feb 2020 15:30:53 +0100 Subject: gang --- map/map_one.cub | 2 +- src/ft_draw_scene.c | 2 +- src/ft_draw_sprite.c | 4 ++-- src/ft_key_loop.c | 5 ++++- src/ft_raycasting.c | 1 + 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/map/map_one.cub b/map/map_one.cub index 3f5eb59..a2d9329 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,7 +10,7 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 2 2 2 2 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 diff --git a/src/ft_draw_scene.c b/src/ft_draw_scene.c index 3f43495..f974d42 100644 --- a/src/ft_draw_scene.c +++ b/src/ft_draw_scene.c @@ -23,9 +23,9 @@ void clist->img.ptr = mlx_get_data_addr(clist->img.img, &clist->img.bpp, &clist->img.sizeline, &clist->img.endian); ft_castray(clist); - ft_calc_sprite(clist); if (clist->ishud) ft_draw_hud(clist); + ft_calc_sprite(clist); mlx_put_image_to_window(clist->wlist->wlx, clist->wlist->winptr, clist->img.img, 0, 0); mlx_destroy_image(clist->wlist->wlx, clist->img.img); diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 875e527..0430e2f 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -22,7 +22,7 @@ void { int32_t d; - printf("start x : %d\nstart y : %d\nend x : %d\nend y : %d\n", sprite->drawstartx, sprite->drawstarty, sprite->drawendy, sprite->drawendy); + /* printf("start x : %d\nstart y : %d\nend x : %d\nend y : %d\n", sprite->drawstartx, sprite->drawstarty, sprite->drawendy, sprite->drawendy); */ sprite->x = sprite->drawstartx; while (sprite->x < sprite->drawendx) { @@ -37,7 +37,7 @@ void sprite->spriteheight * 128; sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / sprite->spriteheight) / 128; - if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] != (char)0) + if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]) { cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = diff --git a/src/ft_key_loop.c b/src/ft_key_loop.c index d92b37e..d913c49 100644 --- a/src/ft_key_loop.c +++ b/src/ft_key_loop.c @@ -42,6 +42,9 @@ int ft_collision(old_y, old_x, cl->plist, cl->mlist); i++; } - ft_draw_scene(cl); + if (cl->key_input[0] != -1) + { + ft_draw_scene(cl); + } return (0); } diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index e7cc4ef..0173fe6 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -49,6 +49,7 @@ void sprite = cl->sprites; sprite.spritex = (sprite.spritex + 1) - cl->plist->pos_x; sprite.spritey = (sprite.spritey + 1) - cl->plist->pos_y; + printf("%f%f\n", sprite.spritex, sprite.spritey); sprite.invdet = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); sprite.transformx = sprite.invdet * (cl->plist->dir_y * -- cgit v1.2.3 From af64bbe158db6801a2f498ca20eae5104cda10fd Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Fri, 28 Feb 2020 18:57:43 +0100 Subject: g --- inc/cub3d_structs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index a8ae385..4847d1f 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -124,6 +124,7 @@ typedef struct s_map size_t map_start; uint8_t isspawn; uint8_t scale; + uint8_t isnlvl; } t_map; typedef struct s_cub -- cgit v1.2.3 From a1891c76be7688be7f9e213308b6af33e3d3dacf Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Sat, 29 Feb 2020 20:34:02 +0100 Subject: debugging... --- map/map_one.cub | 4 ++-- src/ft_get_sprite.c | 4 ++-- src/ft_raycasting.c | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/map/map_one.cub b/map/map_one.cub index a2d9329..644a63d 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,9 +10,9 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 2 2 2 2 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 +1 N 1 1 0 0 0 2 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 diff --git a/src/ft_get_sprite.c b/src/ft_get_sprite.c index d99f12e..5f9a0bc 100644 --- a/src/ft_get_sprite.c +++ b/src/ft_get_sprite.c @@ -28,8 +28,8 @@ void { if (ft_ischarset("2", clist->mlist->map[y][x])) { - clist->sprites.spritex = x + 0.5; - clist->sprites.spritey = y + 0.5; + clist->sprites.spritex = x; + clist->sprites.spritey = y; return ; } x++; diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 0173fe6..0cd4cc6 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -45,22 +45,30 @@ void ft_calc_sprite(t_cub *cl) { t_sprite sprite; + static int i = 0; + float tmp_a; + float tmp_b; sprite = cl->sprites; - sprite.spritex = (sprite.spritex + 1) - cl->plist->pos_x; - sprite.spritey = (sprite.spritey + 1) - cl->plist->pos_y; - printf("%f%f\n", sprite.spritex, sprite.spritey); + tmp_a = cl->plist->dir_x; + tmp_b = cl->plist->dir_y; + sprite.spritex = sprite.spritex - (cl->plist->pos_x - 0.5); + sprite.spritey = sprite.spritey - (cl->plist->pos_y - 0.5); + printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, cl->plist->dir_x, cl->plist->dir_y, i); sprite.invdet = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); sprite.transformx = sprite.invdet * (cl->plist->dir_y * sprite.spritey - cl->plist->dir_x * sprite.spritex); sprite.transformy = sprite.invdet * (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); - sprite.spritescreenx = (int)((cl->wlist->x_size / 2) * + sprite.spritescreenx = (int)((cl->wlist->y_size / 2) * (1 + sprite.transformx / sprite.transformy)); ft_sprite_height(cl, &sprite); ft_sprite_width(cl, &sprite); ft_draw_sprite(cl, &sprite); + cl->plist->dir_x = tmp_a; + cl->plist->dir_y = tmp_b; + i++; } void -- cgit v1.2.3 From 82f823ceb63d76ce052db3bca74842fe37394eb4 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Thu, 5 Mar 2020 22:01:22 +0100 Subject: fuck --- inc/cub3d_structs.h | 2 +- map/map_one.cub | 4 ++-- src/ft_draw_sprite.c | 4 +--- src/ft_draw_verline.c | 19 ++++++++++++++++++- src/ft_raycasting.c | 4 +++- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index 4847d1f..102b985 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -50,6 +50,7 @@ typedef struct s_rgb typedef struct s_sprite { int32_t spritescreenx; + int8_t isvisible; int32_t x; int32_t y; int32_t tex_x; @@ -88,7 +89,6 @@ typedef struct s_ray { uint16_t line_h; float wall_dist; - float mid_dist; float x_ray_pos; float y_ray_pos; float x_ray_dir; diff --git a/map/map_one.cub b/map/map_one.cub index 644a63d..ab1ae76 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,9 +10,9 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 N 1 1 0 0 0 2 0 1 1 1 0 0 0 0 0 1 +1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 0430e2f..82984d2 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -38,9 +38,7 @@ void sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / sprite->spriteheight) / 128; if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]) - { - cl->img.ptr[sprite->x * 4 + (sprite->y * - cl->img.sizeline)] = + {cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]; cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline) + 1] = diff --git a/src/ft_draw_verline.c b/src/ft_draw_verline.c index b0f9880..2b684eb 100644 --- a/src/ft_draw_verline.c +++ b/src/ft_draw_verline.c @@ -10,7 +10,24 @@ /* */ /* ************************************************************************** */ +#include #include +uint32_t + ft_gradient(t_rgb rgb, int it) +{ + uint32_t res; + + (void)it; + res = 0; + if (it < 255) + { + rgb.r += it; + rgb.g += it; + rgb.b += it; + } + res += ((rgb.r << 16) + (rgb.g << 8) + rgb.b); + return (res); +} static void ft_draw_floor(t_cub *cl, int32_t y, int32_t x) @@ -18,7 +35,7 @@ static void while ((uint32_t)y < cl->wlist->y_size) { *(int*)(cl->img.ptr + - (x * 4 + (y * cl->img.sizeline))) = ft_rgb_to_hex(cl->f_rgb); + (x * 4 + (y * cl->img.sizeline))) = ft_gradient(cl->f_rgb, y); y++; } } diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 0cd4cc6..925711f 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -54,7 +54,9 @@ void tmp_b = cl->plist->dir_y; sprite.spritex = sprite.spritex - (cl->plist->pos_x - 0.5); sprite.spritey = sprite.spritey - (cl->plist->pos_y - 0.5); - printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, cl->plist->dir_x, cl->plist->dir_y, i); + /* sprite.transformx */ + /* sprite.transformy */ + printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, sprite.transformx, sprite.transformy, i); sprite.invdet = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); sprite.transformx = sprite.invdet * (cl->plist->dir_y * -- cgit v1.2.3 From 04658c5e9a019917c3f8ffeb84562c328da0a885 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Fri, 6 Mar 2020 18:40:56 +0100 Subject: ils se cachent (mal) --- inc/cub3d_structs.h | 5 ++- map/map_one.cub | 2 +- src/ft_draw_sprite.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++- src/ft_draw_verline.c | 9 +++--- src/ft_get_sprite.c | 9 ++++-- src/ft_raycasting.c | 56 +-------------------------------- 6 files changed, 102 insertions(+), 65 deletions(-) diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index 102b985..7b86d09 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -89,6 +89,7 @@ typedef struct s_ray { uint16_t line_h; float wall_dist; + float wall_dist_tab[4096]; float x_ray_pos; float y_ray_pos; float x_ray_dir; @@ -116,6 +117,8 @@ typedef struct s_map char *sprite_path; char *mapl; char **map; + int32_t sprite_nbr; + int32_t sprite_order[12]; int8_t x_step; int8_t y_step; size_t map_w; @@ -142,7 +145,7 @@ typedef struct s_cub struct s_rgb f_rgb; struct s_rgb c_rgb; struct s_img tlist[5]; - struct s_sprite sprites; + struct s_sprite sprites[12]; } t_cub; # endif diff --git a/map/map_one.cub b/map/map_one.cub index ab1ae76..c7b0f71 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,7 +10,7 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 2 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 2 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 82984d2..29a8a46 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -17,6 +17,90 @@ #include #include +void + ft_sort_sprites(t_cub *cl) +{ + float dist_tab[4096]; + uint32_t tmp; + int32_t it; + + it = 0; + while (it < cl->mlist->sprite_nbr) + { + dist_tab[it] = ((cl->plist->pos_x - cl->sprites[it].s_pos_x) * + (cl->plist->pos_x - cl->sprites[it].s_pos_x) + + (cl->plist->pos_y - cl->sprites[it].s_pos_y) * + (cl->plist->pos_y - cl->sprites[it].s_pos_y)); + cl->mlist->sprite_order[it] = it; + it++; + } + it = 0; + while (it < cl->mlist->sprite_nbr) + { + if (dist_tab[it] > dist_tab[it + 1]) + { + tmp = dist_tab[it]; + dist_tab[it] = dist_tab[it + 1]; + dist_tab[it + 1] = tmp; + tmp = cl->mlist->sprite_order[it]; + cl->mlist->sprite_order[it] = cl->mlist->sprite_order[it + 1]; + cl->mlist->sprite_order[it + 1] = tmp; + it = 0; + } + } +} + +void + ft_sprite_height(t_cub *cl, t_sprite *sprite) +{ + sprite->spriteheight = abs((int)(cl->wlist->y_size / (sprite->transformy))); + sprite->drawstarty = -sprite->spriteheight / 2 + cl->wlist->y_size / 2; + if (sprite->drawstarty < 0) + sprite->drawstarty = 0; + sprite->drawendy = sprite->spriteheight / 2 + cl->wlist->y_size / 2; + if (sprite->drawendy >= (int)cl->wlist->y_size) + sprite->drawendy = cl->wlist->y_size; +} + +void + ft_sprite_width(t_cub *cl, t_sprite *sprite) +{ + sprite->spritewidth = abs((int)(cl->wlist->x_size / (sprite->transformy))); + sprite->drawstartx = -sprite->spritewidth / 2 + sprite->spritescreenx; + if (sprite->drawstartx < 0) + sprite->drawstartx = 0; + sprite->drawendx = sprite->spritewidth / 2 + sprite->spritescreenx; + if (sprite->drawendx >= (int)cl->wlist->x_size) + sprite->drawendx = cl->wlist->x_size; +} + +void + ft_calc_sprite(t_cub *cl) +{ + t_sprite sprite; + int i = 0; + + while (i < cl->mlist->sprite_nbr) + { + sprite = cl->sprites[i]; + sprite.spritex = sprite.s_pos_x - (cl->plist->pos_x - 0.5); + sprite.spritey = sprite.s_pos_y - (cl->plist->pos_y - 0.5); + sprite.invdet = 1.0 / (cl->plist->plane_x * + cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); + sprite.transformx = sprite.invdet * (cl->plist->dir_y * + sprite.spritey - cl->plist->dir_x * sprite.spritex); + sprite.transformy = sprite.invdet * + (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); + printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, sprite.transformx, sprite.transformy, i); + sprite.spritescreenx = (int)((cl->wlist->y_size / 2) * + (1 + sprite.transformx / sprite.transformy)); + ft_sprite_height(cl, &sprite); + ft_sprite_width(cl, &sprite); + ft_draw_sprite(cl, &sprite); + i++; + } +} + void ft_draw_sprite(t_cub *cl, t_sprite *sprite) { @@ -37,7 +121,7 @@ void sprite->spriteheight * 128; sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / sprite->spriteheight) / 128; - if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]) + if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] && cl->rlist.wall_dist_tab[sprite->x] > cl->rlist.wall_dist) {cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]; cl->img.ptr[sprite->x * 4 + (sprite->y * diff --git a/src/ft_draw_verline.c b/src/ft_draw_verline.c index 2b684eb..220badb 100644 --- a/src/ft_draw_verline.c +++ b/src/ft_draw_verline.c @@ -19,11 +19,12 @@ uint32_t (void)it; res = 0; - if (it < 255) + while (it < 500) { - rgb.r += it; - rgb.g += it; - rgb.b += it; + rgb.r += 1; + rgb.g += 1; + rgb.b += 1; + it++; } res += ((rgb.r << 16) + (rgb.g << 8) + rgb.b); return (res); diff --git a/src/ft_get_sprite.c b/src/ft_get_sprite.c index 5f9a0bc..84feeff 100644 --- a/src/ft_get_sprite.c +++ b/src/ft_get_sprite.c @@ -19,18 +19,21 @@ void { size_t x; size_t y; + uint8_t i; x = 1; y = 1; + i = 0; while (clist->mlist->map[y]) { while (clist->mlist->map[y][x]) { if (ft_ischarset("2", clist->mlist->map[y][x])) { - clist->sprites.spritex = x; - clist->sprites.spritey = y; - return ; + clist->mlist->sprite_nbr++; + clist->sprites[i].s_pos_x = x; + clist->sprites[i].s_pos_y = y; + i++; } x++; } diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 925711f..2c4b05c 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -17,61 +17,6 @@ #include #include -void - ft_sprite_height(t_cub *cl, t_sprite *sprite) -{ - sprite->spriteheight = abs((int)(cl->wlist->y_size / (sprite->transformy))); - sprite->drawstarty = -sprite->spriteheight / 2 + cl->wlist->y_size / 2; - if (sprite->drawstarty < 0) - sprite->drawstarty = 0; - sprite->drawendy = sprite->spriteheight / 2 + cl->wlist->y_size / 2; - if (sprite->drawendy >= (int)cl->wlist->y_size) - sprite->drawendy = cl->wlist->y_size; -} - -void - ft_sprite_width(t_cub *cl, t_sprite *sprite) -{ - sprite->spritewidth = abs((int)(cl->wlist->x_size / (sprite->transformy))); - sprite->drawstartx = -sprite->spritewidth / 2 + sprite->spritescreenx; - if (sprite->drawstartx < 0) - sprite->drawstartx = 0; - sprite->drawendx = sprite->spritewidth / 2 + sprite->spritescreenx; - if (sprite->drawendx >= (int)cl->wlist->x_size) - sprite->drawendx = cl->wlist->x_size; -} - -void - ft_calc_sprite(t_cub *cl) -{ - t_sprite sprite; - static int i = 0; - float tmp_a; - float tmp_b; - - sprite = cl->sprites; - tmp_a = cl->plist->dir_x; - tmp_b = cl->plist->dir_y; - sprite.spritex = sprite.spritex - (cl->plist->pos_x - 0.5); - sprite.spritey = sprite.spritey - (cl->plist->pos_y - 0.5); - /* sprite.transformx */ - /* sprite.transformy */ - printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, sprite.transformx, sprite.transformy, i); - sprite.invdet = 1.0 / (cl->plist->plane_x * - cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); - sprite.transformx = sprite.invdet * (cl->plist->dir_y * - sprite.spritey - cl->plist->dir_x * sprite.spritex); - sprite.transformy = sprite.invdet * - (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); - sprite.spritescreenx = (int)((cl->wlist->y_size / 2) * - (1 + sprite.transformx / sprite.transformy)); - ft_sprite_height(cl, &sprite); - ft_sprite_width(cl, &sprite); - ft_draw_sprite(cl, &sprite); - cl->plist->dir_x = tmp_a; - cl->plist->dir_y = tmp_b; - i++; -} void ft_calc_tex(t_cub *clist) @@ -142,6 +87,7 @@ ft_castray(t_cub *cl) ft_choose_tex(cl); ft_calc_tex(cl); ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); + cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist; i++; } } -- cgit v1.2.3 From f00d3d412bdbbe45c6a84930e9d392bf915a25b9 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Mon, 9 Mar 2020 15:50:02 +0100 Subject: start over n --- inc/cub3d_structs.h | 1 - map/map_one.cub | 2 +- src/ft_draw_sprite.c | 56 ++++++++++++++++++++++++++------------------------- src/ft_draw_verline.c | 51 +--------------------------------------------- 4 files changed, 31 insertions(+), 79 deletions(-) diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index 7b86d09..b53f130 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -50,7 +50,6 @@ typedef struct s_rgb typedef struct s_sprite { int32_t spritescreenx; - int8_t isvisible; int32_t x; int32_t y; int32_t tex_x; diff --git a/map/map_one.cub b/map/map_one.cub index c7b0f71..857127f 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,7 +10,7 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 2 2 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 0 0 2 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 29a8a46..b8d9506 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -59,19 +59,19 @@ void sprite->drawstarty = 0; sprite->drawendy = sprite->spriteheight / 2 + cl->wlist->y_size / 2; if (sprite->drawendy >= (int)cl->wlist->y_size) - sprite->drawendy = cl->wlist->y_size; + sprite->drawendy = cl->wlist->y_size - 1; } void ft_sprite_width(t_cub *cl, t_sprite *sprite) { - sprite->spritewidth = abs((int)(cl->wlist->x_size / (sprite->transformy))); - sprite->drawstartx = -sprite->spritewidth / 2 + sprite->spritescreenx; + sprite->spritewidth = abs((int)(cl->wlist->y_size / (sprite->transformy))); + sprite->drawstarty = -sprite->spritewidth / 2 + sprite->spritescreenx; if (sprite->drawstartx < 0) sprite->drawstartx = 0; - sprite->drawendx = sprite->spritewidth / 2 + sprite->spritescreenx; + sprite->drawendy = sprite->spritewidth / 2 + sprite->spritescreenx; if (sprite->drawendx >= (int)cl->wlist->x_size) - sprite->drawendx = cl->wlist->x_size; + sprite->drawendx = cl->wlist->x_size - 1; } void @@ -81,23 +81,22 @@ void int i = 0; while (i < cl->mlist->sprite_nbr) - { - sprite = cl->sprites[i]; - sprite.spritex = sprite.s_pos_x - (cl->plist->pos_x - 0.5); - sprite.spritey = sprite.s_pos_y - (cl->plist->pos_y - 0.5); - sprite.invdet = 1.0 / (cl->plist->plane_x * - cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); - sprite.transformx = sprite.invdet * (cl->plist->dir_y * - sprite.spritey - cl->plist->dir_x * sprite.spritex); - sprite.transformy = sprite.invdet * - (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); - printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, sprite.transformx, sprite.transformy, i); - sprite.spritescreenx = (int)((cl->wlist->y_size / 2) * - (1 + sprite.transformx / sprite.transformy)); - ft_sprite_height(cl, &sprite); - ft_sprite_width(cl, &sprite); - ft_draw_sprite(cl, &sprite); - i++; + { + sprite = cl->sprites[i]; + sprite.spritex = sprite.s_pos_x - (cl->plist->pos_x); + sprite.spritey = sprite.s_pos_y - (cl->plist->pos_y); + sprite.invdet = 1.0 / (cl->plist->plane_x * + cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); + sprite.transformx = sprite.invdet * (cl->plist->dir_y * + sprite.spritey - cl->plist->dir_x * sprite.spritex); + sprite.transformy = sprite.invdet * + (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); + sprite.spritescreenx = (int)((cl->wlist->x_size / 2) * + (1 + sprite.transformx / sprite.transformy)); + ft_sprite_height(cl, &sprite); + ft_sprite_width(cl, &sprite); + ft_draw_sprite(cl, &sprite); + i++; } } @@ -106,23 +105,23 @@ void { int32_t d; - /* printf("start x : %d\nstart y : %d\nend x : %d\nend y : %d\n", sprite->drawstartx, sprite->drawstarty, sprite->drawendy, sprite->drawendy); */ sprite->x = sprite->drawstartx; + printf("y : [%d] [%d] x : [%d] [%d] x : [%f] y : [%f]\n", sprite->drawstarty, sprite->drawendy, sprite->drawstartx, sprite->drawendx, cl->plist->dir_x, cl->plist->dir_y); while (sprite->x < sprite->drawendx) { sprite->tex_x = (int32_t)((sprite->x - (-sprite->spritewidth / 2 + sprite->spritescreenx)) * cl->tlist[4].img_w / sprite->spritewidth); sprite->y = sprite->drawstarty; - if (sprite->transformy > 0 && sprite->x >= 0 && - sprite->x < (int32_t)cl->wlist->x_size) while (sprite->y < sprite->drawendy) { d = sprite->y * 256 - cl->wlist->y_size * 128 + sprite->spriteheight * 128; sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / sprite->spriteheight) / 128; - if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] && cl->rlist.wall_dist_tab[sprite->x] > cl->rlist.wall_dist) - {cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = + if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] + && cl->rlist.wall_dist_tab[sprite->x] > cl->rlist.wall_dist) + { + cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]; cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline) + 1] = @@ -136,3 +135,6 @@ void sprite->x++; } } + + +/* printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, sprite.transformx, sprite.transformy, i); */ diff --git a/src/ft_draw_verline.c b/src/ft_draw_verline.c index 220badb..99fff3c 100644 --- a/src/ft_draw_verline.c +++ b/src/ft_draw_verline.c @@ -12,23 +12,6 @@ #include #include -uint32_t - ft_gradient(t_rgb rgb, int it) -{ - uint32_t res; - - (void)it; - res = 0; - while (it < 500) - { - rgb.r += 1; - rgb.g += 1; - rgb.b += 1; - it++; - } - res += ((rgb.r << 16) + (rgb.g << 8) + rgb.b); - return (res); -} static void ft_draw_floor(t_cub *cl, int32_t y, int32_t x) @@ -36,7 +19,7 @@ static void while ((uint32_t)y < cl->wlist->y_size) { *(int*)(cl->img.ptr + - (x * 4 + (y * cl->img.sizeline))) = ft_gradient(cl->f_rgb, y); + (x * 4 + (y * cl->img.sizeline))) = ft_rgb_to_hex(cl->f_rgb); y++; } } @@ -55,38 +38,6 @@ static void } } -/* -** #include -** static void -** ft_draw_ceil_tex(t_cub *cl, int x, int y) -** { -** int16_t i; -** int32_t d; -** int32_t tex_y; -** -** i = 0; -** while (i < y) -** { -** d = i * 256 - cl->wlist->y_size * 128 + cl->rlist.line_h * 128; -** d = (d <= 0) ? (-d) : (d); -** ft_printf("%d\n", d); -** tex_y = ((d * cl->tlist[1].img_h) / cl->rlist.line_h) / 256; -** (tex_y <= 0) ? (tex_y = 1) : 0; -** cl->img.ptr[x * 4 + (cl->img.sizeline * i)] = -** (int8_t)cl->tlist[1].ptr[cl->tlist[1].tex_x * 4 + 4 * -** cl->tlist[1].img_h * tex_y]; -** cl->img.ptr[x * 4 + (cl->img.sizeline * i) + 1] = -** (int8_t)cl->tlist[1].ptr[cl->tlist[1].tex_x * 4 + 4 * -** cl->tlist[1].img_h * tex_y + 1]; -** cl->img.ptr[x * 4 + (cl->img.sizeline * i) + 2] = -** (int8_t)cl->tlist[1].ptr[cl->tlist[1].tex_x * 4 + 4 * -** cl->tlist[1].img_h * tex_y + 2]; -** cl->img.ptr[x * 4 + cl->wlist->x_size * i + 3] = (char)0; -** i++; -** } -** } -*/ - int8_t ft_draw_verline(t_cub *cl, int32_t x, int32_t y, int32_t y2) { -- cgit v1.2.3 From d5a3402121b64a9df97b4b7ebe49ef288f511763 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Mon, 9 Mar 2020 15:58:29 +0100 Subject: on est la --- src/ft_draw_sprite.c | 41 +++++++++++------------------------------ 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index b8d9506..8c1b848 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -53,25 +53,11 @@ void void ft_sprite_height(t_cub *cl, t_sprite *sprite) { - sprite->spriteheight = abs((int)(cl->wlist->y_size / (sprite->transformy))); - sprite->drawstarty = -sprite->spriteheight / 2 + cl->wlist->y_size / 2; - if (sprite->drawstarty < 0) - sprite->drawstarty = 0; - sprite->drawendy = sprite->spriteheight / 2 + cl->wlist->y_size / 2; - if (sprite->drawendy >= (int)cl->wlist->y_size) - sprite->drawendy = cl->wlist->y_size - 1; } void ft_sprite_width(t_cub *cl, t_sprite *sprite) { - sprite->spritewidth = abs((int)(cl->wlist->y_size / (sprite->transformy))); - sprite->drawstarty = -sprite->spritewidth / 2 + sprite->spritescreenx; - if (sprite->drawstartx < 0) - sprite->drawstartx = 0; - sprite->drawendy = sprite->spritewidth / 2 + sprite->spritescreenx; - if (sprite->drawendx >= (int)cl->wlist->x_size) - sprite->drawendx = cl->wlist->x_size - 1; } void @@ -81,22 +67,17 @@ void int i = 0; while (i < cl->mlist->sprite_nbr) - { - sprite = cl->sprites[i]; - sprite.spritex = sprite.s_pos_x - (cl->plist->pos_x); - sprite.spritey = sprite.s_pos_y - (cl->plist->pos_y); - sprite.invdet = 1.0 / (cl->plist->plane_x * - cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); - sprite.transformx = sprite.invdet * (cl->plist->dir_y * - sprite.spritey - cl->plist->dir_x * sprite.spritex); - sprite.transformy = sprite.invdet * - (-cl->plist->plane_y * sprite.spritex + cl->plist->plane_x * sprite.spritey); - sprite.spritescreenx = (int)((cl->wlist->x_size / 2) * - (1 + sprite.transformx / sprite.transformy)); - ft_sprite_height(cl, &sprite); - ft_sprite_width(cl, &sprite); - ft_draw_sprite(cl, &sprite); - i++; + { + sprite = cl->sprites[i]; + sprite.spritex = sprite.s_pos_x - cl->plist->pos_x; + sprite.spritey = sprite.s_pos_y - cl->plist->pos_y; + sprite.invdet = 1.0 / (cl->plist.plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); //required for correct matrix multiplication + sprite.transformx = sprite.invdet * (cl->plist->dir_y * sprite.spritex- cl->plist->dir_x* sprite.spritey); + sprite.transformy = invDet * (-cl->plist->plane_y* sprite.spritex + cl->plist->plane_x * sprite.spritey); + ft_sprite_height(cl, &sprite); + ft_sprite_width(cl, &sprite); + ft_draw_sprite(cl, &sprite); + i++; } } -- cgit v1.2.3 From afa0ac18607a421b154588aef7ceaa09bc1cf9a6 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Mon, 9 Mar 2020 16:39:35 +0100 Subject: sprites ont des jambes --- map/map_one.cub | 6 +++--- src/ft_draw_scene.c | 2 +- src/ft_draw_sprite.c | 22 ++++++++++++++++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/map/map_one.cub b/map/map_one.cub index 857127f..9142d01 100644 --- a/map/map_one.cub +++ b/map/map_one.cub @@ -10,9 +10,9 @@ C 50,100,200 F 50,190,124 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 0 0 2 0 0 0 0 0 0 1 1 0 0 0 0 0 1 -1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -1 N 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 +1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 +1 0 0 1 0 2 0 0 0 0 0 0 0 0 0 0 0 1 +1 N 1 1 0 2 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 diff --git a/src/ft_draw_scene.c b/src/ft_draw_scene.c index f974d42..a1a4a20 100644 --- a/src/ft_draw_scene.c +++ b/src/ft_draw_scene.c @@ -25,7 +25,7 @@ void ft_castray(clist); if (clist->ishud) ft_draw_hud(clist); - ft_calc_sprite(clist); + ft_calc_sprite(clist); mlx_put_image_to_window(clist->wlist->wlx, clist->wlist->winptr, clist->img.img, 0, 0); mlx_destroy_image(clist->wlist->wlx, clist->img.img); diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index 8c1b848..e412998 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -53,11 +53,24 @@ void void ft_sprite_height(t_cub *cl, t_sprite *sprite) { + sprite->spriteheight = abs((int)(cl->wlist->y_size / (sprite->transformy))); + sprite->drawstarty = -sprite->spriteheight / 2 + cl->wlist->y_size / 2; + if(sprite->drawstarty < 0) + sprite->drawstarty = 0; + sprite->drawendy = sprite->spriteheight / 2 + cl->wlist->y_size / 2; + if(sprite->drawendy >= (int)cl->wlist->y_size) + sprite->drawendy = cl->wlist->y_size - 1; } void ft_sprite_width(t_cub *cl, t_sprite *sprite) { + sprite->spritewidth = abs((int)(cl->wlist->x_size / (sprite->transformy))); + sprite->drawstartx = -sprite->spritewidth / 2 + sprite->spritescreenx; + if(sprite->drawstartx < 0) + sprite->drawstartx = 0; + sprite->drawendx = sprite->spritewidth / 2 + sprite->spritescreenx; + if(sprite->drawendx >= (int)cl->wlist->x_size) sprite->drawendx = cl->wlist->x_size - 1; } void @@ -69,11 +82,12 @@ void while (i < cl->mlist->sprite_nbr) { sprite = cl->sprites[i]; - sprite.spritex = sprite.s_pos_x - cl->plist->pos_x; - sprite.spritey = sprite.s_pos_y - cl->plist->pos_y; - sprite.invdet = 1.0 / (cl->plist.plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); //required for correct matrix multiplication + sprite.spritey = sprite.s_pos_x - cl->plist->pos_x; + sprite.spritex = sprite.s_pos_y - cl->plist->pos_y; + sprite.invdet = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); sprite.transformx = sprite.invdet * (cl->plist->dir_y * sprite.spritex- cl->plist->dir_x* sprite.spritey); - sprite.transformy = invDet * (-cl->plist->plane_y* sprite.spritex + cl->plist->plane_x * sprite.spritey); + sprite.transformy = sprite.invdet * (-cl->plist->plane_y* sprite.spritex + cl->plist->plane_x * sprite.spritey); + sprite.spritescreenx = (int)(cl->wlist->x_size / 2) * (1 + sprite.transformx / sprite.transformy); ft_sprite_height(cl, &sprite); ft_sprite_width(cl, &sprite); ft_draw_sprite(cl, &sprite); -- cgit v1.2.3 From 7d50a78eed9c6cfce3288c471b9f3e6367bfe040 Mon Sep 17 00:00:00 2001 From: salaaad2 Date: Mon, 9 Mar 2020 17:50:45 +0100 Subject: gang --- inc/cub3d_structs.h | 2 +- src/ft_draw_sprite.c | 10 +++------- src/ft_raycasting.c | 8 +++++++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/inc/cub3d_structs.h b/inc/cub3d_structs.h index b53f130..cceafec 100644 --- a/inc/cub3d_structs.h +++ b/inc/cub3d_structs.h @@ -88,7 +88,7 @@ typedef struct s_ray { uint16_t line_h; float wall_dist; - float wall_dist_tab[4096]; + float *wall_dist_tab; float x_ray_pos; float y_ray_pos; float x_ray_dir; diff --git a/src/ft_draw_sprite.c b/src/ft_draw_sprite.c index e412998..ffc2d50 100644 --- a/src/ft_draw_sprite.c +++ b/src/ft_draw_sprite.c @@ -82,8 +82,8 @@ void while (i < cl->mlist->sprite_nbr) { sprite = cl->sprites[i]; - sprite.spritey = sprite.s_pos_x - cl->plist->pos_x; - sprite.spritex = sprite.s_pos_y - cl->plist->pos_y; + sprite.spritey = sprite.s_pos_x - (cl->plist->pos_x - 0.5); + sprite.spritex = sprite.s_pos_y - (cl->plist->pos_y - 0.5); sprite.invdet = 1.0 / (cl->plist->plane_x * cl->plist->dir_y - cl->plist->dir_x * cl->plist->plane_y); sprite.transformx = sprite.invdet * (cl->plist->dir_y * sprite.spritex- cl->plist->dir_x* sprite.spritey); sprite.transformy = sprite.invdet * (-cl->plist->plane_y* sprite.spritex + cl->plist->plane_x * sprite.spritey); @@ -101,7 +101,6 @@ void int32_t d; sprite->x = sprite->drawstartx; - printf("y : [%d] [%d] x : [%d] [%d] x : [%f] y : [%f]\n", sprite->drawstarty, sprite->drawendy, sprite->drawstartx, sprite->drawendx, cl->plist->dir_x, cl->plist->dir_y); while (sprite->x < sprite->drawendx) { sprite->tex_x = (int32_t)((sprite->x - (-sprite->spritewidth / 2 + @@ -114,7 +113,7 @@ void sprite->tex_y = ((d * cl->tlist[4].img_h / 2) / sprite->spriteheight) / 128; if (cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y] - && cl->rlist.wall_dist_tab[sprite->x] > cl->rlist.wall_dist) + && cl->rlist.wall_dist_tab[sprite->x] > sprite->transformy) { cl->img.ptr[sprite->x * 4 + (sprite->y * cl->img.sizeline)] = cl->tlist[4].ptr[sprite->tex_x * 4 + 4 * cl->tlist[4].img_h * sprite->tex_y]; @@ -130,6 +129,3 @@ void sprite->x++; } } - - -/* printf("[%f] [%f] x [%f] y [%f] [%d]\n", sprite.spritex, sprite.spritey, sprite.transformx, sprite.transformy, i); */ diff --git a/src/ft_raycasting.c b/src/ft_raycasting.c index 2c4b05c..464eb95 100644 --- a/src/ft_raycasting.c +++ b/src/ft_raycasting.c @@ -71,7 +71,12 @@ ft_castray(t_cub *cl) { uint16_t i; t_win *wl; + float *dist_tab; + if (!(dist_tab = malloc(sizeof(float) * cl->wlist->x_size))) + return ; + if (!(cl->rlist.wall_dist_tab = malloc(sizeof(float) * cl->wlist->x_size))) + return ; i = 0; wl = cl->wlist; while (i < wl->x_size) @@ -87,7 +92,8 @@ ft_castray(t_cub *cl) ft_choose_tex(cl); ft_calc_tex(cl); ft_draw_verline(cl, i, cl->rlist.wall_t, cl->rlist.wall_b); - cl->rlist.wall_dist_tab[i] = cl->rlist.wall_dist; + dist_tab[i] = cl->rlist.wall_dist; + cl->rlist.wall_dist_tab = dist_tab; i++; } } -- cgit v1.2.3