From 570455be8208efae02ba2ff5382762db39104f09 Mon Sep 17 00:00:00 2001 From: Emil Axelsson Date: Wed, 23 Oct 2019 14:18:53 +0200 Subject: [PATCH] Add intensity property to solar imagery --- .../rendering/renderablesolarimagery.cpp | 12 ++++++++++++ .../rendering/renderablesolarimagery.h | 2 ++ .../rendering/renderablesolarimageryprojection.cpp | 1 + .../rendering/spacecraftcameraplane.cpp | 14 ++++++++++---- .../rendering/spacecraftcameraplane.h | 4 ++-- .../shaders/spacecraftimageplane_fs.glsl | 3 ++- .../shaders/spacecraftimageprojection_fs.glsl | 4 +++- 7 files changed, 32 insertions(+), 8 deletions(-) diff --git a/modules/solarbrowsing/rendering/renderablesolarimagery.cpp b/modules/solarbrowsing/rendering/renderablesolarimagery.cpp index 6f6d952fb8..1724a59a1f 100644 --- a/modules/solarbrowsing/rendering/renderablesolarimagery.cpp +++ b/modules/solarbrowsing/rendering/renderablesolarimagery.cpp @@ -68,6 +68,11 @@ namespace { "Enable frustum", "Enables frustum around the current spacecraft imagery" }; + static const openspace::properties::Property::PropertyInfo MultiplierValueInfo = { + "multiplierValue", + "Multiplier", + "Multiplier for imagery intensity, applied before gamma, contrast and lut" + }; static const openspace::properties::Property::PropertyInfo GammaValueInfo = { "gammaValue", "Gamma", @@ -103,6 +108,7 @@ RenderableSolarImagery::RenderableSolarImagery(const ghoul::Dictionary& dictiona , _contrastValue(ContrastValueInfo, 0.f, -15.f, 15.f) , _enableBorder(EnableBorderInfo, false) , _enableFrustum(EnableFrustumInfo, false) + , _multiplierValue(MultiplierValueInfo, 1.f, 0.f, 10.f) , _gammaValue(GammaValueInfo, 0.9f, 0.1f, 10.f) , _moveFactor(MoveFactorInfo, 1.0, 0.0, 1.0) , _planeOpacity(PlaneOpacityInfo, 1.f, 0.f, 1.f) @@ -152,6 +158,7 @@ RenderableSolarImagery::RenderableSolarImagery(const ghoul::Dictionary& dictiona addProperty(_enableBorder); addProperty(_enableFrustum); addProperty(_activeInstruments); + addProperty(_multiplierValue); addProperty(_gammaValue); addProperty(_contrastValue); addProperty(_downsamplingLevel); @@ -215,6 +222,10 @@ const SpacecraftCameraPlane& RenderableSolarImagery::getCameraPlane() { return *_spacecraftCameraPlane; } +float RenderableSolarImagery::getMultiplierValue() { + return _multiplierValue; +} + float RenderableSolarImagery::getContrastValue() { return _contrastValue; } @@ -326,6 +337,7 @@ void RenderableSolarImagery::render(const RenderData& data, RendererTasks&) { _lut, sunPositionWorld, _planeOpacity, + _multiplierValue, _contrastValue, _gammaValue, _enableBorder, diff --git a/modules/solarbrowsing/rendering/renderablesolarimagery.h b/modules/solarbrowsing/rendering/renderablesolarimagery.h index c17e8be20f..7a97f9ef67 100644 --- a/modules/solarbrowsing/rendering/renderablesolarimagery.h +++ b/modules/solarbrowsing/rendering/renderablesolarimagery.h @@ -63,6 +63,7 @@ public: TransferFunction* getTransferFunction(); const std::unique_ptr& getImageryTexture(); const SpacecraftCameraPlane& getCameraPlane(); + float getMultiplierValue(); float getContrastValue(); float getGammaValue(); float getImageResolutionFactor(); @@ -75,6 +76,7 @@ private: properties::FloatProperty _contrastValue; properties::BoolProperty _enableBorder; properties::BoolProperty _enableFrustum; + properties::FloatProperty _multiplierValue; properties::FloatProperty _gammaValue; properties::DoubleProperty _moveFactor; properties::FloatProperty _planeOpacity; diff --git a/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp b/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp index 42abc17664..bb973252c3 100644 --- a/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp +++ b/modules/solarbrowsing/rendering/renderablesolarimageryprojection.cpp @@ -153,6 +153,7 @@ void RenderableSolarImageryProjection::render(const RenderData& data, RendererTa _shader->setUniform("planePositionSpacecraft[" + std::to_string(i) + "]", glm::dvec3(planeRot * glm::dvec4(planePos, 1.0))); _shader->setUniform("gammaValue[" + std::to_string(i) + "]", solarImagery->getGammaValue()); + _shader->setUniform("multiplierValue[" + std::to_string(i) + "]", solarImagery->getMultiplierValue()); _shader->setUniform("contrastValue[" + std::to_string(i) + "]", solarImagery->getContrastValue()); _shader->setUniform("scale[" + std::to_string(i) + "]", solarImagery->getScale()); _shader->setUniform("centerPixel[" + std::to_string(i) + "]", solarImagery->getCenterPixel()); diff --git a/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp b/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp index 12fbe67f13..f2d549b3c8 100644 --- a/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp +++ b/modules/solarbrowsing/rendering/spacecraftcameraplane.cpp @@ -205,11 +205,16 @@ void SpacecraftCameraPlane::createFrustum() { void SpacecraftCameraPlane::render(const RenderData& data, ghoul::opengl::Texture& imageryTexture, TransferFunction* lut, - const glm::dvec3& sunPositionWorld, float planeOpacity, - float contrastValue, float gammaValue, - bool enableBorder, bool enableFrustum, + const glm::dvec3& sunPositionWorld, + float planeOpacity, + float multiplierValue, + float contrastValue, + float gammaValue, + bool enableBorder, + bool enableFrustum, const glm::vec2& currentCenterPixel, - float currentScale, float multipleImageryOffset, + float currentScale, + float multipleImageryOffset, bool isCoronaGraph) { glEnable(GL_CULL_FACE); @@ -255,6 +260,7 @@ void SpacecraftCameraPlane::render(const RenderData& data, _planeShader->setUniform("centerPixel", currentCenterPixel); _planeShader->setUniform("imageryTexture", imageUnit); _planeShader->setUniform("planeOpacity", planeOpacity); + _planeShader->setUniform("multiplierValue", multiplierValue); _planeShader->setUniform("gammaValue", gammaValue); _planeShader->setUniform("contrastValue", contrastValue); _planeShader->setUniform( diff --git a/modules/solarbrowsing/rendering/spacecraftcameraplane.h b/modules/solarbrowsing/rendering/spacecraftcameraplane.h index 61111d2dcb..c86339410b 100644 --- a/modules/solarbrowsing/rendering/spacecraftcameraplane.h +++ b/modules/solarbrowsing/rendering/spacecraftcameraplane.h @@ -43,8 +43,8 @@ public: void render(const RenderData& data, ghoul::opengl::Texture& imageryTexture, TransferFunction* lut, const glm::dvec3& sunPositionWorld, float planeOpacity, - float contrastValue, float gammaValue, bool enableBorder, bool enableFrustum, - const glm::vec2& currentCenterPixel, float currentScale, + float multiplierValue, float contrastValue, float gammaValue, bool enableBorder, + bool enableFrustum, const glm::vec2& currentCenterPixel, float currentScale, float multipleImageryOffset, bool isCoronaGraph); void update(); diff --git a/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl b/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl index 55b6b3b831..d95f36e454 100644 --- a/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl +++ b/modules/solarbrowsing/shaders/spacecraftimageplane_fs.glsl @@ -25,6 +25,7 @@ uniform sampler2D imageryTexture; uniform sampler1D lut; uniform bool additiveBlending; +uniform float multiplierValue; uniform float contrastValue; uniform float gammaValue; uniform float planeOpacity; @@ -42,7 +43,7 @@ float contrast(float intensity) { Fragment getFragment() { float intensityOrg = texture(imageryTexture, vec2(vs_st.x, 1 - vs_st.y)).r; - intensityOrg = contrast(intensityOrg); + intensityOrg = contrast(intensityOrg * multiplierValue); vec4 outColor; if (hasLut) { diff --git a/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl b/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl index 9bbb8dc568..f10ba71879 100644 --- a/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl +++ b/modules/solarbrowsing/shaders/spacecraftimageprojection_fs.glsl @@ -41,6 +41,7 @@ uniform bool isEnabled[MAX_SPACECRAFT_OBSERVATORY]; uniform bool isCoronaGraph[MAX_SPACECRAFT_OBSERVATORY]; uniform float scale[MAX_SPACECRAFT_OBSERVATORY]; uniform vec2 centerPixel[MAX_SPACECRAFT_OBSERVATORY]; +uniform float multiplierValue[MAX_SPACECRAFT_OBSERVATORY]; const float SUN_RADIUS = 1391600000 * 0.5; @@ -68,7 +69,8 @@ Fragment getFragment() { uv.y -= ((centerPixel[i].y) / SUN_RADIUS) / 2.0; float intensityOrg = texture(imageryTexture[i], vec2(uv.x, 1.0 - uv.y)).r; - intensityOrg = contrast(intensityOrg, i); + float multipliedIntensity = multiplierValue[i] * intensityOrg; + intensityOrg = contrast(multipliedIntensity, i); vec4 res; if (hasLut[i]) {