VoxelEngine
 
Loading...
Searching...
No Matches
Sun.h
1#pragma once
2
3#include <glm/glm.hpp>
4
5#include <LWGL/buffer/FBO.h>
6#include <LWGL/buffer/UBO.h>
7#include <LWGL/texture/TextureArray.h>
8
9#include "render/Material.h"
10#include "render/RenderPass.h"
11#include "scene/Updateable.h"
12
13
14namespace engine {
15
16 class Engine;
17 class Camera;
18
19 class Sun : public Updateable {
20 public:
21 static inline float DistanceFromTarget = 512.0f;
22
23 Sun(glm::ivec2 resolution,
24 const Camera* target,
25 const glm::vec3& direction = glm::vec3(0.0f, -1.0f, 0.0f));
26
27 struct Cascade {
28 float farPlane;
29 glm::mat4 lightSpace;
30 };
31
32 void setTarget(const Camera* target);
33 void setDirection(const glm::vec3& direction);
34 void setLightColor(const glm::vec3& color, float intensity);
35
36 glm::vec3 lightPosition(glm::vec3& outLookAtPos) const;
37 glm::vec3 direction() const { return m_direction; }
38 glm::vec3 lightColor() const { return m_lightColor; }
39 float lightIntensity() const { return m_lightIntensity; }
40 glm::ivec2 resolution() const { return m_resolution; }
41
42 void update(float dt) override;
43
44 const std::vector<Cascade>& cascadeSplits() const { return m_cascadeSplits; }
45 gl::TextureRef cascadeShadowMaps() const;
46
47 const gl::FBO* shadowFBO() const { return &m_depthFBO; }
48 Material* shadowMaterial() { return &m_depthShader; }
49
50 protected:
51 std::vector<Cascade> m_cascadeSplits = {
52 Cascade{16.0f, glm::mat4(1)},
53 Cascade{64.0f, glm::mat4(1)},
54 Cascade{128.0f, glm::mat4(1)},
55 Cascade{256.0f, glm::mat4(1)}
56 };
57 glm::ivec2 m_resolution;
58
59 const Camera* m_target;
60 glm::vec3 m_direction;
61
62 // glm::mat4 m_view;
63 // glm::mat4 m_projection;
64 // glm::vec3 m_position;
65
66 gl::UBO m_lightSpaceUBO;
67 gl::FBO m_depthFBO;
68 Material m_depthShader;
69
70 glm::vec3 m_lightColor = glm::vec3(1.0f, 1.0f, 1.0f);
71 float m_lightIntensity = 1.0f;
72
73 void calculateLightSpaceMatrices();
74 };
75} // namespace engine
Definition Camera.h:29
Definition Sun.h:19
Definition Updateable.h:6
Definition Sun.h:27