3#include <assimp/Importer.hpp>
4#include <assimp/scene.h>
5#include <assimp/postprocess.h>
12 Assimp::Importer importer;
14 uint32_t flags = aiProcess_Triangulate | aiProcess_JoinIdenticalVertices | aiProcess_SortByPType;
17 flags |= aiProcess_FlipUVs;
20 const aiScene* scene = importer.ReadFile(filename, flags);
22 if( scene ==
nullptr )
24 throw std::runtime_error(importer.GetErrorString());
27 if( scene->HasMaterials() )
29 for( uint32_t i = 0; i < scene->mNumMaterials; i++ )
31 mMaterials.push_back(std::shared_ptr<ModelMaterial>(
new ModelMaterial(*
this, *scene->mMaterials[i])));
35 if( scene->HasMeshes() )
37 for( uint32_t i = 0; i < scene->mNumMeshes; i++ )
39 mMeshes.push_back(std::shared_ptr<Mesh>(
new Mesh(*
this, *(scene->mMeshes[i]))));
45 Assimp::Importer importer;
47 uint32_t flags = aiProcess_Triangulate | aiProcess_JoinIdenticalVertices | aiProcess_SortByPType;
50 flags |= aiProcess_FlipUVs;
53 const aiScene* scene = importer.ReadFileFromMemory(fileBytes.data(), fileBytes.size(), flags,
"fbx");
57 throw std::runtime_error(importer.GetErrorString());
60 if (scene->HasMaterials())
62 for (uint32_t i = 0; i < scene->mNumMaterials; i++)
64 mMaterials.push_back(std::shared_ptr<ModelMaterial>(
new ModelMaterial(*
this, *scene->mMaterials[i])));
68 if (scene->HasMeshes())
70 for (uint32_t i = 0; i < scene->mNumMeshes; i++)
72 mMeshes.push_back(std::shared_ptr<Mesh>(
new Mesh(*
this, *(scene->mMeshes[i]))));
78 return !mMeshes.empty();
82 return !mMaterials.empty();
Represents a single material imported from a 3D model file.
bool HasMeshes() const
Checks whether this model contains any meshes.
bool HasMaterials() const
Checks whether this model contains any materials.
Model(const std::string &filename, bool flipUVs=false)
Constructs a model from a file.
const std::vector< std::shared_ptr< ModelMaterial > > & Materials() const
Returns the list of materials belonging to this model.
const std::vector< std::shared_ptr< Mesh > > & Meshes() const
Returns the list of meshes belonging to this model.