AireEngine
A 3D Open-World Game Engine
Loading...
Searching...
No Matches
Model.h
1#pragma once
2
3#include <string>
4#include <unordered_map>
5#include <vector>
6#include <assimp/scene.h>
7#include <assimp/Importer.hpp>
8#include <assimp/postprocess.h>
9#include "../utils/rigidbodyHandler.h"
10
11
12#include "Mesh.h"
13#include "../res-management/animationData.h"
14
15namespace Aire {
16
17using ModelHandle = int;
18using BoneInfoMap = std::map<string, BoneInfo>;
19
21{
22 BoneInfoMap boneMap;
23 int boneCounter = 0;
24 std::vector<MeshPtr> meshes;
25};
26
29class Model:public Resource
30{
31public:
32 bool isStatic = true;
33 std::vector<MeshPtr> meshes;
35 glm::mat4 modelMatrix;
36 Rigidbody* rb = nullptr;
37
42 Model(std::vector<MeshPtr> meshes ,std::map<string, BoneInfo> m_BoneInfoMap, //
43 int m_BoneCounter = 0)
44 {
45 //directory = dir;
46 this->meshes = meshes;
47 this->gammaCorrection = false;
48 this->m_BoneInfoMap = m_BoneInfoMap;
49 this->m_BoneCounter = m_BoneCounter;
50 this->modelMatrix = glm::mat4(1.0);
51 }
52
57 void AssignRigidbodyBox(float aWidth, float aHeight, float aDepth);
58
61 void AssignRigidbodyBall(float aRadius);
62
66 void SetGravity(bool gravityOn, float gravityValue);
67
70 void SetCollision(bool aCollidable);
71
74 void SetStatic(bool aStatic);
75
78 auto& GetBoneInfoMap() { return m_BoneInfoMap; }
79
82 int& GetBoneCount() { return m_BoneCounter; }
83
86 void translate(glm::vec3 direction);
87
90 void scale(glm::vec3 val);
91
95 void rotate(float degree, glm::vec3 axis);
96
98 glm::vec3 getPosition();
99
104 void renderInstanced(ShaderProgram& shader, Aire::Camera& camera, glm::mat4 transform);
105
109 void render(ShaderProgram& shader, Aire::Camera& camera);
110
112 uint32_t getSize();
113
114
115private:
116
117 BoneInfoMap m_BoneInfoMap; //
118 int m_BoneCounter = 0;
119
120 void loadModel(std::string path);
121 Mesh processMesh(aiMesh* mesh, const aiScene* scene, BoneInfoMap& map, int& count);
122
123};
124
125using ModelPtr = std::shared_ptr<Model>;
126
127}
Definition camera.h:9
A class for a 3D indexed triangular mesh.
Definition mesh.h:57
Definition Model.h:30
std::vector< MeshPtr > meshes
List of meshes.
Definition Model.h:33
bool gammaCorrection
Flag indicating whether the model use gamma correction.
Definition Model.h:34
void rotate(float degree, glm::vec3 axis)
Definition Model.cpp:102
void render(ShaderProgram &shader, Aire::Camera &camera)
render the model
Definition Model.cpp:134
glm::vec3 getPosition()
Definition Model.cpp:108
glm::mat4 modelMatrix
Model matrix for the model.
Definition Model.h:35
void translate(glm::vec3 direction)
Definition Model.cpp:32
void SetGravity(bool gravityOn, float gravityValue)
Definition Model.cpp:38
void scale(glm::vec3 val)
Definition Model.cpp:87
void AssignRigidbodyBall(float aRadius)
Definition Model.cpp:26
Rigidbody * rb
Rigid body that might be associated with the model.
Definition Model.h:36
void AssignRigidbodyBox(float aWidth, float aHeight, float aDepth)
Definition Model.cpp:19
void renderInstanced(ShaderProgram &shader, Aire::Camera &camera, glm::mat4 transform)
Definition Model.cpp:113
void SetStatic(bool aStatic)
Definition Model.cpp:57
auto & GetBoneInfoMap()
Definition Model.h:78
int & GetBoneCount()
Definition Model.h:82
uint32_t getSize()
Definition Model.cpp:204
Model(std::vector< MeshPtr > meshes, std::map< string, BoneInfo > m_BoneInfoMap, int m_BoneCounter=0)
Definition Model.h:42
bool isStatic
Flag indicating whether the model is static.
Definition Model.h:32
void SetCollision(bool aCollidable)
Definition Model.cpp:48
A base resource class.
Definition resource.h:26
Definition rigidbody.h:8
A linked OpenGL program.
Definition shaderProgram.h:16
Definition Model.h:21