feat: add forward+ rendering
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include <destrum/Assets/AssetManager.h>
|
||||
#include <destrum/Graphics/Managers/LineRenderingManager.h>
|
||||
#include <destrum/Graphics/Managers/QuadRenderingManager.h>
|
||||
#include "glm/gtc/constants.hpp"
|
||||
#include "glm/gtx/transform.hpp"
|
||||
#include "spdlog/spdlog.h"
|
||||
#include <destrum/Components/Physics/Rigidbody.h>
|
||||
@@ -20,6 +21,7 @@
|
||||
#include "destrum/ObjectModel/GameObject.h"
|
||||
#include "destrum/Util/ModelDoc.h"
|
||||
#include "destrum/Components/Animator.h"
|
||||
#include "destrum/Components/LightComponent.h"
|
||||
#include <components/FirstPersonController.h>
|
||||
#include <components/TriggerLoggerComponent.h>
|
||||
|
||||
@@ -447,6 +449,41 @@ void LightKeeper::customInit()
|
||||
triggerObj->AddComponent<TriggerLoggerComponent>();
|
||||
triggerObj->GetTransform().SetWorldPosition({0.0f, 0.0f, 0.0f});
|
||||
|
||||
// Forward+ test lights: a dim sun and a ring of colored point lights orbiting the origin
|
||||
auto sunObj = scene.CreateGameObject("Sun");
|
||||
auto* sun = sunObj->AddComponent<LightComponent>(LightType::Directional);
|
||||
sun->SetColor(glm::vec3{1.0f, 0.95f, 0.85f});
|
||||
sun->SetIntensity(1.0f);
|
||||
sunObj->GetTransform().SetWorldRotation(glm::vec3{-50.0f, 30.0f, 0.0f});
|
||||
|
||||
constexpr int pointLightCount = 32;
|
||||
constexpr float pointLightRingRadius = 6.0f;
|
||||
for (int i = 0; i < pointLightCount; i++)
|
||||
{
|
||||
const float t = static_cast<float>(i) / static_cast<float>(pointLightCount);
|
||||
const float angle = t * glm::two_pi<float>();
|
||||
|
||||
auto lightObj = scene.CreateGameObject("PointLight " + std::to_string(i));
|
||||
lightObj->GetTransform().SetWorldPosition(glm::vec3{
|
||||
std::cos(angle) * pointLightRingRadius,
|
||||
-0.25f,
|
||||
std::sin(angle) * pointLightRingRadius
|
||||
});
|
||||
|
||||
auto* light = lightObj->AddComponent<LightComponent>(LightType::Point);
|
||||
light->SetColor(glm::vec3{
|
||||
0.5f + 0.5f * std::cos(glm::two_pi<float>() * t),
|
||||
0.5f + 0.5f * std::cos(glm::two_pi<float>() * (t + 0.33f)),
|
||||
0.5f + 0.5f * std::cos(glm::two_pi<float>() * (t + 0.67f))
|
||||
});
|
||||
light->SetIntensity(1.0f);
|
||||
light->SetRange(3.0f);
|
||||
|
||||
auto* orbit = lightObj->AddComponent<Rotator>(pointLightRingRadius, 0.5f);
|
||||
orbit->SetAxis(glm::vec3{0.0f, 1.0f, 0.0f});
|
||||
orbit->SetPivotPosition(glm::vec3{0.0f, -0.25f, 0.0f});
|
||||
}
|
||||
|
||||
auto playerObj = scene.CreateGameObject("Player");
|
||||
playerObj->GetTransform().SetWorldPosition(glm::vec3(0.0f, 2.0f, -5.0f));
|
||||
auto* fps = playerObj->AddComponent<FirstPersonController>();
|
||||
@@ -553,6 +590,11 @@ void LightKeeper::drawDebugMenuBar()
|
||||
ImGui::MenuItem("Box Colliders", nullptr, &renderBoxColliders);
|
||||
ImGui::MenuItem("2D Quads", nullptr, &renderQuads);
|
||||
ImGui::MenuItem("Debug Lines", nullptr, &renderDebugLines);
|
||||
|
||||
bool lightHeatmap = renderer.getRenderLightHeatmap();
|
||||
if (ImGui::MenuItem("Forward+ Light Heatmap", nullptr, &lightHeatmap)) {
|
||||
renderer.setRenderLightHeatmap(lightHeatmap);
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user