made some calc shorter
This commit is contained in:
parent
03ceeb1da5
commit
93e7932084
4
Makefile
4
Makefile
@ -6,7 +6,7 @@
|
||||
# By: whaffman <whaffman@student.codam.nl> +#+ #
|
||||
# +#+ #
|
||||
# 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
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* render_sprite.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* :::::::: */
|
||||
/* render_sprite.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/05/08 12:23:17 by qmennen #+# #+# */
|
||||
/* Updated: 2025/05/08 17:02:10 by qmennen ### ########.fr */
|
||||
/* 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,33 +105,29 @@ 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)
|
||||
if (x > 0 && x < game->screen->width && sprite->dist <= render[x].perp_dist)
|
||||
{
|
||||
x++;
|
||||
continue;
|
||||
}
|
||||
y = y_start;
|
||||
tex_x = ((double)((x - x_start) / (double)(x_end - x_start))) * sprite->texture->width;
|
||||
while (y < y_end)
|
||||
{
|
||||
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)
|
||||
if (y > 0 && y < game->screen->height && (color & 0xFF) != 0)
|
||||
{
|
||||
y++;
|
||||
continue;
|
||||
}
|
||||
mlx_put_pixel(game->screen->img, x, y, color);
|
||||
}
|
||||
y++;
|
||||
}
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user