1#include "ModelImporter.h"
7#include <assimp/Importer.hpp>
8#include <assimp/scene.h>
9#include <assimp/postprocess.h>
12Mesh *LoadMesh(aiMesh *paiMesh)
15 const aiVector3D Zero3D(0.0f, 0.0f, 0.0f);
16 Vert *verts =
new Vert[paiMesh->mNumVertices];
17 mesh.vertexCount = paiMesh->mNumVertices;
19 for (
unsigned int i = 0; i < paiMesh->mNumVertices; i++)
21 const aiVector3D *pPos = &(paiMesh->mVertices[i]);
22 const aiVector3D *pNormal = &(paiMesh->mNormals[i]);
23 const aiVector3D *pTexCoord = paiMesh->HasTextureCoords(0) ? &(paiMesh->mTextureCoords[0][i]) : &Zero3D;
25 tmp.position = glm::vec4(0.0f);
26 tmp.position.x = pPos->x;
27 tmp.position.y = pPos->y;
28 tmp.position.z = pPos->z;
29 tmp.texCoord = glm::vec2(1.0f);
33 tmp.texCoord.x = pTexCoord->x;
34 tmp.texCoord.y = pTexCoord->y;
37 tmp.normal = glm::vec4(1.0f);
41 tmp.normal.x = pNormal->x;
42 tmp.normal.y = pNormal->y;
43 tmp.normal.z = pNormal->z;
50 mesh.indexCount = paiMesh->mNumFaces * 3;
51 mesh.indices =
new int[mesh.indexCount];
54 for (
unsigned int i = 0; i < paiMesh->mNumFaces; i++)
56 const aiFace &Face = paiMesh->mFaces[i];
57 mesh.indices[co++] = Face.mIndices[0];
58 mesh.indices[co++] = Face.mIndices[1];
59 mesh.indices[co++] = Face.mIndices[2];
65Model *LoadModel(std::string path)
67 Assimp::Importer importer;
71 const aiScene *scene = importer.ReadFile(path,
72 aiProcess_CalcTangentSpace |
73 aiProcess_Triangulate |
74 aiProcess_GenSmoothNormals |
75 aiProcess_JoinIdenticalVertices |
76 aiProcess_GenUVCoords |
77 aiProcess_SortByPType);
81 Log(
"Assimp Error : " + std::string(importer.GetErrorString()));
85 aiMesh *paiMesh = scene->mMeshes[0];
86 Model *model =
new Model(std::string(paiMesh->mName.C_Str()));
87 model->SetupMeshOnGPU();
88 model->mesh = LoadMesh(paiMesh);