From 58d402fc67f37bbbaed8dcdb4f2d4da63c833351 Mon Sep 17 00:00:00 2001 From: Joakim Kilby Date: Tue, 17 Oct 2023 09:15:26 +0200 Subject: [PATCH] use lightsource from model specification instead of (hardcoded) sun --- modules/base/lightsource/scenegraphlightsource.cpp | 5 +++++ modules/base/lightsource/scenegraphlightsource.h | 1 + modules/base/rendering/renderablemodel.cpp | 9 +++++++-- modules/base/rendering/renderablemodel.h | 2 +- modules/globebrowsing/src/renderableglobe.cpp | 2 +- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/modules/base/lightsource/scenegraphlightsource.cpp b/modules/base/lightsource/scenegraphlightsource.cpp index fdb33d58ad..d8df63b9d5 100644 --- a/modules/base/lightsource/scenegraphlightsource.cpp +++ b/modules/base/lightsource/scenegraphlightsource.cpp @@ -96,6 +96,11 @@ float SceneGraphLightSource::intensity() const { return _intensity; } +glm::dvec3 SceneGraphLightSource::positionWorldSpace() const +{ + return _sceneGraphNode->modelTransform() * glm::dvec4(0.0, 0.0, 0.0, 1.0); +} + glm::vec3 SceneGraphLightSource::directionViewSpace(const RenderData& renderData) const { if (!_sceneGraphNode) { return glm::vec3(0.f); diff --git a/modules/base/lightsource/scenegraphlightsource.h b/modules/base/lightsource/scenegraphlightsource.h index 1a5177f586..68407fd1ef 100644 --- a/modules/base/lightsource/scenegraphlightsource.h +++ b/modules/base/lightsource/scenegraphlightsource.h @@ -44,6 +44,7 @@ public: bool initialize() override; glm::vec3 directionViewSpace(const RenderData& renderData) const override; float intensity() const override; + glm::dvec3 positionWorldSpace() const; private: properties::FloatProperty _intensity; diff --git a/modules/base/rendering/renderablemodel.cpp b/modules/base/rendering/renderablemodel.cpp index 5e6b29ce15..bcb39ce0aa 100644 --- a/modules/base/rendering/renderablemodel.cpp +++ b/modules/base/rendering/renderablemodel.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -1202,7 +1203,11 @@ const bool RenderableModel::isCastingShadow() const { return _castShadow; } -RenderableModel::DepthMapData RenderableModel::renderDepthMap(const glm::dvec3 light_position) const { +RenderableModel::DepthMapData RenderableModel::renderDepthMap() const { + + const openspace::SceneGraphLightSource* light = + dynamic_cast(_lightSources.front().get()); + GLint prevProg; glGetIntegerv(GL_CURRENT_PROGRAM, &prevProg); @@ -1223,7 +1228,7 @@ RenderableModel::DepthMapData RenderableModel::renderDepthMap(const glm::dvec3 l // View glm::dvec3 center = this->parent()->worldPosition(); - glm::dvec3 light_dir = glm::normalize(center - light_position); + glm::dvec3 light_dir = glm::normalize(center - light->positionWorldSpace()); glm::dvec3 right = glm::normalize(glm::cross(glm::dvec3(0, 1, 0), -light_dir)); glm::dvec3 eye = center + light_dir * size; glm::dvec3 up = glm::cross(right, light_dir); diff --git a/modules/base/rendering/renderablemodel.h b/modules/base/rendering/renderablemodel.h index 4e40262770..e54f2b5fef 100644 --- a/modules/base/rendering/renderablemodel.h +++ b/modules/base/rendering/renderablemodel.h @@ -73,7 +73,7 @@ public: void update(const UpdateData& data) override; const bool isCastingShadow() const; - DepthMapData renderDepthMap(const glm::dvec3 light_position) const; + DepthMapData renderDepthMap() const; static documentation::Documentation Documentation(); diff --git a/modules/globebrowsing/src/renderableglobe.cpp b/modules/globebrowsing/src/renderableglobe.cpp index 0a50a75f12..6d727fe2c6 100644 --- a/modules/globebrowsing/src/renderableglobe.cpp +++ b/modules/globebrowsing/src/renderableglobe.cpp @@ -1322,7 +1322,7 @@ void RenderableGlobe::renderChunks(const RenderData& data, RendererTasks&, std::vector shadowers = shadowingChildren(this->parent()); std::vector depthMapData; for (const RenderableModel* model : shadowers) { - depthMapData.push_back(model->renderDepthMap(sun->worldPosition())); + depthMapData.push_back(model->renderDepthMap()); } int globalCount = 0;