From 0dbc331ebfaebac9b2f386113fda7af81e320412 Mon Sep 17 00:00:00 2001 From: Emma Broman Date: Fri, 17 Jan 2025 13:50:40 +0100 Subject: [PATCH] Docs and examples for `RenderableBoxGrid` (#3479) * Add boxgrid examples * Add description about the box grid renderable for the docs page * change phrasing in example assets slightly * Apply suggestions from code review Co-authored-by: Ylva Selling * Remove labels support for `RenderableBoxGrid` --------- Co-authored-by: Ylva Selling --- .../renderableboxgrid/boxgrid.asset | 31 +++++++++++ .../renderableboxgrid/boxgrid_size.asset | 32 +++++++++++ .../renderableboxgrid/boxgrid_styled.asset | 24 ++++++++ .../rendering/grids/renderableboxgrid.cpp | 55 ++----------------- .../base/rendering/grids/renderableboxgrid.h | 6 -- 5 files changed, 92 insertions(+), 56 deletions(-) create mode 100644 data/assets/examples/renderable/renderableboxgrid/boxgrid.asset create mode 100644 data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset create mode 100644 data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset diff --git a/data/assets/examples/renderable/renderableboxgrid/boxgrid.asset b/data/assets/examples/renderable/renderableboxgrid/boxgrid.asset new file mode 100644 index 0000000000..c73dcf4c32 --- /dev/null +++ b/data/assets/examples/renderable/renderableboxgrid/boxgrid.asset @@ -0,0 +1,31 @@ +-- Basic +-- This example adds a box grid, which is a 3D box rendered using grid lines, to the +-- scene. +-- +-- Per default, the box will be given a size of 1x1x1 meters, and here it is scaled up by a +-- factor of 100. It will hence have a size of 100x100x100 meters. + +local Node = { + Identifier = "RenderableBoxGrid_Example", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 100 + } + }, + Renderable = { + Type = "RenderableBoxGrid" + }, + GUI = { + Name = "RenderableBoxGrid - Basic", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset b/data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset new file mode 100644 index 0000000000..d89925141e --- /dev/null +++ b/data/assets/examples/renderable/renderableboxgrid/boxgrid_size.asset @@ -0,0 +1,32 @@ +-- With Non-uniform Size +-- This example creates a box grid with a non-uniform size. The size has been set so the +-- box is two times larger in the Y-direction. +-- +-- The `Size` values are given in meters, and here the box is scaled up by a factor of +-- 100. So, the box will have a size of 100 times the `Size` values. + +local Node = { + Identifier = "RenderableBoxGrid_Example_Size", + Transform = { + Scale = { + Type = "StaticScale", + Scale = 100 + } + }, + Renderable = { + Type = "RenderableBoxGrid", + Size = { 1.0, 2.0, 1.0 } + }, + GUI = { + Name = "RenderableBoxGrid - Non-uniform Size", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset b/data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset new file mode 100644 index 0000000000..e2911244b4 --- /dev/null +++ b/data/assets/examples/renderable/renderableboxgrid/boxgrid_styled.asset @@ -0,0 +1,24 @@ +-- Styled +-- This example creates a box grid where the grid lines are styled to have a specific +-- color and line width. + +local Node = { + Identifier = "RenderableBoxGrid_Example_Styled", + Renderable = { + Type = "RenderableBoxGrid", + LineWidth = 4.0, + Color = { 1.0, 1.0, 0.0 } + }, + GUI = { + Name = "RenderableBoxGrid - Styled", + Path = "/Examples" + } +} + +asset.onInitialize(function() + openspace.addSceneGraphNode(Node) +end) + +asset.onDeinitialize(function() + openspace.removeSceneGraphNode(Node) +end) diff --git a/modules/base/rendering/grids/renderableboxgrid.cpp b/modules/base/rendering/grids/renderableboxgrid.cpp index 782744429e..d98e44c82e 100644 --- a/modules/base/rendering/grids/renderableboxgrid.cpp +++ b/modules/base/rendering/grids/renderableboxgrid.cpp @@ -57,12 +57,10 @@ namespace { openspace::properties::Property::Visibility::AdvancedUser }; - const openspace::properties::PropertyOwner::PropertyOwnerInfo LabelsInfo = { - "Labels", - "Labels", - "The labels for the grid." - }; - + // A RenderableBoxGrid creates a 3D box that is rendered using grid lines. + // + // Per default the box is given a uniform size of 1x1x1 meters. It can then be scaled + // to the desired size. Alternatively, the size in each dimension can be specified. struct [[codegen::Dictionary(RenderableBoxGrid)]] Parameters { // [[codegen::verbatim(ColorInfo.description)]] std::optional color [[codegen::color()]]; @@ -72,10 +70,6 @@ namespace { // [[codegen::verbatim(SizeInfo.description)]] std::optional size; - - // [[codegen::verbatim(LabelsInfo.description)]] - std::optional labels - [[codegen::reference("labelscomponent")]]; }; #include "renderableboxgrid_codegen.cpp" } // namespace @@ -106,24 +100,10 @@ RenderableBoxGrid::RenderableBoxGrid(const ghoul::Dictionary& dictionary) _size = p.size.value_or(_size); _size.onChange([this]() { _gridIsDirty = true; }); addProperty(_size); - - if (p.labels.has_value()) { - _labels = std::make_unique(*p.labels); - _hasLabels = true; - addPropertySubOwner(_labels.get()); - // Fading of the labels should also depend on the fading of the renderable - _labels->setParentFadeable(this); - } } bool RenderableBoxGrid::isReady() const { - return _hasLabels ? _gridProgram && _labels->isReady() : _gridProgram != nullptr; -} - -void RenderableBoxGrid::initialize() { - if (_hasLabels) { - _labels->initialize(); - } + return _gridProgram != nullptr; } void RenderableBoxGrid::initializeGL() { @@ -195,31 +175,6 @@ void RenderableBoxGrid::render(const RenderData& data, RendererTasks&) { global::renderEngine->openglStateCache().resetBlendState(); global::renderEngine->openglStateCache().resetLineState(); global::renderEngine->openglStateCache().resetDepthState(); - - // Draw labels - if (_hasLabels && _labels->enabled()) { - const glm::vec3 lookup = data.camera.lookUpVectorWorldSpace(); - const glm::vec3 viewDirection = data.camera.viewDirectionWorldSpace(); - glm::vec3 right = glm::cross(viewDirection, lookup); - const glm::vec3 up = glm::cross(right, viewDirection); - - const glm::dmat4 worldToModelTransform = glm::inverse(modelTransform); - glm::vec3 orthoRight = glm::normalize( - glm::vec3(worldToModelTransform * glm::vec4(right, 0.0)) - ); - - if (orthoRight == glm::vec3(0.0)) { - const glm::vec3 otherVector = glm::vec3(lookup.y, lookup.x, lookup.z); - right = glm::cross(viewDirection, otherVector); - orthoRight = glm::normalize( - glm::vec3(worldToModelTransform * glm::vec4(right, 0.0)) - ); - } - const glm::vec3 orthoUp = glm::normalize( - glm::vec3(worldToModelTransform * glm::dvec4(up, 0.0)) - ); - _labels->render(data, modelViewProjectionTransform, orthoRight, orthoUp); - } } void RenderableBoxGrid::update(const UpdateData&) { diff --git a/modules/base/rendering/grids/renderableboxgrid.h b/modules/base/rendering/grids/renderableboxgrid.h index d0a1dc02af..ef3b0e161b 100644 --- a/modules/base/rendering/grids/renderableboxgrid.h +++ b/modules/base/rendering/grids/renderableboxgrid.h @@ -29,7 +29,6 @@ #include #include -#include #include namespace ghoul::opengl { @@ -44,7 +43,6 @@ class RenderableBoxGrid : public Renderable { public: RenderableBoxGrid(const ghoul::Dictionary& dictionary); - void initialize() override; void initializeGL() override; void deinitializeGL() override; @@ -73,10 +71,6 @@ protected: GLenum _mode = GL_LINE_STRIP; std::vector _varray; - - // Labels - bool _hasLabels = false; - std::unique_ptr _labels; }; }// namespace openspace