From 93e7932084f141eb09787c6bc1a6b3405a460b73 Mon Sep 17 00:00:00 2001 From: Willem Haffmans Date: Thu, 8 May 2025 23:19:35 +0200 Subject: [PATCH] made some calc shorter --- Makefile | 4 +-- src/render/render_sprite.c | 55 ++++++++++++++++---------------------- 2 files changed, 25 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index c452095..752b77c 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: whaffman +#+ # # +#+ # # Created: 2024/10/15 11:48:46 by whaffman #+# #+# # -# Updated: 2025/05/04 16:46:48 by whaffman ######## odam.nl # +# Updated: 2025/05/08 23:15:13 by whaffman ######## odam.nl # # # # **************************************************************************** # @@ -45,7 +45,7 @@ SOURCES = $(shell basename -a $(shell find $(SRC_PATH) -type f -name "*.c")) # Build configurations BUILD_CONFIGS = release debug asan tsan -release_CFLAGS = -Wall -Werror -Werror -O2 +release_CFLAGS = -Wall -Werror -Werror -O3 debug_CFLAGS = -Wall -Werror -Werror -g3 -DDEBUG -DDBG='fprintf(stderr, RED "DEBUG: " RESET "%s:%d (%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__);' asan_CFLAGS = -Wall -Werror -Werror -fsanitize=address,leak,undefined -g3 tsan_CFLAGS = -Wall -Werror -Werror -fsanitize=thread -g3 diff --git a/src/render/render_sprite.c b/src/render/render_sprite.c index 7ada600..ba2b553 100644 --- a/src/render/render_sprite.c +++ b/src/render/render_sprite.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* ::: :::::::: */ -/* render_sprite.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: qmennen +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */ -/* Updated: 2025/05/08 17:02:10 by qmennen ### ########.fr */ +/* :::::::: */ +/* render_sprite.c :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */ +/* Updated: 2025/05/08 23:18:06 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -84,14 +84,9 @@ unsigned int sample_texture_color(mlx_texture_t *texture, int x, int y, double d int index; int alpha; - dist = (dist == 0) * 1e30 + (dist > 1) * dist + (dist <= 1) * 1; - - alpha = 1.0 / dist * 255; index = (x + y * texture->width) * texture->bytes_per_pixel; - if (texture->pixels[index + 3] == 0) - { - alpha = 0; - } + dist = (dist > 1) * dist + (dist <= 1) * 1; + alpha = (texture->pixels[index + 3] != 0) * (255.0 / dist); return texture->pixels[index] << 24 | texture->pixels[index + 1] << 16 | texture->pixels[index + 2] << 8 | alpha; } @@ -110,32 +105,28 @@ void draw_sprite(t_game *game, t_sprite *sprite, t_render *render) if (isnan(sprite->cam_frac) || sprite->dist <= 0) return; - sprite_scale = (1.0 / sprite->dist) * 16.0; - x_start = (game->screen->width / 2) * (1 + sprite->cam_frac) - ((sprite->texture->width * sprite_scale) / 2); - y_start = (game->screen->height / 2) - (sprite->texture->height * sprite_scale) / 2 ; - x_end = (game->screen->width / 2) * (1 + sprite->cam_frac) + ((sprite->texture->width * sprite_scale) / 2); - y_end = (game->screen->height / 2) + (sprite->texture->height * sprite_scale) / 2 ; + sprite_scale = 16.0 / sprite->dist; + x_start = game->screen->width * 0.5 * (1.0 + sprite->cam_frac) - (sprite->texture->width * sprite_scale * 0.5); + y_start = (game->screen->height - sprite->texture->height * sprite_scale )* 0.5; + x_end = x_start + (sprite->texture->width * sprite_scale); + y_end = y_start + (sprite->texture->height * sprite_scale); x = x_start; while (x < x_end) { - y = y_start; - if (x < 0 || x >= game->screen->width || sprite->dist > render[x].perp_dist) - { - x++; - continue; - } - while (y < y_end) + if (x > 0 && x < game->screen->width && sprite->dist <= render[x].perp_dist) { + y = y_start; tex_x = ((double)((x - x_start) / (double)(x_end - x_start))) * sprite->texture->width; - tex_y = ((double)((y- y_start) / (double)(y_end - y_start))) * sprite->texture->height; - color = sample_texture_color(sprite->texture, (int)(tex_x), (int)(tex_y), sprite->dist); - if (x < 0 || x >= game->screen->width || y < 0 || y >= game->screen->height || (color & 0xFF) == 0) + while (y < y_end) { + tex_y = ((double)((y- y_start) / (double)(y_end - y_start))) * sprite->texture->height; + color = sample_texture_color(sprite->texture, (int)(tex_x), (int)(tex_y), sprite->dist); + if (y > 0 && y < game->screen->height && (color & 0xFF) != 0) + { + mlx_put_pixel(game->screen->img, x, y, color); + } y++; - continue; } - mlx_put_pixel(game->screen->img, x, y, color); - y++; } x++; }