TerraForge3D  2.3.1
3D Terrain And Landscape Generator
ExportManager.cpp
1#define _CRT_SECURE_NO_WARNINGS
2
3#include <fstream>
4#include <iostream>
5#include <atomic>
6#include <thread>
7
8#include "Misc/ExportManager.h"
9#include "Utils/Utils.h"
10#include "Utils/MathUtils.h"
11#include "Base/Model.h"
12
13#include <stb/stb_image.h>
14#include "stb/stb_image_write.h"
15#ifdef TERR3D_WIN32
16#undef __cplusplus // Temporary
17#endif
18#include <assimp/scene.h>
19#include <assimp/Exporter.hpp>
20
21
22void ExportModelAssimp(Model *model, std::string format, std::string path, std::string extension)
23{
24 if(path.size() < 3)
25 {
26 return;
27 }
28
29 if (extension == "")
30 {
31 extension = format;
32 }
33
34 if (path.find("." + extension) == std::string::npos)
35 {
36 path += "." + extension;
37 }
38
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;
59
60 for (int i = 0; i < model->mesh->vertexCount; i++)
61 {
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);
65 float temp = 0;
66 pMesh->mTextureCoords[0][i] = aiVector3D(t.x, t.y, temp);
67 }
68
69 pMesh->mFaces = new aiFace[model->mesh->indexCount / 3];
70 pMesh->mNumFaces = model->mesh->indexCount / 3;
71
72 for (int i = 0, j=0; i < model->mesh->indexCount ; i+=3)
73 {
74 aiFace &face = pMesh->mFaces[j++];
75 face.mIndices = new unsigned int[3];
76 face.mNumIndices = 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];
80 }
81
82 aiReturn r= exporter.Export(scene, format, path);
83 Log(exporter.GetErrorString());
84}
Definition: Model.h:9