Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
skinned_mesh.h
1#ifndef OE_SCENE_NODE_SKINNED_MESH_H
2#define OE_SCENE_NODE_SKINNED_MESH_H
3
4#include "mesh.h"
5#include "../vertex.h"
6#include "../mesh.h"
7#include "../skin.h"
8
9namespace oe::render
10{
11 class SkinnedMeshNode;
12}
13
14namespace oe::scene
15{
26 {
27 public:
35 SkinnedMeshNode(std::shared_ptr<oe::scene::SkinnedMesh> mesh = nullptr);
36
43 void addMesh(std::shared_ptr<oe::scene::SkinnedMesh> mesh, Material* material = nullptr);
44
46
47#if 0
48 void fillBlendshapes(const BlendShapeCollection& blendshape_data/*, const size_t idSubMesh = 0 ; Keep ?? */);
49
53 void cleanBlendShapesData();
54
55
56
57 // inline const std::vector<float>& getBlendshapeData() const { return _blendshape_raw_data; }
58 //inline const std::vector<float>& getBlendshapeData() const { return {}; }
59
60#endif
61
68 void addBone(Node* node = nullptr, const glm::mat4 inverse_bind_matrix = glm::mat4(1.0));
69
76 virtual void update(const double& delta, const int8_t flags = 0) override;
77
91 inline const std::vector<glm::mat4> getBonesMatrices() const
92 {
93 return _bones_matrices;
94 }
95
105 const std::vector<skin::Bone>& getBones() const
106 {
107 return _bones;
108 }
109
115 virtual std::unique_ptr<oe::render::Node> generateRenderNode() override;
116
117 private:
118 std::vector<std::shared_ptr<oe::scene::SkinnedMesh>> _meshes;
119
120 std::vector<std::vector<size_t>> _submesh_materials;
121
122 std::vector<skin::Bone> _bones;
123 std::vector<glm::mat4> _bones_matrices;
124
125 std::shared_ptr<skin::BlendShapeManager> blendshapes;
126
127 friend class oe::render::SkinnedMeshNode;
128
129 };
130}
131#endif
Definition skinned_mesh.h:16
Render agnostic material.
Definition material.h:26
Definition node.h:31
Definition renderable.h:16
Skinned mesh node.
Definition skinned_mesh.h:26
virtual std::unique_ptr< oe::render::Node > generateRenderNode() override
void addBone(Node *node=nullptr, const glm::mat4 inverse_bind_matrix=glm::mat4(1.0))
oe::scene::SkinnedMesh getMesh() { return _mesh; }
const std::vector< skin::Bone > & getBones() const
Definition skinned_mesh.h:105
const std::vector< glm::mat4 > getBonesMatrices() const
Definition skinned_mesh.h:91
virtual void update(const double &delta, const int8_t flags=0) override
SkinnedMeshNode(std::shared_ptr< oe::scene::SkinnedMesh > mesh=nullptr)
void addMesh(std::shared_ptr< oe::scene::SkinnedMesh > mesh, Material *material=nullptr)
Render related abstractions (Shader, Framebuffer, Cubemaps, Textures)
Definition opengl.h:10
Scene related management (Render-agnostic Geometry, Manger, etc...)
Definition debug.h:19