2016-10-04 04:54:27 +00:00
|
|
|
#include "modelData.h"
|
|
|
|
#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) {
|
|
|
|
free(modelData);
|
|
|
|
}
|