1#define _CRT_SECURE_NO_WARNINGS
8#include "Misc/ExportManager.h"
9#include "Utils/Utils.h"
10#include "Utils/MathUtils.h"
11#include "Base/Model.h"
13#include <stb/stb_image.h>
14#include "stb/stb_image_write.h"
18#include <assimp/scene.h>
19#include <assimp/Exporter.hpp>
22void ExportModelAssimp(
Model *model, std::string format, std::string path, std::string extension)
34 if (path.find(
"." + extension) == std::string::npos)
36 path +=
"." + extension;
39 Assimp::Exporter exporter;
40 aiScene *scene =
new aiScene();
41 scene->mRootNode =
new aiNode();
42 scene->mMaterials =
new aiMaterial * [1];
43 scene->mMaterials[0] =
nullptr;
44 scene->mNumMaterials = 1;
45 scene->mMaterials[0] =
new aiMaterial();
46 scene->mMeshes =
new aiMesh * [1];
47 scene->mMeshes[0] =
nullptr;
48 scene->mNumMeshes = 1;
49 scene->mMeshes[0] =
new aiMesh();
50 scene->mMeshes[0]->mMaterialIndex = 0;
51 scene->mRootNode->mMeshes =
new unsigned int[1];
52 scene->mRootNode->mMeshes[0] = 0;
53 scene->mRootNode->mNumMeshes = 1;
54 auto pMesh = scene->mMeshes[0];
55 pMesh->mVertices =
new aiVector3D[model->mesh->vertexCount];
56 pMesh->mNumVertices = model->mesh->vertexCount;
57 pMesh->mTextureCoords[0] =
new aiVector3D[model->mesh->vertexCount];
58 pMesh->mNumUVComponents[0] = model->mesh->vertexCount;
60 for (
int i = 0; i < model->mesh->vertexCount; i++)
62 glm::vec4 &v = model->mesh->vert[i].position;
63 glm::vec2 &t = model->mesh->vert[i].texCoord;
64 pMesh->mVertices[i] = aiVector3D(v.x, v.y, v.z);
66 pMesh->mTextureCoords[0][i] = aiVector3D(t.x, t.y, temp);
69 pMesh->mFaces =
new aiFace[model->mesh->indexCount / 3];
70 pMesh->mNumFaces = model->mesh->indexCount / 3;
72 for (
int i = 0, j=0; i < model->mesh->indexCount ; i+=3)
74 aiFace &face = pMesh->mFaces[j++];
75 face.mIndices =
new unsigned int[3];
77 face.mIndices[0] = model->mesh->indices[i + 0];
78 face.mIndices[1] = model->mesh->indices[i + 1];
79 face.mIndices[2] = model->mesh->indices[i + 2];
82 aiReturn r= exporter.Export(scene, format, path);
83 Log(exporter.GetErrorString());