2#ifndef LIBSBX_SCENES_SCENE_ENVIRONMENT_HPP_
3#define LIBSBX_SCENES_SCENE_ENVIRONMENT_HPP_
10#include <libsbx/math/vector2.hpp>
11#include <libsbx/math/vector3.hpp>
12#include <libsbx/math/vector4.hpp>
13#include <libsbx/math/matrix4x4.hpp>
17#include <libsbx/core/engine.hpp>
19#include <libsbx/scenes/node.hpp>
20#include <libsbx/scenes/scene_graph.hpp>
21#include <libsbx/scenes/components/camera.hpp>
22#include <libsbx/scenes/components/directional_light.hpp>
24namespace sbx::scenes {
28 static constexpr auto csm_cascade_count = std::uint32_t{4u};
31 std::array<math::matrix4x4, csm_cascade_count> light_spaces{};
47 auto camera()
const -> scenes::node {
51 auto set_active_camera(
const scenes::node
camera) ->
void {
55 auto cascade_light_spaces()
const ->
const std::array<math::matrix4x4, csm_cascade_count>& {
56 return _cached_csm.light_spaces;
59 static constexpr auto cascade_count() -> std::uint32_t {
60 return csm_cascade_count;
64 return _uniform_handler;
67 auto update_uniforms() -> void;
70 return _view_projection;
78 _render_target_size = size;
82 return _render_target_size;
87 static auto _lerp_float(
const std::float_t a,
const std::float_t b,
const std::float_t t) -> std::float_t {
88 return a + (b - a) * t;
91 static auto _compute_csm_splits(
const std::float_t near_plane,
const std::float_t far_plane,
const std::float_t lambda) -> std::array<std::float_t, csm_cascade_count>;
95 auto _build_csm(std::float_t aspect_ratio) -> csm_data;
100 scenes::node _camera;
107 csm_data _cached_csm;
Definition: matrix4x4.hpp:26
A vector in two-dimensional space.
Definition: vector2.hpp:28
Definition: vector3.hpp:23
Definition: vector4.hpp:24
RGBA color value type.
Definition: color.hpp:48
3D ray with normalized direction.
Definition: ray.hpp:37
Definition: camera.hpp:96
Definition: directional_light.hpp:10
Definition: scene_environment.hpp:26
Definition: scene_graph.hpp:32
Matrix casting and decomposition utilities.
Ray type for geometric queries.