aiura con R^n
This commit is contained in:
BIN
src/main.o
Normal file
BIN
src/main.o
Normal file
Binary file not shown.
@@ -82,6 +82,38 @@ float *generate_data_surface(int grid_size, unsigned char *m)
|
|||||||
return d_surface;
|
return d_surface;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* pa' rearmar la funcion _calc_normal te entendi que creara las funciones de cglm artesanalmente, entonces ps eso hago xd */
|
||||||
|
|
||||||
|
void subtract(const float *v1, const float *v2, float *result, unsigned char n)
|
||||||
|
{
|
||||||
|
for (unsigned char i = 0; i < n; i++) {
|
||||||
|
result[i] = v1[i] - v2[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float dot_product(const float *a, const float *b, unsigned char n)
|
||||||
|
{
|
||||||
|
float result = 0.0f;
|
||||||
|
for (unsigned char i = 0; i < n; i++) {
|
||||||
|
result += a[i] * b[i];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void escalar_product(float a, const float *v1, float *result, unsigned char n)
|
||||||
|
{
|
||||||
|
for (unsigned char i = 0; i < n; i++) {
|
||||||
|
result[i] = a * v1[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void norm(const float *v1, float *result, unsigned char n)
|
||||||
|
{
|
||||||
|
float lenght = sqrtf(dot_product(v1, v1, n));
|
||||||
|
float inv_lenght = 1.0f / lenght;
|
||||||
|
escalar_product(inv_lenght, v1, result, n);
|
||||||
|
}
|
||||||
|
|
||||||
static void __calculate_normal(
|
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)
|
||||||
{
|
{
|
||||||
@@ -190,7 +222,7 @@ static void __calculate_normal(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
float *generate_normals_surface(float *d, unsigned char m)
|
float *generate_normals_surface(float *d, unsigned char m)
|
||||||
{
|
{
|
||||||
float *n;
|
float *n;
|
||||||
@@ -209,3 +241,34 @@ float *generate_normals_surface(float *d, unsigned char m)
|
|||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Ando bien perdido u.u
|
||||||
|
|
||||||
|
float *generate_normals_surface(const float *d, unsigned char m)
|
||||||
|
{
|
||||||
|
float *n = malloc((*d + 1) * sizeof(float));
|
||||||
|
*n = *d;
|
||||||
|
float v1[m], v2[m], normal[m];
|
||||||
|
for (int i = 0; i < *d; i += 3 * m)
|
||||||
|
{
|
||||||
|
const float *A = (d + 1) + i;
|
||||||
|
const float *B = (d + 1) + i + m;
|
||||||
|
const float *C = (d + 1) + i + 2 * m;
|
||||||
|
|
||||||
|
subtract(B, A, v1, m);
|
||||||
|
subtract(C, A, v2, m);
|
||||||
|
|
||||||
|
for (unsigned char j = 0; j < m; j++) {
|
||||||
|
normal[j] = v1[(j + 1) % m] * v2[(j + 2) % m] - v1[(j + 2) % m] * v2[(j + 1) % m];
|
||||||
|
}
|
||||||
|
norm(normal, normal, m);
|
||||||
|
for (unsigned char j = 0; j < m; j++) {
|
||||||
|
(n + 1)[i + j] = normal[j];
|
||||||
|
(n + 1)[i + m + j] = normal[j];
|
||||||
|
(n + 1)[i + 2 * m + j] = normal[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user