1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-03 13:03:38 +00:00
lovr/src/model/modelData.c

29 lines
1,020 B
C
Raw Normal View History

2016-10-04 04:54:27 +00:00
#include "modelData.h"
2016-10-29 06:40:31 +00:00
#include <stdlib.h>
#include <assimp/scene.h>
2016-10-04 04:54:27 +00:00
#include <assimp/cimport.h>
#include <assimp/postprocess.h>
ModelData* lovrModelDataCreate(const char* filename) {
ModelData* modelData = malloc(sizeof(ModelData));
2016-10-09 04:52:58 +00:00
const struct aiScene* scene = aiImportFile(filename, aiProcessPreset_TargetRealtime_MaxQuality);
const struct aiMesh* mesh = scene->mMeshes[0];
modelData->vertexCount = mesh->mNumFaces * 3;
modelData->data = malloc(3 * modelData->vertexCount * sizeof(float));
for (int i = 0; i < mesh->mNumFaces; i++) {
for (int j = 0; j < mesh->mFaces[i].mNumIndices; j++) {
int index = mesh->mFaces[i].mIndices[j];
modelData->data[9 * i + 3 * j + 0] = mesh->mVertices[index].x;
modelData->data[9 * i + 3 * j + 1] = mesh->mVertices[index].y;
modelData->data[9 * i + 3 * j + 2] = mesh->mVertices[index].z;
}
}
aiReleaseImport(scene);
2016-10-04 04:54:27 +00:00
return modelData;
}
void lovrModelDataDestroy(ModelData* modelData) {
2016-10-09 04:54:23 +00:00
free(modelData->data);
2016-10-04 04:54:27 +00:00
free(modelData);
}