lmgl 1.0.0
A lightweight OpenGL graphics engine library written in C++
Loading...
Searching...
No Matches
lod.hpp
Go to the documentation of this file.
1
13
14#pragma once
15
16#include "lmgl/scene/mesh.hpp"
17
18#include <glm/glm.hpp>
19
20#include <memory>
21#include <vector>
22
23namespace lmgl {
24
25namespace scene {
26
36struct LODLevel {
38 std::shared_ptr<Mesh> mesh;
39
42
49 LODLevel(std::shared_ptr<Mesh> m, float distance) : mesh(m), max_distance_sq(distance * distance) {}
50};
51
59class LOD {
60 public:
62 LOD() = default;
63
65 ~LOD() = default;
66
75 void add_level(std::shared_ptr<Mesh> mesh, float max_distance);
76
88 std::shared_ptr<Mesh> get_mesh(float distance_sq) const;
89
100 std::shared_ptr<Mesh> get_mesh(const glm::vec3 &camera_pos, const glm::vec3 &object_pos) const;
101
107 inline size_t get_level_count() const { return m_levels.size(); }
108
116 inline const LODLevel &get_level(size_t index) const { return m_levels[index]; }
117
123 inline bool has_levels() const { return !m_levels.empty(); }
124
128 inline void clear() { m_levels.clear(); }
129
130 private:
131
133 std::vector<LODLevel> m_levels;
134};
135
136} // namespace scene
137
138} // namespace lmgl
LOD()=default
Default constructor.
~LOD()=default
Default destructor.
bool has_levels() const
Checks if there are any LOD levels defined.
Definition lod.hpp:123
size_t get_level_count() const
Retrieves the number of LOD levels.
Definition lod.hpp:107
void clear()
Clears all LOD levels.
Definition lod.hpp:128
std::shared_ptr< Mesh > get_mesh(float distance_sq) const
Retrieves the appropriate mesh based on the squared distance.
Definition lod.cpp:14
const LODLevel & get_level(size_t index) const
Retrieves a specific LOD level by index.
Definition lod.hpp:116
void add_level(std::shared_ptr< Mesh > mesh, float max_distance)
Adds a new LOD level.
Definition lod.cpp:8
Defines the Mesh class for managing 3D mesh data.
Namespace for scene-related classes and functions.
Definition camera.cpp:7
Forward declarations for Assimp Material structure.
Definition model_loader.cpp:12
Level of Detail (LOD) structure representing a single LOD level.
Definition lod.hpp:36
std::shared_ptr< Mesh > mesh
Shared pointer to the mesh representing this LOD level.
Definition lod.hpp:38
LODLevel(std::shared_ptr< Mesh > m, float distance)
Constructor for LODLevel.
Definition lod.hpp:49
float max_distance_sq
Maximum distance squared at which this LOD level is used.
Definition lod.hpp:41