From be1b8201738e0553d5d3bc4103305e667a3ab3d4 Mon Sep 17 00:00:00 2001 From: Malin E Date: Mon, 27 Mar 2023 13:55:20 +0200 Subject: [PATCH] Fix model projection issues --- .../rendering/renderablemodelprojection.cpp | 32 +++++-------------- .../rendering/renderablemodelprojection.h | 9 ++---- 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/modules/spacecraftinstruments/rendering/renderablemodelprojection.cpp b/modules/spacecraftinstruments/rendering/renderablemodelprojection.cpp index 6e9f19fea9..42394f9896 100644 --- a/modules/spacecraftinstruments/rendering/renderablemodelprojection.cpp +++ b/modules/spacecraftinstruments/rendering/renderablemodelprojection.cpp @@ -39,11 +39,9 @@ #include namespace { - constexpr std::array MainUniformNames = { - "modelViewTransform", "projectionTransform", "meshTransform", - "meshNormalTransform", "has_texture_diffuse", "baseTexture", "baseColor", - "projectionTexture", "performShading", "projectionFading", - "directionToSunViewSpace" + constexpr std::array MainUniformNames = { + "performShading", "directionToSunViewSpace", "modelViewTransform", + "projectionTransform", "projectionFading", "baseTexture", "projectionTexture" }; constexpr std::array FboUniformNames = { @@ -96,10 +94,6 @@ namespace { // given ModelScale std::optional invertModelScale; - // Set if invisible parts (parts with no textures or materials) of the model - // should be forced to render or not. - std::optional forceRenderInvisible; - // Contains information about projecting onto this planet. ghoul::Dictionary projection [[codegen::reference("spacecraftinstruments_projectioncomponent")]]; @@ -122,21 +116,11 @@ RenderableModelProjection::RenderableModelProjection(const ghoul::Dictionary& di { const Parameters p = codegen::bake(dictionary); - if (p.forceRenderInvisible.has_value()) { - _forceRenderInvisible = *p.forceRenderInvisible; - - if (!_forceRenderInvisible) { - // Asset file have specifically said to not render invisible parts, - // do not notify in the log if invisible parts are detected and dropped - _notifyInvisibleDropped = false; - } - } - std::filesystem::path file = absPath(p.geometryFile.string()); _geometry = ghoul::io::ModelReader::ref().loadModel( file.string(), - ghoul::io::ModelReader::ForceRenderInvisible(_forceRenderInvisible), - ghoul::io::ModelReader::NotifyInvisibleDropped(_notifyInvisibleDropped) + ghoul::io::ModelReader::ForceRenderInvisible::No, + ghoul::io::ModelReader::NotifyInvisibleDropped::Yes ); _invertModelScale = p.invertModelScale.value_or(_invertModelScale); @@ -216,9 +200,8 @@ void RenderableModelProjection::initializeGL() { _projectionComponent.initializeGL(); - double bs = boundingSphere(); _geometry->initialize(); - setBoundingSphere(bs); // ignore bounding sphere set by geometry. + setBoundingSphere(_geometry->boundingRadius() * _modelScale); // Set Interaction sphere size to be 10% of the bounding sphere setInteractionSphere(_boundingSphere * 0.1); @@ -280,7 +263,8 @@ void RenderableModelProjection::render(const RenderData& data, RendererTasks&) { const glm::dmat4 transform = glm::translate(glm::dmat4(1.0), data.modelTransform.translation) * glm::dmat4(data.modelTransform.rotation) * - glm::scale(glm::dmat4(1.0), glm::dvec3(data.modelTransform.scale)); + glm::scale(glm::dmat4(1.0), glm::dvec3(data.modelTransform.scale)) * + glm::scale(glm::dmat4(1.0), glm::dvec3(_modelScale)); const glm::dmat4 modelViewTransform = data.camera.combinedViewMatrix() * transform; // malej 2023-FEB-23: The light sources should probably not be hard coded diff --git a/modules/spacecraftinstruments/rendering/renderablemodelprojection.h b/modules/spacecraftinstruments/rendering/renderablemodelprojection.h index 14627c14ea..c2b70bbc86 100644 --- a/modules/spacecraftinstruments/rendering/renderablemodelprojection.h +++ b/modules/spacecraftinstruments/rendering/renderablemodelprojection.h @@ -73,10 +73,9 @@ private: ProjectionComponent _projectionComponent; std::unique_ptr _programObject; - UniformCache(modelViewTransform, projectionTransform, meshTransform, - meshNormalTransform, has_texture_diffuse, baseTexture, baseColor, - projectionTexture, performShading, projectionFading, - directionToSunViewSpace) _mainUniformCache; + UniformCache(performShading, directionToSunViewSpace, modelViewTransform, + projectionTransform, projectionFading, baseTexture, + projectionTexture) _mainUniformCache; std::unique_ptr _fboProgramObject; UniformCache(projectionTexture, depthTexture, needShadowMap, ProjectorMatrix, @@ -87,8 +86,6 @@ private: std::unique_ptr _geometry; double _modelScale = 1.0; bool _invertModelScale = false; - bool _forceRenderInvisible = false; - bool _notifyInvisibleDropped = true; glm::dmat3 _instrumentMatrix = glm::dmat3(1.0);