From 684a64158c4aa895ffc3a2bef9b74ea6113f690e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Sat, 30 Nov 2013 11:54:27 +0100 Subject: [PATCH] Fixed and refactored terrain preview --- src/interface/desktop/desktop.pro | 2 - .../desktop/terrain/mainterrainform.cpp | 4 +- .../desktop/terrain/previewterrainshape.cpp | 41 ---------- .../preview/TerrainShapePreviewRenderer.cpp} | 80 ++++++++++++++----- .../preview/TerrainShapePreviewRenderer.h} | 22 +++-- .../preview/WaterCoveragePreviewRenderer.cpp | 15 ++-- .../preview/WaterCoveragePreviewRenderer.h | 5 +- src/render/preview/preview.pro | 6 +- src/render/preview/preview_global.h | 1 + src/rendering/rendering.pro | 1 - src/rendering/shared/types.h | 7 -- src/rendering/terrain/public.h | 3 - src/rendering/water/public.h | 1 + 13 files changed, 97 insertions(+), 91 deletions(-) delete mode 100644 src/interface/desktop/terrain/previewterrainshape.cpp rename src/{rendering/terrain/ter_preview.cpp => render/preview/TerrainShapePreviewRenderer.cpp} (52%) rename src/{interface/desktop/terrain/previewterrainshape.h => render/preview/TerrainShapePreviewRenderer.h} (53%) diff --git a/src/interface/desktop/desktop.pro b/src/interface/desktop/desktop.pro index a076f2c..475c1d8 100644 --- a/src/interface/desktop/desktop.pro +++ b/src/interface/desktop/desktop.pro @@ -42,7 +42,6 @@ HEADERS += \ terrain/paintingbrush.h \ terrain/mainterrainform.h \ common/freeformhelper.h \ - terrain/previewterrainshape.h \ common/widgetsliderdecimal.h \ terrain/widgetterrainbasenoisepreview.h \ common/mainwindow.h \ @@ -91,7 +90,6 @@ SOURCES += \ terrain/paintingbrush.cpp \ terrain/mainterrainform.cpp \ common/freeformhelper.cpp \ - terrain/previewterrainshape.cpp \ common/widgetsliderdecimal.cpp \ terrain/widgetterrainbasenoisepreview.cpp \ common/mainwindow.cpp \ diff --git a/src/interface/desktop/terrain/mainterrainform.cpp b/src/interface/desktop/terrain/mainterrainform.cpp index 3d008a4..ca28009 100644 --- a/src/interface/desktop/terrain/mainterrainform.cpp +++ b/src/interface/desktop/terrain/mainterrainform.cpp @@ -4,7 +4,7 @@ #include #include "dialogbaseterrainnoise.h" #include "dialogterrainpainting.h" -#include "previewterrainshape.h" +#include "TerrainShapePreviewRenderer.h" #include "common/freeformhelper.h" #include "tools.h" #include "RenderingScenery.h" @@ -25,7 +25,7 @@ MainTerrainForm::MainTerrainForm(QWidget *parent) : _form_helper = new FreeFormHelper(this); - _renderer_shape = new PreviewTerrainShape(_terrain); + _renderer_shape = new TerrainShapePreviewRenderer(_terrain); _form_helper->addPreview(ui->preview_shape, _renderer_shape); _form_helper->addDoubleInputSlider(ui->input_scaling, &_terrain->scaling, 0.1, 3.0, 0.03, 0.3); diff --git a/src/interface/desktop/terrain/previewterrainshape.cpp b/src/interface/desktop/terrain/previewterrainshape.cpp deleted file mode 100644 index ea97939..0000000 --- a/src/interface/desktop/terrain/previewterrainshape.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "previewterrainshape.h" - -#include "SoftwareRenderer.h" -#include "BasePreview.h" -#include "water/public.h" - -PreviewTerrainShape::PreviewTerrainShape(TerrainDefinition* terrain) -{ - _terrain = terrain; - _highlight_enabled = true; - - terrainAlterPreviewRenderer(this); -} - -void PreviewTerrainShape::bindEvent(BasePreview* preview) -{ - preview->addOsd(QString("geolocation")); - //preview->addToggle("highlight", tr("Coverage highlight"), true); - - preview->configScaling(20.0, 1000.0, 20.0, 200.0); - preview->configScrolling(-1000.0, 1000.0, 0.0, -1000.0, 1000.0, 0.0); -} - -void PreviewTerrainShape::updateEvent() -{ - TerrainRendererClass.bind(this, _terrain); -} - -Color PreviewTerrainShape::getColor2D(double x, double y, double scaling) -{ - //return waterGetPreviewCoverage(this, x, y, scaling, _highlight_enabled ? 1 : 0); - return COLOR_BLACK; -} - -void PreviewTerrainShape::toggleChangeEvent(QString key, bool value) -{ - if (key == "highlight") - { - _highlight_enabled = value; - } -} diff --git a/src/rendering/terrain/ter_preview.cpp b/src/render/preview/TerrainShapePreviewRenderer.cpp similarity index 52% rename from src/rendering/terrain/ter_preview.cpp rename to src/render/preview/TerrainShapePreviewRenderer.cpp index 0fb03b9..1808345 100644 --- a/src/rendering/terrain/ter_preview.cpp +++ b/src/render/preview/TerrainShapePreviewRenderer.cpp @@ -1,17 +1,17 @@ -#include "public.h" +#include "TerrainShapePreviewRenderer.h" -#include "../tools/lighting.h" -#include "../renderer.h" -#include "NoiseGenerator.h" -#include "atmosphere/public.h" -#include "textures/public.h" -#include "TextureLayerDefinition.h" #include "TexturesDefinition.h" +#include "TextureLayerDefinition.h" #include "Zone.h" +#include "SurfaceMaterial.h" +#include "NoiseGenerator.h" +#include "BasePreview.h" -/* - * Terrain previews. - */ +// TEMP +#include "atmosphere/public.h" +#include "tools/lighting.h" +#include "textures/public.h" +#include "water/public.h" static void _getLightingStatus(Renderer*, LightStatus* status, Vector3, int) { @@ -48,7 +48,7 @@ static Vector3 _getCameraLocation(Renderer*, Vector3 location) return location; } -void terrainAlterPreviewRenderer(Renderer* renderer) +static void _alterPreviewRenderer(Renderer* renderer) { renderer->render_quality = 3; renderer->getCameraLocation = _getCameraLocation; @@ -67,13 +67,57 @@ void terrainAlterPreviewRenderer(Renderer* renderer) TexturesRendererClass.bind(renderer, &textures); } -Color terrainGetPreviewColor(Renderer* renderer, double x, double z, double detail) +TerrainShapePreviewRenderer::TerrainShapePreviewRenderer(TerrainDefinition* terrain) { - Vector3 point; + _terrain = terrain; + _highlight_enabled = true; - point.x = x; - point.y = renderer->terrain->getHeight(renderer, x, z, 1); - point.z = z; - - return renderer->terrain->getFinalColor(renderer, point, detail); + _alterPreviewRenderer(this); +} + +void TerrainShapePreviewRenderer::bindEvent(BasePreview* preview) +{ + preview->addOsd(QString("geolocation")); + //preview->addToggle("highlight", tr("Coverage highlight"), true); + + preview->configScaling(20.0, 1000.0, 20.0, 200.0); + preview->configScrolling(-1000.0, 1000.0, 0.0, -1000.0, 1000.0, 0.0); +} + +void TerrainShapePreviewRenderer::updateEvent() +{ + TerrainRendererClass.bind(this, _terrain); +} + +Color TerrainShapePreviewRenderer::getColor2D(double x, double y, double) +{ + double height; + + height = terrain->getHeight(this, x, y, 1); + if (height > terrain->getWaterHeight(this)) + { + return terrain->getFinalColor(this, Vector3(x, height, y), 0.000001); + } + else + { + Color base; + + base = water->getResult(this, x, y).final; + + if (_highlight_enabled) + { + Color mask = {0.5, 0.5, 1.0, 0.5}; + colorMask(&base, &mask); + } + + return base; + } +} + +void TerrainShapePreviewRenderer::toggleChangeEvent(QString key, bool value) +{ + if (key == "highlight") + { + _highlight_enabled = value; + } } diff --git a/src/interface/desktop/terrain/previewterrainshape.h b/src/render/preview/TerrainShapePreviewRenderer.h similarity index 53% rename from src/interface/desktop/terrain/previewterrainshape.h rename to src/render/preview/TerrainShapePreviewRenderer.h index c90dbd9..d807ebc 100644 --- a/src/interface/desktop/terrain/previewterrainshape.h +++ b/src/render/preview/TerrainShapePreviewRenderer.h @@ -1,15 +1,17 @@ -#ifndef PREVIEWTERRAINSHAPE_H -#define PREVIEWTERRAINSHAPE_H +#ifndef TERRAINSHAPEPREVIEWRENDERER_H +#define TERRAINSHAPEPREVIEWRENDERER_H -#include "desktop_global.h" +#include "preview_global.h" #include "Base2dPreviewRenderer.h" -#include "terrain/public.h" -class PreviewTerrainShape : public Base2dPreviewRenderer +namespace paysages { +namespace preview { + +class TerrainShapePreviewRenderer : public Base2dPreviewRenderer { public: - explicit PreviewTerrainShape(TerrainDefinition* terrain); + explicit TerrainShapePreviewRenderer(TerrainDefinition* terrain); protected: virtual void bindEvent(BasePreview* preview); @@ -17,10 +19,14 @@ protected: virtual Color getColor2D(double x, double y, double scaling) override; virtual void toggleChangeEvent(QString key, bool value); -private: TerrainDefinition* _terrain; + +private: bool _highlight_enabled; double _water_height; }; -#endif // PREVIEWTERRAINSHAPE_H +} +} + +#endif // TERRAINSHAPEPREVIEWRENDERER_H diff --git a/src/render/preview/WaterCoveragePreviewRenderer.cpp b/src/render/preview/WaterCoveragePreviewRenderer.cpp index 315d4c8..3aba928 100644 --- a/src/render/preview/WaterCoveragePreviewRenderer.cpp +++ b/src/render/preview/WaterCoveragePreviewRenderer.cpp @@ -2,6 +2,7 @@ #include "BasePreview.h" #include "Scenery.h" +#include "TerrainDefinition.h" // TEMP #include "RenderingScenery.h" @@ -9,11 +10,16 @@ #include "water/public.h" WaterCoveragePreviewRenderer::WaterCoveragePreviewRenderer(WaterDefinition* definition): - definition(definition) + TerrainShapePreviewRenderer(new TerrainDefinition(NULL)), definition(definition) { highlight = true; } +WaterCoveragePreviewRenderer::~WaterCoveragePreviewRenderer() +{ + delete TerrainShapePreviewRenderer::_terrain; +} + void WaterCoveragePreviewRenderer::bindEvent(BasePreview* preview) { preview->addOsd("geolocation"); @@ -27,11 +33,10 @@ void WaterCoveragePreviewRenderer::bindEvent(BasePreview* preview) void WaterCoveragePreviewRenderer::updateEvent() { - getScenery()->setTerrain(RenderingScenery::getCurrent()->getTerrain()); getScenery()->setWater(definition); - prepare(); - terrainAlterPreviewRenderer(this); + RenderingScenery::getCurrent()->getTerrain(_terrain); + TerrainShapePreviewRenderer::updateEvent(); } Color WaterCoveragePreviewRenderer::getColor2D(double x, double y, double scaling) @@ -41,7 +46,7 @@ Color WaterCoveragePreviewRenderer::getColor2D(double x, double y, double scalin height = terrain->getHeight(this, x, y, 1); if (height > terrain->getWaterHeight(this)) { - return terrainGetPreviewColor(this, x, y, scaling); + return TerrainShapePreviewRenderer::getColor2D(x, y, scaling); } else { diff --git a/src/render/preview/WaterCoveragePreviewRenderer.h b/src/render/preview/WaterCoveragePreviewRenderer.h index 3b8644b..c1ea993 100644 --- a/src/render/preview/WaterCoveragePreviewRenderer.h +++ b/src/render/preview/WaterCoveragePreviewRenderer.h @@ -3,15 +3,16 @@ #include "preview_global.h" -#include "Base2dPreviewRenderer.h" +#include "TerrainShapePreviewRenderer.h" namespace paysages { namespace preview { -class PREVIEWSHARED_EXPORT WaterCoveragePreviewRenderer : public Base2dPreviewRenderer +class PREVIEWSHARED_EXPORT WaterCoveragePreviewRenderer : public TerrainShapePreviewRenderer { public: WaterCoveragePreviewRenderer(WaterDefinition* definition); + virtual ~WaterCoveragePreviewRenderer(); virtual void bindEvent(BasePreview* preview) override; virtual void updateEvent() override; diff --git a/src/render/preview/preview.pro b/src/render/preview/preview.pro index 5da08fc..f2fc861 100644 --- a/src/render/preview/preview.pro +++ b/src/render/preview/preview.pro @@ -21,7 +21,8 @@ SOURCES += Base2dPreviewRenderer.cpp \ CloudsCoveragePreviewRenderer.cpp \ CloudsAspectPreviewRenderer.cpp \ WaterCoveragePreviewRenderer.cpp \ - WaterAspectPreviewRenderer.cpp + WaterAspectPreviewRenderer.cpp \ + TerrainShapePreviewRenderer.cpp HEADERS += Base2dPreviewRenderer.h\ preview_global.h \ @@ -33,7 +34,8 @@ HEADERS += Base2dPreviewRenderer.h\ CloudsCoveragePreviewRenderer.h \ CloudsAspectPreviewRenderer.h \ WaterCoveragePreviewRenderer.h \ - WaterAspectPreviewRenderer.h + WaterAspectPreviewRenderer.h \ + TerrainShapePreviewRenderer.h unix:!symbian { maemo5 { diff --git a/src/render/preview/preview_global.h b/src/render/preview/preview_global.h index a5068f1..4574bf6 100644 --- a/src/render/preview/preview_global.h +++ b/src/render/preview/preview_global.h @@ -22,6 +22,7 @@ namespace preview { class CloudsAspectPreviewRenderer; class WaterCoveragePreviewRenderer; class WaterAspectPreviewRenderer; + class TerrainShapePreviewRenderer; } } using namespace paysages::preview; diff --git a/src/rendering/rendering.pro b/src/rendering/rendering.pro index 7f314eb..bfa5c47 100644 --- a/src/rendering/rendering.pro +++ b/src/rendering/rendering.pro @@ -19,7 +19,6 @@ SOURCES += main.cpp \ clouds/clo_density.cpp \ terrain/ter_render.cpp \ terrain/ter_raster.cpp \ - terrain/ter_preview.cpp \ terrain/ter_painting.cpp \ textures/tex_tools.cpp \ textures/tex_rendering.cpp \ diff --git a/src/rendering/shared/types.h b/src/rendering/shared/types.h index a33dda8..0a0b6e5 100644 --- a/src/rendering/shared/types.h +++ b/src/rendering/shared/types.h @@ -14,13 +14,6 @@ typedef struct } RayCastingResult; typedef RayCastingResult (*FuncGeneralCastRay)(Renderer* renderer, Vector3 start, Vector3 direction); -typedef struct -{ - double min_height; - double max_height; - double base_height; -} HeightInfo; - typedef void* (*FuncObjectCreate)(); typedef void (*FuncObjectDelete)(void* object); typedef void (*FuncObjectBind)(void* base, void* sub); diff --git a/src/rendering/terrain/public.h b/src/rendering/terrain/public.h index 772726e..bfc2060 100644 --- a/src/rendering/terrain/public.h +++ b/src/rendering/terrain/public.h @@ -32,7 +32,4 @@ public: RENDERINGSHARED_EXPORT extern StandardRenderer TerrainRendererClass; -RENDERINGSHARED_EXPORT void terrainAlterPreviewRenderer(Renderer* renderer); -RENDERINGSHARED_EXPORT Color terrainGetPreviewColor(Renderer* renderer, double x, double z, double detail); - #endif diff --git a/src/rendering/water/public.h b/src/rendering/water/public.h index 36dcfdf..3aed28c 100644 --- a/src/rendering/water/public.h +++ b/src/rendering/water/public.h @@ -4,6 +4,7 @@ #include "../rendering_global.h" #include "../shared/types.h" #include "../tools/lighting.h" +#include "TerrainDefinition.h" typedef struct {