MOS
model.hpp
1 #pragma once
2 
3 #include <memory>
4 #include <optional>
5 
6 #include <json.hpp>
7 
8 #include <mos/gfx/assets.hpp>
9 #include <mos/gfx/material.hpp>
10 #include <mos/gfx/mesh.hpp>
11 #include <mos/gfx/models.hpp>
12 #include <mos/gfx/texture_2d.hpp>
13 
14 namespace mos::gfx {
15 
16 class Assets;
17 class Material;
18 
19 namespace gl {
20 class Renderer;
21 }
22 
24 class Model final {
25 public:
26  static auto load(const nlohmann::json &json,
27  Assets &assets = *std::make_unique<Assets>(),
28  const glm::mat4 &parent_transform = glm::mat4(1.0f))
29  -> Model;
30 
31  Model(std::string name, Shared_mesh mesh,
32  glm::mat4 transform = glm::mat4(1.0f),
33  Material material = Material{glm::vec3(1.0f)});
34 
35  Model() = default;
36 
37  auto name() const -> std::string;
38 
39  auto position() const -> glm::vec3;
40 
42  auto position(const glm::vec3 &position) -> void;
43 
45  auto centroid() const -> glm::vec3;
46 
48  auto radius() const -> float;
49 
51  auto emission(const glm::vec3 &emission) -> void;
52 
54  auto alpha(float alpha) -> void;
55 
57  auto ambient_occlusion(float ambient_occlusion) -> void;
58 
60  auto index_of_refraction(float index_of_refraction) -> void;
61 
63  auto transmission(float transmission) -> void;
64 
66  auto roughness(float roughness) -> void;
67 
69  auto metallic(float metallic) -> void;
70 
72  Shared_mesh mesh;
73 
76 
78  glm::mat4 transform{0.0f};
79 
81  Models models;
82 
83 private:
84  std::string name_;
85 };
86 } // namespace mos::gfx
Shared_mesh mesh
Mesh shape.
Definition: model.hpp:72
Physically based material.
Definition: material.hpp:12
Cache for faster loading of textures and meshes.
Definition: assets.hpp:20
Definition: assets.hpp:17
Material material
Material.
Definition: model.hpp:75
Models models
Children models.
Definition: model.hpp:81
Collection of properties for a renderable object.
Definition: model.hpp:24