From 86ebc14924ce65f595164e433af2317d8650585f Mon Sep 17 00:00:00 2001 From: jb Date: Wed, 9 Jul 2025 22:42:29 -0700 Subject: [PATCH] refactor that fixed gaps in face triangles --- scripts/display.c | 2 +- scripts/main.c | 15 +-------------- scripts/mesh.c | 2 +- scripts/triangle.c | 12 ++++++------ 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/scripts/display.c b/scripts/display.c index e048bb1..d119ef2 100644 --- a/scripts/display.c +++ b/scripts/display.c @@ -95,7 +95,7 @@ void draw_line(int x0, int y0, int x1, int y1, uint32_t color) { float current_x = x0; float current_y = y0; - for (int i = 0; i < longest_side_length; i++) { + for (int i = 0; i <= longest_side_length; i++) { draw_pixel(round(current_x), round(current_y), color); current_x += x_inc; current_y += y_inc; diff --git a/scripts/main.c b/scripts/main.c index 8fd3845..23dce4e 100644 --- a/scripts/main.c +++ b/scripts/main.c @@ -126,7 +126,7 @@ void update(void) { transformed_vertex = vec3_rotate_z(transformed_vertex, mesh.rotation.z); // translate away from camera in z - transformed_vertex.z += 1; + transformed_vertex.z += 5; // save translated vertex in the array of transformed vertices transformed_vertices[j] = transformed_vertex; @@ -178,19 +178,6 @@ void update(void) { triangle_t normal_triangle; - for (int j = 0; j < 3; j++) { - // project the current vertex - vec2_t projected_point = project(transformed_vertices[j]); - - // scale and translate the projected points to the center of the screen - projected_point.x += (window_width / 2); - projected_point.y += (window_height / 2); - - normal_triangle.points[j] = projected_point; - } - - array_push(triangles_to_render, normal_triangle); - } } diff --git a/scripts/mesh.c b/scripts/mesh.c index 56fce90..931b457 100644 --- a/scripts/mesh.c +++ b/scripts/mesh.c @@ -75,7 +75,7 @@ void load_file(void) { FILE* fp; char* tok; - fp = fopen("..\\assets\\beetle-alt.obj", "r"); + fp = fopen("..\\assets\\cube.obj", "r"); if (fp == NULL) { exit(EXIT_FAILURE); diff --git a/scripts/triangle.c b/scripts/triangle.c index ec51a92..57eefae 100644 --- a/scripts/triangle.c +++ b/scripts/triangle.c @@ -13,8 +13,8 @@ int compare_vec2_t(const void* a, const void* b) { return 0; } -#define FUNC ceilf -#define FUNC2 ceilf +#define FUNC (int)ceilf +#define FUNC2 (int)floorf uint32_t invert_rgb(uint32_t color) { uint32_t a = color & 0xFF000000; // Alpha channel @@ -29,9 +29,9 @@ void fill_flat_bottom_triangle(const triangle_t* triangle, uint32_t color) { float x_start = triangle->points[0].x, x_end = triangle->points[0].x; - for (int x = FUNC(triangle->points[0].y); x <= FUNC(triangle->points[2].y); x++) { + for (int x = FUNC(triangle->points[0].y); x <= FUNC2(triangle->points[2].y); x++) { //draw_rect((int)triangle->points[0].x, i, 1, 1, 0xFFFF0000); - draw_line(FUNC2(x_start), x, FUNC2(x_end), x, color); + draw_line(FUNC(x_start), x, FUNC2(x_end), x, color); x_start += inv_slope_1; x_end += inv_slope_2; } @@ -43,9 +43,9 @@ void fill_flat_top_triangle(const triangle_t* triangle, uint32_t color) { float x_start = triangle->points[2].x, x_end = triangle->points[2].x; - for (int y = FUNC(triangle->points[2].y); y >= FUNC(triangle->points[0].y); y--) { + for (int y = FUNC2(triangle->points[2].y); y >= FUNC(triangle->points[0].y); y--) { //draw_rect((int)triangle->points[0].x, i, 1, 1, 0xFFFF0000); - draw_line(FUNC2(x_start), y, FUNC2(x_end), y, color); + draw_line(FUNC(x_start), y, FUNC2(x_end), y, color); x_start -= inv_slope_1; x_end -= inv_slope_2; }