From 96df57fc90866fd80c2f43dafd422bf6fab0e53d Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 22 Oct 2024 12:05:19 -0600 Subject: [PATCH] Ya deberia funcionar n==4, pero por alguna razon no corre con make run, iura --- src/main.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 922ec41..7e54851 100755 --- a/src/main.c +++ b/src/main.c @@ -22,9 +22,8 @@ unsigned char palette[] = void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) { - float alpha; - vec4 lado1, lado2; - vec4 u1, u2, proy; + vec4 lado1, lado2, lado3; + vec4 u1, u2, u3; switch (n) { @@ -38,19 +37,34 @@ void calc_normal(float* v1, float* v2, float* v3,float* normal, unsigned char n) return; case 4: -#if 0 - glm_vec4_sub(v2, v1, lado1); - glm_vec4_sub(v3, v1, lado2); - glm_vec4_copy(lado1, u1); + glm_vec4_sub(v2, v1, lado1); + glm_vec4_sub(v3, v1, lado2); + glm_vec4_sub(v2, v1, lado3); + + glm_vec4_copy(lado1, u1); - alpha = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); - glm_vec4_scale(u1, alpha, proy); - glm_vec4_sub(lado2, proy, u2); + float alpha = glm_vec4_dot(lado2, u1) / glm_vec4_dot(u1, u1); + vec4 proj_u1; + glm_vec4_scale(u1, alpha, proj_u1); + glm_vec4_sub(lado2, proj_u1, u2); - glm_vec4_normalize(u2); - glm_vec4_copy(u2, normal); -#endif + glm_vec4_normalize(u2); + + float beta = glm_vec4_dot(lado3, u1) / glm_vec4_dot(u1, u1); + vec4 proj_u1_lado3; + glm_vec4_scale(u1, beta, proj_u1_lado3); + + float gamma = glm_vec4_dot(lado3, u2) / glm_vec4_dot(u2, u2); + vec4 proj_u2; + glm_vec4_scale(u2, gamma, proj_u2); + + glm_vec4_sub(lado3, proj_u1_lado3, u3); + glm_vec4_sub(u3, proj_u2, u3); + + glm_vec4_normalize(u3); + + glm_vec4_copy(u3, normal); return; } }