diff --git a/src/surface.c b/src/surface.c index 4cd2cfe..0d45bb4 100644 --- a/src/surface.c +++ b/src/surface.c @@ -31,6 +31,47 @@ struct parm function_t f; } parm; +// Función para escribir el archivo .klein +void write_klein_file(const char *filename, unsigned char dim, unsigned long vertex, float *vertices, float *normals) +{ + FILE *file = fopen(filename, "wb"); + if (!file) + { + perror("Error al abrir el archivo"); + exit(EXIT_FAILURE); + } + + // Escribir encabezado + fwrite("KLEIN", 1, 5, file); // Los primeros 5 bytes son "KLEIN" + fputc(0, file); // Byte vacío + fwrite(&dim, 1, 1, file); // Dimensión de la superficie + fwrite(&vertex, sizeof(unsigned long), 1, file); // Número de vértices (8 bytes) + + // Escribir dimensiones de la cuadrícula + fwrite(parm.grid, sizeof(unsigned char), dim, file); + // Debug info + for (int i = 0; i < dim; i++) { + printf("Grid[%d]: %u\n", i, parm.grid[i]); + } + + // Escribir vértices (en float) + fwrite(vertices, sizeof(float), vertex * dim, file); + // Debug info + for (unsigned long i = 0; i < vertex * dim; i++) { + printf("Vertices[%lu]: %f\n", i, vertices[i]); + } + + // Escribir normales (en float) + fwrite(normals, sizeof(float), vertex * dim, file); + // Debug info + for (unsigned long i = 0; i < vertex * dim; i++) { + printf("Normals[%lu]: %f\n", i, normals[i]); + } + + fclose(file); + printf("Archivo %s escrito correctamente.\n", filename); +} + int factorial(int n) { if (n == 1) @@ -320,3 +361,40 @@ float *generate_normals_surface(float *d, unsigned char m, unsigned long vertex) free(norm_vec); return n; } +int main() +{ + unsigned char dim; + unsigned long vertex; + float *vertices, *normals; + + // Generar datos de la superficie + vertices = generate_data_surface(&dim, &vertex); + + // Verificar datos generados + if (vertices == NULL) { + printf("Error: vertices no generados.\n"); + return 1; + } + + printf("Dim: %u, Vertex: %lu\n", dim, vertex); + + // Generar normales + normals = generate_normals_surface(vertices, dim, vertex); + + // Verificar normales generadas + if (normals == NULL) { + printf("Error: normales no generadas.\n"); + free(vertices); + return 1; + } + + // Escribir el archivo + printf("Escribiendo archivo .klein\n"); + write_klein_file("kingtin.klein", dim, vertex, vertices, normals); + + free(vertices); + free(normals); + + return 0; +} +