#include #include #include #include #include "mesh.h" #include #include "array.h" mesh_t mesh = { .vertices = NULL, .faces = NULL, .rotation = { 0, 0, 0 } }; vec3_t cube_vertices[N_CUBE_VERTICES] = { { .x = -1, .y = -1, .z = -1 }, // 1 { .x = -1, .y = 1, .z = -1 }, // 2 { .x = 1, .y = 1, .z = -1 }, // 3 { .x = 1, .y = -1, .z = -1 }, // 4 { .x = 1, .y = 1, .z = 1 }, // 5 { .x = 1, .y = -1, .z = 1 }, // 6 { .x = -1, .y = 1, .z = 1 }, // 7 { .x = -1, .y = -1, .z = 1 } // 8 }; face_t cube_faces[N_CUBE_FACES] = { // front { .a = 1, .b = 2, .c = 3 }, { .a = 1, .b = 3, .c = 4 }, // right { .a = 4, .b = 3, .c = 5 }, { .a = 4, .b = 5, .c = 6 }, // back { .a = 6, .b = 5, .c = 7 }, { .a = 6, .b = 7, .c = 8 }, // left { .a = 8, .b = 7, .c = 2 }, { .a = 8, .b = 2, .c = 1 }, // top { .a = 2, .b = 7, .c = 5 }, { .a = 2, .b = 5, .c = 3 }, // bottom { .a = 6, .b = 8, .c = 1 }, { .a = 6, .b = 1, .c = 4 } }; void load_cube_mesh_data(void) { for (int i = 0; i < N_CUBE_VERTICES; i++) { array_push(mesh.vertices, cube_vertices[i]); } for (int i = 0; i < N_CUBE_FACES; i++) { array_push(mesh.faces, cube_faces[i]); } } void parse_face(const char* buffer, face_t* face) { char temp_a[64], temp_b[64], temp_c[64]; sscanf(buffer, "f %63s %63s %63s", temp_a, temp_b, temp_c); char* token; token = strtok(temp_a, "/"); face->a = token ? atoi(token) : -1; token = strtok(temp_b, "/"); face->b = token ? atoi(token) : -1; token = strtok(temp_c, "/"); face->c = token ? atoi(token) : -1; } void load_file(void) { FILE* fp; char* tok; fp = fopen("..\\assets\\f22.obj", "r"); if (fp == NULL) { exit(EXIT_FAILURE); } char buffer[MAX_LEN]; while (fgets(buffer, MAX_LEN, fp)) { if (strncmp(buffer, "v ", 2) == 0) { vec3_t vertex; sscanf(buffer, "v %f %f %f", &vertex.x, &vertex.y, &vertex.z); array_push(mesh.vertices, vertex); } else if (strncmp(buffer, "f ", 2) == 0) { face_t face; parse_face(buffer, &face); array_push(mesh.faces, face); } printf("\n"); } fflush(stdout); fclose(fp); }