MxEngine
src
Core
Components
Rendering
MeshLOD.h
1
// Copyright(c) 2019 - 2020, #Momo
2
// All rights reserved.
3
//
4
// Redistribution and use in source and binary forms, with or without
5
// modification, are permitted provided that the following conditions are met :
6
//
7
// 1. Redistributions of source code must retain the above copyright notice, this
8
// list of conditions and the following disclaimer.
9
//
10
// 2. Redistributions in binary form must reproduce the above copyright notice,
11
// this list of conditions and the following disclaimer in the documentation
12
// and /or other materials provided with the distribution.
13
//
14
// 3. Neither the name of the copyright holder nor the names of its
15
// contributors may be used to endorse or promote products derived from
16
// this software without specific prior written permission.
17
//
18
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
// DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
// DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
// OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29
#pragma once
30
31
#include "Utilities/ECS/Component.h"
32
#include "Core/Resources/AssetManager.h"
33
#include "MeshSource.h"
34
35
namespace
MxEngine
36
{
37
struct
LODConfig
38
{
39
std::array<float, 5> Factors{ 0.001f, 0.01f, 0.05f, 0.15f, 0.3f };
40
};
41
42
class
MeshLOD
43
{
44
MAKE_COMPONENT(
MeshLOD
);
45
public
:
46
using
LODInstance
=
MeshHandle
;
47
using
LODIndex = uint8_t;
48
49
bool
AutoLODSelection =
true
;
50
LODIndex CurrentLOD = 0;
51
52
MxVector<LODInstance> LODs;
53
void
Generate(
LODConfig
config =
LODConfig
{ });
54
void
FixBestLOD(
const
Vector3& viewportPosition,
float
viewportZoom = 1.0f);
55
LODInstance
GetMeshLOD()
const
;
56
};
57
}
MxEngine::Resource< Mesh, ResourceFactory >
MxEngine::LODConfig
Definition:
MeshLOD.h:37
MxEngine::MeshLOD
Definition:
MeshLOD.h:42
MxEngine
Definition:
Application.cpp:49
Generated by
1.8.12