Pioneer
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 
25 struct aiNode;
26 struct aiMesh;
27 struct aiScene;
28 struct aiNodeAnim;
29 
30 namespace 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,
49  WAVEFRONT
50  };
51 
52  bool m_doLog;
53  bool m_loadSGMs;
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
const std::vector< std::string > & GetLogMessages() const
Definition: Loader.h:40
bool m_doLog
Definition: Loader.h:52
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
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
Loader(Graphics::Renderer *r, bool logWarnings=false, bool loadSGMfiles=true)
Definition: Loader.cpp:121
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
void ConvertAiMeshes(std::vector< RefCountedPtr< StaticGeometry >> &, const aiScene *)
Definition: Loader.cpp:458
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