diff --git a/data/scene/digitaluniverse/tully/tully.mod b/data/scene/digitaluniverse/tully/tully.mod index f04aa7660b..884eefbd27 100644 --- a/data/scene/digitaluniverse/tully/tully.mod +++ b/data/scene/digitaluniverse/tully/tully.mod @@ -27,7 +27,9 @@ return { -- Fade in value in the same unit as "Unit" --FadeInThreshould = 5.5, FadeInThreshould = 1.0, - Unit = "Mpc" + Unit = "Mpc", + -- Max size in pixels + BillboardMaxSize = 200.0, }, GuiPath = "/Universe/Galaxies" }, diff --git a/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp b/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp index 72a1ed02b4..f04da60c62 100644 --- a/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp +++ b/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp @@ -178,6 +178,13 @@ namespace { "Disable Fade-in effect", "Enables/Disables the Fade-in effect." }; + + static const openspace::properties::Property::PropertyInfo BillboardMaxSizeInfo = { + "BillboardMaxSize", + "Billboard Max Size in Pixels", + "The max size (in pixels) for the billboard representing the astronomical " + "object." + }; } // namespace namespace openspace { @@ -296,6 +303,12 @@ documentation::Documentation RenderableBillboardsCloud::Documentation() { Optional::Yes, DisableFadeInInfo.description }, + { + BillboardMaxSizeInfo.identifier, + new DoubleVerifier, + Optional::Yes, + BillboardMaxSizeInfo.description + }, } }; } @@ -331,6 +344,7 @@ RenderableBillboardsCloud::RenderableBillboardsCloud(const ghoul::Dictionary& di , _colorOption(ColorOptionInfo, properties::OptionProperty::DisplayType::Dropdown) , _fadeInDistance(FadeInThreshouldInfo, 0.0, 0.1, 100.0) , _disableFadeInDistance(DisableFadeInInfo, true) + , _billboardMaxSize(BillboardMaxSizeInfo, 400.0, 0.0, 1000.0) , _renderOption(RenderOptionInfo, properties::OptionProperty::DisplayType::Dropdown) , _polygonTexture(nullptr) , _spriteTexture(nullptr) @@ -520,7 +534,12 @@ RenderableBillboardsCloud::RenderableBillboardsCloud(const ghoul::Dictionary& di _disableFadeInDistance.set(false); addProperty(_fadeInDistance); addProperty(_disableFadeInDistance); - } + } + + if (dictionary.hasKey(BillboardMaxSizeInfo.identifier)) { + _billboardMaxSize = static_cast(dictionary.value(BillboardMaxSizeInfo.identifier)); + addProperty(_billboardMaxSize); + } } bool RenderableBillboardsCloud::isReady() const { @@ -641,6 +660,7 @@ void RenderableBillboardsCloud::renderBillboards(const RenderData& data, const g _program->setUniform("centerScreenInWorldPosition", centerScreenWorld); _program->setUniform("minBillboardSize", 1.f); // in pixels + _program->setUniform("maxBillboardSize", _billboardMaxSize); // in pixels _program->setUniform("color", _pointColor); _program->setUniform("sides", 4); _program->setUniform("alphaValue", _alphaValue); diff --git a/modules/digitaluniverse/rendering/renderablebillboardscloud.h b/modules/digitaluniverse/rendering/renderablebillboardscloud.h index c7d36c8310..7629ca8a41 100644 --- a/modules/digitaluniverse/rendering/renderablebillboardscloud.h +++ b/modules/digitaluniverse/rendering/renderablebillboardscloud.h @@ -127,6 +127,7 @@ private: properties::OptionProperty _colorOption; properties::FloatProperty _fadeInDistance; properties::BoolProperty _disableFadeInDistance; + properties::FloatProperty _billboardMaxSize; // DEBUG: properties::OptionProperty _renderOption; diff --git a/modules/digitaluniverse/shaders/billboard2_gs.glsl b/modules/digitaluniverse/shaders/billboard2_gs.glsl index d5cf407466..8a5c9f494d 100644 --- a/modules/digitaluniverse/shaders/billboard2_gs.glsl +++ b/modules/digitaluniverse/shaders/billboard2_gs.glsl @@ -39,6 +39,7 @@ uniform dvec3 cameraLookUp; uniform dvec4 centerScreenInWorldPosition; uniform int renderOption; uniform vec2 screenSize; +uniform float maxBillboardSize; in vec4 colorMap[]; @@ -143,7 +144,7 @@ void main() { vec4 bottomLeft = initialPosition/initialPosition.w; bottomLeft = ((bottomLeft + vec4(1.0)) / vec4(2.0)) * vec4(screenSize.x, screenSize.y, 1.0, 1.0); - if ((topLeft.y - bottomLeft.y) > (0.2 * screenSize.y)) { + if ((topLeft.y - bottomLeft.y) > maxBillboardSize) { return; } else { // Build primitive