107 lines
2.3 KiB
C
107 lines
2.3 KiB
C
#include <stddef.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdbool.h>
|
|
#include "mesh.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
#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\\cube.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);
|
|
|
|
} |