Unravel Engine C++ Reference
Loading...
Searching...
No Matches
model.h
Go to the documentation of this file.
1#pragma once
2#include <engine/engine_export.h>
3
4#include <base/basetypes.hpp>
5
7
8#include "gpu_program.h"
9#include "material.h"
10#include "mesh.h"
11
12#include <graphics/graphics.h>
13#include <math/math.h>
16
17#include <vector>
18
19namespace unravel
20{
21
23{
27 std::vector<math::mat4> transforms;
28};
29
31{
35 std::vector<math::transform> transforms;
36};
41class model : public crtp_meta_type<model>
42{
43public:
45
46
50 auto is_valid() const -> bool;
51
57 auto get_lod(uint32_t lod) const -> asset_handle<mesh>;
58
64 void set_lod(asset_handle<mesh> mesh, uint32_t lod);
65
71 void set_material(asset_handle<material> material, uint32_t index);
72 void set_material_instance(material::sptr material, uint32_t index);
73
78 auto get_lods() const -> const std::vector<asset_handle<mesh>>&;
79
84 void set_lods(const std::vector<asset_handle<mesh>>& lods);
85
90 auto get_materials() const -> const std::vector<asset_handle<material>>&;
91 auto get_material_instances() const -> const std::vector<material::sptr>&;
92
97 void set_materials(const std::vector<asset_handle<material>>& materials);
98 void set_material_instances(const std::vector<material::sptr>& materials);
99
105 auto get_material(uint32_t index) const -> asset_handle<material>;
106 auto get_material_instance(uint32_t index) const -> material::sptr;
107 auto get_or_emplace_material_instance(uint32_t index) -> material::sptr;
108
113 auto get_lod_limits() const -> const std::vector<urange32_t>&;
114
119 void set_lod_limits(const std::vector<urange32_t>& limits);
120
126 {
131 struct params
132 {
134 bool skinned{};
136 };
137
139 std::function<void(const params& info)> setup_begin;
141 std::function<void(const params& info)> setup_params_per_instance;
143 std::function<void(const params& info, const material&)> setup_params_per_submesh;
145 std::function<void(const params& info)> setup_end;
146 };
147
155 void submit(const math::mat4& world_transform,
156 const pose_mat4& submesh_transforms,
157 const pose_mat4& bone_transforms,
158 const std::vector<pose_mat4>& skinning_matrices,
159 unsigned int lod,
160 const submit_callbacks& callbacks) const;
161
167
173
174private:
178 void recalulate_lod_limits();
179
184 void resize_materials(const asset_handle<mesh>& mesh);
185
187 std::vector<asset_handle<material>> materials_;
188
189 std::vector<material::sptr> material_instances_;
190
192 std::vector<asset_handle<mesh>> mesh_lods_;
194 std::vector<urange32_t> lod_limits_;
195};
196
197} // namespace unravel
Base class for materials used in rendering.
Definition material.h:32
std::shared_ptr< material > sptr
Definition material.h:36
Main class representing a 3D mesh with support for different LODs, submeshes, and skinning.
Definition mesh.h:310
Structure describing a LOD group (set of meshes), LOD transitions, and their materials.
Definition model.h:42
auto get_material(uint32_t index) const -> asset_handle< material >
Gets the material for the specified index.
Definition model.cpp:121
void set_lod_limits(const std::vector< urange32_t > &limits)
Sets the LOD limits.
Definition model.cpp:188
auto get_lod(uint32_t lod) const -> asset_handle< mesh >
Gets the LOD (Level of Detail) mesh for the specified level.
Definition model.cpp:14
static auto fallback_material() -> asset_handle< material > &
Gets the fallback material.
Definition model.cpp:369
void set_material(asset_handle< material > material, uint32_t index)
Sets the material for the specified index.
Definition model.cpp:56
auto is_valid() const -> bool
Checks if the model is valid.
Definition model.cpp:9
auto get_lod_limits() const -> const std::vector< urange32_t > &
Gets the LOD limits.
Definition model.cpp:183
void set_materials(const std::vector< asset_handle< material > > &materials)
Sets the materials.
Definition model.cpp:111
void set_material_instances(const std::vector< material::sptr > &materials)
Definition model.cpp:116
static auto default_material() -> asset_handle< material > &
Gets the default material.
Definition model.cpp:363
void submit(const math::mat4 &world_transform, const pose_mat4 &submesh_transforms, const pose_mat4 &bone_transforms, const std::vector< pose_mat4 > &skinning_matrices, unsigned int lod, const submit_callbacks &callbacks) const
Submits the model for rendering.
Definition model.cpp:193
auto get_material_instance(uint32_t index) const -> material::sptr
Definition model.cpp:131
auto get_material_instances() const -> const std::vector< material::sptr > &
Definition model.cpp:105
void set_material_instance(material::sptr material, uint32_t index)
Definition model.cpp:66
void set_lods(const std::vector< asset_handle< mesh > > &lods)
Sets the LOD meshes.
Definition model.cpp:81
auto get_or_emplace_material_instance(uint32_t index) -> material::sptr
Definition model.cpp:151
void set_lod(asset_handle< mesh > mesh, uint32_t lod)
Sets the LOD (Level of Detail) mesh for the specified level.
Definition model.cpp:44
auto get_materials() const -> const std::vector< asset_handle< material > > &
Gets all the materials.
Definition model.cpp:100
auto get_lods() const -> const std::vector< asset_handle< mesh > > &
Gets all the LOD meshes.
Definition model.cpp:76
#define SERIALIZABLE(T)
Represents a handle to an asset, providing access and management functions.
Parameters for the submit callbacks.
Definition model.h:132
bool skinned
Indicates if the model is skinned.
Definition model.h:134
Callbacks for submitting the model for rendering.
Definition model.h:126
std::function< void(const params &info, const material &)> setup_params_per_submesh
Callback for setting up per submesh.
Definition model.h:143
std::function< void(const params &info)> setup_begin
Callback for setup begin.
Definition model.h:139
std::function< void(const params &info)> setup_params_per_instance
Callback for setting up per instance.
Definition model.h:141
std::function< void(const params &info)> setup_end
Callback for setup end.
Definition model.h:145
std::vector< math::mat4 > transforms
Vector of bone transforms.
Definition model.h:27
std::vector< math::transform > transforms
Vector of bone transforms.
Definition model.h:35