From 23f98687fed855372bec3aebdd2141aa4e3bad2b Mon Sep 17 00:00:00 2001 From: alan Date: Sat, 30 Nov 2024 21:10:43 -0600 Subject: [PATCH 1/6] Cubo arreglado --- src/surface.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/surface.c b/src/surface.c index 79f75af..04da2dc 100644 --- a/src/surface.c +++ b/src/surface.c @@ -33,7 +33,7 @@ void cube( float *d_surface, int * coord, int grid_size ) { unsigned char i; - for(int i=0; i<4; i++ ) + for(int i=0; i<3; i++ ) d_surface[i]=(float)coord[i]/grid_size; } @@ -78,15 +78,13 @@ float *generate_data_surface(int grid_size, unsigned char *s) function_t f; float *d_surface; - const int dim =2; + const int dim =3; int cara[dim]; - char bits[dim+1]; - bits[dim]=0; - f =klein ; - *s = 4; + f =cube ; + *s = 3; - size = grid_size * grid_size * 6 * (*s) * 24; + size = grid_size * grid_size * 6 * (*s) * 6; d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; @@ -115,11 +113,11 @@ float *generate_data_surface(int grid_size, unsigned char *s) q += *s; cara[o] = i + 1; - cara[p] = j; + //cara[p] = j; f(&d_surface[q + 1], cara, grid_size); q += *s; - cara[o] = i + 1; + //cara[o] = i + 1; cara [p] = j + 1; f(&d_surface[q + 1], cara, grid_size); q += *s; @@ -129,13 +127,13 @@ float *generate_data_surface(int grid_size, unsigned char *s) f(&d_surface[q + 1], cara, grid_size); q += *s; - cara[o] = i; + //cara[o] = i; cara [p] = j + 1; f(&d_surface[q + 1], cara, grid_size); q += *s; cara[o] = i + 1; - cara [p] = j + 1; + //cara [p] = j + 1; f(&d_surface[q + 1], cara, grid_size); q += *s; } From 468f9f951d0958ce0bcee290c8fe24a8148aaacb Mon Sep 17 00:00:00 2001 From: alan Date: Sat, 30 Nov 2024 22:48:29 -0600 Subject: [PATCH 2/6] =?UTF-8?q?N=C3=BAmero=20de=20caras=20agregado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/surface.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/surface.c b/src/surface.c index 04da2dc..7f2bed8 100644 --- a/src/surface.c +++ b/src/surface.c @@ -14,6 +14,24 @@ #define CMPLX(a,b) (a+I*b) #endif +const int dim = 6; + +int factorial(int n) +{ + if(n == 1) + return 1; + + return n * factorial(n - 1); +} + +int numero_caras(int n) +{ + if(n == 2) + return 1; + + return (1 << (n - 3)) * factorial(n) / factorial(n - 2); +} + void riemman(float *d_surface, int * coords, int grid_size) { complex double eq; @@ -31,10 +49,8 @@ void riemman(float *d_surface, int * coords, int grid_size) void cube( float *d_surface, int * coord, int grid_size ) { - unsigned char i; - - for(int i=0; i<3; i++ ) - d_surface[i]=(float)coord[i]/grid_size; + for(int i = 0; i < dim; i++ ) + d_surface[i] = ((float)coord[i]/grid_size) - 0.5; } void mobius(float *d_surface, int * coord, int grid_size) @@ -73,18 +89,17 @@ typedef void (*function_t)(float *, int *, int); float *generate_data_surface(int grid_size, unsigned char *s) { - unsigned int i, j, k, o, p, l, n, m; - long size, q=0; + unsigned int i, j, k, o, p, n; + long size, q = 0; function_t f; float *d_surface; - const int dim =3; int cara[dim]; f =cube ; - *s = 3; + *s = 6; - size = grid_size * grid_size * 6 * (*s) * 6; + size = grid_size * grid_size * 6 * (*s) * numero_caras(dim); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; From 1a0b804b579102a63d20b9d84654fcfdfa580cda Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Sun, 1 Dec 2024 00:13:26 -0600 Subject: [PATCH 3/6] Fix: cube, add test for cube generation --- src/main.c | 37 ++++++------- src/surface.c | 148 ++++++++++++++++++++++++++++---------------------- 2 files changed, 101 insertions(+), 84 deletions(-) diff --git a/src/main.c b/src/main.c index fd7ae8d..1698f5e 100644 --- a/src/main.c +++ b/src/main.c @@ -16,10 +16,10 @@ #define M_PI 3.14159 #endif -float *generate_data_surface(unsigned int, unsigned char *); +float *generate_data_surface(unsigned char *); float *generate_normals_surface(float *, unsigned char); -struct projection projection = {.x = 3, .y=1, .z=2, .w=0 }; +struct projection projection = {.x = 0, .y = 1, .z = 2, .w = 3}; const char *wname = "manigraph: manifold grapher"; @@ -40,13 +40,15 @@ void mlog(char *msg) window_t window; mesh_t m_surface, m_axis; id_t shader, shader_plain; +unsigned char m; extern volatile unsigned char animate_index; #ifndef EMSCRIPTEN static inline #endif -void main_loop(void) + void + main_loop(void) { quat_t q; @@ -58,25 +60,23 @@ void main_loop(void) { static float angle = 0; - - if( animate_index ) + if (animate_index && m) { - angle+=0.01; + angle += 0.01; - load_uint_to_shader( shader, "i", animate_index-1 ); - load_uint_to_shader( shader_plain, "i", animate_index-1 ); - load_float_to_shader( shader, "angle", angle); - load_float_to_shader( shader_plain, "angle", angle); + load_uint_to_shader(shader, "i", animate_index - 1); + load_uint_to_shader(shader_plain, "i", animate_index - 1); + load_float_to_shader(shader, "angle", angle); + load_float_to_shader(shader_plain, "angle", angle); } - if( angle > M_PI/2 && angle ) + if (angle > M_PI / 2 && angle) { - animate_index=0; + animate_index = 0; angle = 0; } } - clean_context(); #ifndef DEBUG @@ -88,11 +88,10 @@ void main_loop(void) draw_mesh(m_axis, 1); #endif load_mdl_matrix(shader, 0, 3); - draw_mesh(m_surface,0); + draw_mesh(m_surface, 0); load_mdl_matrix(shader_plain, 0, 3); - draw_mesh(m_surface,1); - + draw_mesh(m_surface, 1); } int main(void) @@ -152,9 +151,8 @@ int main(void) mlog("[MESH] Inicializando...\n"); { - unsigned char m; float *n_surface, *d_surface; - d_surface = generate_data_surface(16, &m); + d_surface = generate_data_surface(&m); n_surface = generate_normals_surface(d_surface, m); if (!(m_surface = create_mesh(d_surface, n_surface, m))) @@ -166,8 +164,7 @@ int main(void) projection.m = m; projection.mesh = m_surface; - set_projection_mesh( projection ); - + set_projection_mesh(projection); free(n_surface); free(d_surface); diff --git a/src/surface.c b/src/surface.c index 7f2bed8..9f48186 100644 --- a/src/surface.c +++ b/src/surface.c @@ -2,6 +2,8 @@ #include #include +#define TEST + #define CGLM_ALL_UNALIGNED #include #include @@ -11,34 +13,45 @@ #endif #ifndef CMPLX -#define CMPLX(a,b) (a+I*b) +#define CMPLX(a, b) (a + I * b) #endif -const int dim = 6; +#ifdef TEST +#include +#endif + +typedef void (*function_t)(float *, int *, int); + +struct parm +{ + function_t f; + unsigned char m, n; + unsigned int grid; +} parm; int factorial(int n) { - if(n == 1) + if (n == 1) return 1; - + return n * factorial(n - 1); } int numero_caras(int n) -{ - if(n == 2) +{ + if (n == 2) return 1; return (1 << (n - 3)) * factorial(n) / factorial(n - 2); } -void riemman(float *d_surface, int * coords, int grid_size) +void riemman(float *d_surface, int *coords, int grid) { complex double eq; - float u = 2 * ((float)coords[0] / grid_size) - 1; - float v = 2 * ((float)coords[1] / grid_size) - 1; + float u = 2 * ((float)coords[0] / grid) - 1; + float v = 2 * ((float)coords[1] / grid) - 1; - eq = csqrt(CMPLX(u,v)); + eq = csqrt(CMPLX(u, v)); d_surface[0] = u; d_surface[1] = v; @@ -46,38 +59,37 @@ void riemman(float *d_surface, int * coords, int grid_size) d_surface[3] = cimag(eq); } - -void cube( float *d_surface, int * coord, int grid_size ) +void cube(float *d_surface, int *coord, int grid) { - for(int i = 0; i < dim; i++ ) - d_surface[i] = ((float)coord[i]/grid_size) - 0.5; + for (int i = 0; i < parm.m; i++) + d_surface[i] = ((float)coord[i] / grid) - 0.5; } -void mobius(float *d_surface, int * coord, int grid_size) +void mobius(float *d_surface, int *coord, int grid) { const float width = 0.5; - float u = (2 * M_PI) * ((float)coord[0] / grid_size); - float v = (2 * width) * ((float)coord[1] / grid_size) - width; + float u = (2 * M_PI) * ((float)coord[0] / grid); + float v = (2 * width) * ((float)coord[1] / grid) - width; d_surface[0] = cos(u) + v * cos(u / 2) * cos(u); d_surface[1] = sin(u) + v * cos(u / 2) * sin(u); d_surface[2] = v * sin(u / 2); } -void torus(float *d_surface, int * coord, int grid_size) +void torus(float *d_surface, int *coord, int grid) { - float u = (2 * M_PI) * ((float)coord[0] / grid_size); - float v = (2 * M_PI) * ((float)coord[1] / grid_size); + float u = (2 * M_PI) * ((float)coord[0] / grid); + float v = (2 * M_PI) * ((float)coord[1] / grid); d_surface[0] = (1 + 0.5 * cos(v)) * cos(u); d_surface[1] = (1 + 0.5 * cos(v)) * sin(u); d_surface[2] = 0.5 * sin(v); } -void klein(float *d_surface, int * coord, int grid_size) +void klein(float *d_surface, int *coord, int grid) { - float u = (2 * M_PI) * ((float)coord[0] / grid_size); - float v = (2 * M_PI) * ((float)coord[1]/ grid_size); + float u = (2 * M_PI) * ((float)coord[0] / grid); + float v = (2 * M_PI) * ((float)coord[1] / grid); d_surface[0] = (0.5 * cos(v) + 0.5) * cos(u); d_surface[1] = (0.5 * cos(v) + 0.5) * sin(u); @@ -85,83 +97,91 @@ void klein(float *d_surface, int * coord, int grid_size) d_surface[3] = sin(v) * sin(u / 2); } -typedef void (*function_t)(float *, int *, int); - -float *generate_data_surface(int grid_size, unsigned char *s) +float *generate_data_surface(unsigned char *s) { unsigned int i, j, k, o, p, n; long size, q = 0; - function_t f; float *d_surface; - int cara[dim]; + int *cara; - f =cube ; - *s = 6; + parm.f = cube; + parm.m = 5; + parm.n = parm.m; + parm.grid = 1; - size = grid_size * grid_size * 6 * (*s) * numero_caras(dim); +#ifdef TEST + assert(numero_caras(2) == 1); + assert(numero_caras(3) == 6); + assert(numero_caras(4) == 24); +#endif + + cara = malloc(parm.m * sizeof(int)); + *s = parm.m; + + size = parm.grid * parm.grid * 6 * (parm.n) * numero_caras(parm.m); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; - - for(o = 0; o < dim; o ++) - { + + for (o = 0; o < parm.m; o++) + { for (p = 0; p < o; p++) { - for (k = 0; k < (1 << (dim-2)); k++) + for (k = 0; k < (1 << (parm.m - 2)); k++) { - unsigned char skip=0; - for(n = 0; n < dim-2; n++) + unsigned char skip = 0; + for (n = 0; n < parm.m; n++) { - if( n==(o-1) || n==p ) + if (n == o || n == p) skip++; - cara[n+skip] = (k & (1< Date: Sun, 1 Dec 2024 12:19:53 -0600 Subject: [PATCH 4/6] Avoid bottle-neck while drwing lines, fix surface --- src/main.c | 10 +++++----- src/main.h | 4 +++- src/mesh.c | 22 +++++++++++----------- src/surface.c | 47 ++++++++++++++++++++++++++--------------------- 4 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/main.c b/src/main.c index b041fad..6bb1712 100644 --- a/src/main.c +++ b/src/main.c @@ -84,17 +84,17 @@ void main_loop(void) #ifndef DEBUG load_mdl_matrix(shader_plain, 0, 0); - draw_mesh(m_axis, 1); + draw_mesh(m_axis); load_mdl_matrix(shader_plain, 1, 1); - draw_mesh(m_axis, 1); + draw_mesh(m_axis); load_mdl_matrix(shader_plain, 2, 2); - draw_mesh(m_axis, 1); + draw_mesh(m_axis); #endif load_mdl_matrix(shader, 0, 3); - draw_mesh(m_surface, 0); + draw_mesh(m_surface); load_mdl_matrix(shader_plain, 0, 3); - draw_mesh(m_surface, 1); + draw_mesh_lines(m_surface); } int main(void) diff --git a/src/main.h b/src/main.h index a14d487..4798dd2 100644 --- a/src/main.h +++ b/src/main.h @@ -57,7 +57,9 @@ void set_projection_mesh( struct projection ); void destroy_mesh(mesh_t p); -void draw_mesh(mesh_t p, char lines); +void draw_mesh(mesh_t p); + +void draw_mesh_lines(mesh_t p); /* Set background color: diff --git a/src/mesh.c b/src/mesh.c index 0353741..df044ae 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -91,19 +91,19 @@ void destroy_mesh(mesh_t p) free(p); } -void draw_mesh(mesh_t p, char lines ) +void draw_mesh(mesh_t p) { struct obj *obj = p; glBindVertexArray(obj->vao); - if( lines ) - { - int i; - for (i = 0; i < obj->vertex; i += 3) - glDrawArrays(GL_LINE_LOOP, i, 3); - } - else - { - glDrawArrays(GL_TRIANGLES, 0, obj->vertex); - } + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glDrawArrays(GL_TRIANGLES, 0, obj->vertex); +} +void draw_mesh_lines(mesh_t p) +{ + struct obj *obj = p; + + glBindVertexArray(obj->vao); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + glDrawArrays(GL_TRIANGLES, 0, obj->vertex); } diff --git a/src/surface.c b/src/surface.c index 12a99ab..41f02ea 100644 --- a/src/surface.c +++ b/src/surface.c @@ -20,6 +20,7 @@ #ifdef TEST #include #endif +#include typedef void (*function_t)(float *, int *, int); @@ -62,8 +63,13 @@ void riemman(float *d_surface, int *coords, int grid) void cube(float *d_surface, int *coord, int grid) { - for (int i = 0; i < parm.m; i++) - d_surface[i] = ((float)coord[i] / grid) - 0.5; + int i; + + for (i = 0; i < parm.m; i++) + d_surface[i] = (2*(float)coord[i] / grid) - 1; + + if( parm.m == 2 ) + d_surface[2]=0; } void mobius(float *d_surface, int *coord, int grid) @@ -103,13 +109,12 @@ float *generate_data_surface(unsigned char *s) unsigned int i, j, k, o, p, n; long size, q = 0; float *d_surface; - int *cara; - parm.f = cube; - parm.m = 6; - parm.n = parm.m; - parm.grid = 1; + parm.f = klein; + parm.m = 2; + parm.n = 4; + parm.grid = 16; #ifdef TEST assert(numero_caras(2) == 1); @@ -117,9 +122,9 @@ float *generate_data_surface(unsigned char *s) assert(numero_caras(4) == 24); #endif - cara = malloc(parm.m * sizeof(int)); - *s = parm.m; + *s = parm.n; + cara = malloc(parm.m * sizeof(int)); size = parm.grid * parm.grid * 6 * (parm.n) * numero_caras(parm.m); d_surface = malloc((size + 1) * sizeof(float)); d_surface[0] = size; @@ -143,33 +148,33 @@ float *generate_data_surface(unsigned char *s) { for (j = 0; j < parm.grid; j++) { - cara[o] = i; - cara[p] = j; + cara[p] = i; + cara[o] = j; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - cara[o] = i + 1; - // cara[p] = j; + cara[p] = i + 1; + cara[o] = j; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - // cara[o] = i + 1; - cara[p] = j + 1; + cara[p] = i + 1; + cara[o] = j + 1; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - cara[o] = i; - cara[p] = j; + cara[p] = i; + cara[o] = j; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - // cara[o] = i; - cara[p] = j + 1; + cara[p] = i; + cara[o] = j + 1; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; - cara[o] = i + 1; - // cara [p] = j + 1; + cara[p] = i + 1; + cara[o] = j + 1; parm.f(&d_surface[q + 1], cara, parm.grid); q += parm.n; } From 0db8ed60acd80780b72bca81c6faacda06cf17d7 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Sun, 1 Dec 2024 12:20:59 -0600 Subject: [PATCH 5/6] Assert Style --- src/main.c | 23 +++---- src/surface.c | 166 ++++++++++++++++++++++++++------------------------ 2 files changed, 99 insertions(+), 90 deletions(-) diff --git a/src/main.c b/src/main.c index 6bb1712..0c152f6 100644 --- a/src/main.c +++ b/src/main.c @@ -48,7 +48,8 @@ extern volatile unsigned char animate_index; static inline #endif -void main_loop(void) + void + main_loop(void) { quat_t q; @@ -60,24 +61,24 @@ void main_loop(void) { static float angle = 0; - if( angle > M_PI/2 ) + if (angle > M_PI / 2) { animate_index = 0; angle = 0; - load_float_to_shader( shader, "angle", angle); - load_float_to_shader( shader_plain, "angle", angle); - set_projection_mesh( projection ); + load_float_to_shader(shader, "angle", angle); + load_float_to_shader(shader_plain, "angle", angle); + set_projection_mesh(projection); } - if( animate_index ) + if (animate_index) { - load_uint_to_shader( shader, "i", animate_index-1 ); - load_uint_to_shader( shader_plain, "i", animate_index-1 ); + load_uint_to_shader(shader, "i", animate_index - 1); + load_uint_to_shader(shader_plain, "i", animate_index - 1); - angle+=0.01; - load_float_to_shader( shader, "angle", angle); - load_float_to_shader( shader_plain, "angle", angle); + angle += 0.01; + load_float_to_shader(shader, "angle", angle); + load_float_to_shader(shader_plain, "angle", angle); } } clean_context(); diff --git a/src/surface.c b/src/surface.c index 41f02ea..0a02152 100644 --- a/src/surface.c +++ b/src/surface.c @@ -66,10 +66,10 @@ void cube(float *d_surface, int *coord, int grid) int i; for (i = 0; i < parm.m; i++) - d_surface[i] = (2*(float)coord[i] / grid) - 1; + d_surface[i] = (2 * (float)coord[i] / grid) - 1; - if( parm.m == 2 ) - d_surface[2]=0; + if (parm.m == 2) + d_surface[2] = 0; } void mobius(float *d_surface, int *coord, int grid) @@ -189,106 +189,114 @@ float *generate_data_surface(unsigned char *s) } static void __calculate_normal( - float *p1, float *p2, float *p3, float *normal, unsigned char n) + float *p1, float *p2, float *p3, float *normal, unsigned char n) { - unsigned char i; - float alpha; - float *v1, *v2, *v3; - float *u1, *u2, *u3; + unsigned char i; + float alpha; + float *v1, *v2, *v3; + float *u1, *u2, *u3; - v1 = malloc(n * sizeof(float)); - v2 = malloc(n * sizeof(float)); - v3 = malloc(n * sizeof(float)); - u1 = malloc(n * sizeof(float)); - u2 = malloc(n * sizeof(float)); - u3 = malloc(n * sizeof(float)); + v1 = malloc(n * sizeof(float)); + v2 = malloc(n * sizeof(float)); + v3 = malloc(n * sizeof(float)); + u1 = malloc(n * sizeof(float)); + u2 = malloc(n * sizeof(float)); + u3 = malloc(n * sizeof(float)); - /* - Calculate a normal vector of a plain using Gram-Schmidt process - */ - { - for (i = 0; i < n; ++i) { - v1[i] = p2[i] - p1[i]; - v2[i] = p3[i] - p1[i]; - v3[i] = p1[i]; - } + /* + Calculate a normal vector of a plain using Gram-Schmidt process + */ + { + for (i = 0; i < n; ++i) + { + v1[i] = p2[i] - p1[i]; + v2[i] = p3[i] - p1[i]; + v3[i] = p1[i]; + } - for (i = 0; i < n; ++i) { - u1[i] = v1[i]; - } + for (i = 0; i < n; ++i) + { + u1[i] = v1[i]; + } - { - float proj[n]; - float dot_v2_u1 = 0.0f, dot_u1_u1 = 0.0f; - for (i = 0; i < n; ++i) { - dot_v2_u1 += v2[i] * u1[i]; - dot_u1_u1 += u1[i] * u1[i]; - } - alpha = dot_v2_u1 / dot_u1_u1; + { + float proj[n]; + float dot_v2_u1 = 0.0f, dot_u1_u1 = 0.0f; + for (i = 0; i < n; ++i) + { + dot_v2_u1 += v2[i] * u1[i]; + dot_u1_u1 += u1[i] * u1[i]; + } + alpha = dot_v2_u1 / dot_u1_u1; - for (i = 0; i < n; ++i) { - proj[i] = u1[i] * alpha; - u2[i] = v2[i] - proj[i]; - } - } + for (i = 0; i < n; ++i) + { + proj[i] = u1[i] * alpha; + u2[i] = v2[i] - proj[i]; + } + } - { - float proj1[n], proj2[n]; - float dot_v3_u1 = 0.0f, dot_u1_u1 = 0.0f; - float dot_v3_u2 = 0.0f, dot_u2_u2 = 0.0f; + { + float proj1[n], proj2[n]; + float dot_v3_u1 = 0.0f, dot_u1_u1 = 0.0f; + float dot_v3_u2 = 0.0f, dot_u2_u2 = 0.0f; - for (i = 0; i < n; ++i) { - dot_v3_u1 += v3[i] * u1[i]; - dot_u1_u1 += u1[i] * u1[i]; - } - for (i = 0; i < n; ++i) { - proj1[i] = u1[i] * (dot_v3_u1 / dot_u1_u1); - } + for (i = 0; i < n; ++i) + { + dot_v3_u1 += v3[i] * u1[i]; + dot_u1_u1 += u1[i] * u1[i]; + } + for (i = 0; i < n; ++i) + { + proj1[i] = u1[i] * (dot_v3_u1 / dot_u1_u1); + } - for (i = 0; i < n; ++i) { - dot_v3_u2 += v3[i] * u2[i]; - dot_u2_u2 += u2[i] * u2[i]; - } - for (i = 0; i < n; ++i) { - proj2[i] = u2[i] * (dot_v3_u2 / dot_u2_u2); - u3[i] = v3[i] - proj1[i] - proj2[i]; - } - } + for (i = 0; i < n; ++i) + { + dot_v3_u2 += v3[i] * u2[i]; + dot_u2_u2 += u2[i] * u2[i]; + } + for (i = 0; i < n; ++i) + { + proj2[i] = u2[i] * (dot_v3_u2 / dot_u2_u2); + u3[i] = v3[i] - proj1[i] - proj2[i]; + } + } - float magnitude = 0.0f; - for (i = 0; i < n; ++i) { - magnitude += u3[i] * u3[i]; - } - magnitude = sqrtf(magnitude); + float magnitude = 0.0f; + for (i = 0; i < n; ++i) + { + magnitude += u3[i] * u3[i]; + } + magnitude = sqrtf(magnitude); - for (i = 0; i < n; ++i) { - normal[i] = u3[i] / magnitude; - } + for (i = 0; i < n; ++i) + { + normal[i] = u3[i] / magnitude; + } - free(v1); - free(v2); - free(v3); - free(u1); - free(u2); - free(u3); - return; - } + free(v1); + free(v2); + free(v3); + free(u1); + free(u2); + free(u3); + return; + } } - float *generate_normals_surface(float *d, unsigned char m) { float *n; n = malloc((*d + 1) * sizeof(float)); *n = *d; - float * norm_vec; - norm_vec=malloc(m*sizeof(float)); + float *norm_vec; + norm_vec = malloc(m * sizeof(float)); for (int i = 0; i < *d; i += 3 * m) { - __calculate_normal( (d + 1) + i, (d + 1) + i + m, (d + 1) + i + 2 * m, norm_vec, m); glm_vec3_copy(norm_vec, (n + 1) + i); From b19100424dbeaf4a4ecc88ddfc633b0c34fd0010 Mon Sep 17 00:00:00 2001 From: PedroEdiaz Date: Sun, 1 Dec 2024 12:21:29 -0600 Subject: [PATCH 6/6] Clean --- src/main.o | Bin 12824 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main.o diff --git a/src/main.o b/src/main.o deleted file mode 100644 index 36f5d064e6c5087469b5be291aefffa4c04bd2a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12824 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 CvnxUX