Pioneer
Loading...
Searching...
No Matches
Loader.h
Go to the documentation of this file.
1// Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _SCENEGRAPH_ASSIMPLOADER_H
5#define _SCENEGRAPH_ASSIMPLOADER_H
9#include "BaseLoader.h"
10#include "CollisionGeometry.h"
11#include "graphics/Material.h"
12
13// Disable some GCC diagnostics errors.
14#ifdef __GNUC__
15#pragma GCC diagnostic push
16#pragma GCC diagnostic ignored "-Wfloat-equal"
17#pragma GCC diagnostic ignored "-Wshadow"
18#pragma GCC diagnostic ignored "-Wold-style-cast"
19#include <assimp/types.h>
20#pragma GCC diagnostic pop
21#else
22#include <assimp/types.h>
23#endif
24
25struct aiNode;
26struct aiMesh;
27struct aiScene;
28struct aiNodeAnim;
29
30namespace SceneGraph {
31
32 class Loader : public BaseLoader {
33 public:
34 Loader(Graphics::Renderer *r, bool logWarnings = false, bool loadSGMfiles = true);
35
36 //find & attempt to load a model, based on filename (without path or .model suffix)
37 Model *LoadModel(const std::string &name);
38 Model *LoadModel(const std::string &name, const std::string &basepath);
39
40 const std::vector<std::string> &GetLogMessages() const { return m_logMessages; }
41
42 protected:
43 // store the format of the mesh file we're currently importing to
44 // enable importer-specific quirks/workarounds
45 enum class ModelFormat : uint8_t {
46 UNKNOWN = 0,
47 GLTF,
48 COLLADA,
50 };
51
52 bool m_doLog;
56 std::vector<std::string> m_logMessages;
57 std::string m_curMeshDef; //for logging
58
61
62 bool CheckKeysInRange(const aiNodeAnim *, double start, double end);
63 matrix4x4f ConvertMatrix(const aiMatrix4x4 &) const;
65 RefCountedPtr<Node> LoadMesh(const std::string &filename, const std::vector<AnimDefinition> &animDefs); //load one mesh file so it can be added to the model scenegraph. Materials should be created before this!
66 void AddLog(const std::string &);
67 void CheckAnimationConflicts(const Animation *, const std::vector<Animation *> &); //detect animation overlap
68 void ConvertAiMeshes(std::vector<RefCountedPtr<StaticGeometry>> &, const aiScene *); //model is only for material lookup
69 void ConvertAnimations(const aiScene *, const std::vector<AnimDefinition> &, Node *meshRoot);
70 void ConvertNodes(aiNode *node, Group *parent, std::vector<RefCountedPtr<StaticGeometry>> &meshes, const matrix4x4f &);
71 void CreateLabel(const std::string &name, Group *parent, const matrix4x4f &);
72 void CreateThruster(const std::string &name, const matrix4x4f &nodeTrans);
73 void CreateNavlight(const std::string &name, const matrix4x4f &nodeTrans);
75 void LoadCollision(const std::string &filename);
76
77 unsigned int GetGeomFlagForNodeName(const std::string &);
78 };
79
80} // namespace SceneGraph
81#endif
Definition Renderer.h:44
Definition RefCounted.h:36
Definition Animation.h:19
Definition BaseLoader.h:18
Definition Group.h:12
Definition Loader.h:32
RefCountedPtr< Group > m_thrustersRoot
Definition Loader.h:59
bool m_doLog
Definition Loader.h:52
const std::vector< std::string > & GetLogMessages() const
Definition Loader.h:40
std::vector< std::string > m_logMessages
Definition Loader.h:56
matrix4x4f ConvertMatrix(const aiMatrix4x4 &) const
Definition Loader.cpp:735
void ConvertAnimations(const aiScene *, const std::vector< AnimDefinition > &, Node *meshRoot)
Definition Loader.cpp:592
ModelFormat
Definition Loader.h:45
ModelFormat m_modelFormat
Definition Loader.h:55
void ConvertAiMeshes(std::vector< RefCountedPtr< StaticGeometry > > &, const aiScene *)
Definition Loader.cpp:458
Model * LoadModel(const std::string &name)
Definition Loader.cpp:129
RefCountedPtr< Group > m_billboardsRoot
Definition Loader.h:60
void ConvertNodes(aiNode *node, Group *parent, std::vector< RefCountedPtr< StaticGeometry > > &meshes, const matrix4x4f &)
Definition Loader.cpp:849
void CheckAnimationConflicts(const Animation *, const std::vector< Animation * > &)
Definition Loader.cpp:420
void CreateLabel(const std::string &name, Group *parent, const matrix4x4f &)
Definition Loader.cpp:760
std::string m_curMeshDef
Definition Loader.h:57
bool m_loadSGMs
Definition Loader.h:53
bool m_mostDetailedLod
Definition Loader.h:54
Model * CreateModel(ModelDefinition &def)
Definition Loader.cpp:204
unsigned int GetGeomFlagForNodeName(const std::string &)
Definition Loader.cpp:984
void CreateThruster(const std::string &name, const matrix4x4f &nodeTrans)
Definition Loader.cpp:773
bool CheckKeysInRange(const aiNodeAnim *, double start, double end)
Definition Loader.cpp:391
void AddLog(const std::string &)
Definition Loader.cpp:415
void CreateNavlight(const std::string &name, const matrix4x4f &nodeTrans)
Definition Loader.cpp:798
RefCountedPtr< CollisionGeometry > CreateCollisionGeometry(RefCountedPtr< StaticGeometry >, unsigned int collFlag)
Definition Loader.cpp:814
void LoadCollision(const std::string &filename)
Definition Loader.cpp:924
RefCountedPtr< Node > LoadMesh(const std::string &filename, const std::vector< AnimDefinition > &animDefs)
Definition Loader.cpp:316
Definition Model.h:88
Definition Node.h:72
Definition CityOnPlanet.h:31
Definition LoaderDefinitions.h:68