Fixed and refactored terrain preview

This commit is contained in:
Michaël Lemaire 2013-11-30 11:54:27 +01:00
parent 79080c756f
commit 684a64158c
13 changed files with 97 additions and 91 deletions

View file

@ -42,7 +42,6 @@ HEADERS += \
terrain/paintingbrush.h \ terrain/paintingbrush.h \
terrain/mainterrainform.h \ terrain/mainterrainform.h \
common/freeformhelper.h \ common/freeformhelper.h \
terrain/previewterrainshape.h \
common/widgetsliderdecimal.h \ common/widgetsliderdecimal.h \
terrain/widgetterrainbasenoisepreview.h \ terrain/widgetterrainbasenoisepreview.h \
common/mainwindow.h \ common/mainwindow.h \
@ -91,7 +90,6 @@ SOURCES += \
terrain/paintingbrush.cpp \ terrain/paintingbrush.cpp \
terrain/mainterrainform.cpp \ terrain/mainterrainform.cpp \
common/freeformhelper.cpp \ common/freeformhelper.cpp \
terrain/previewterrainshape.cpp \
common/widgetsliderdecimal.cpp \ common/widgetsliderdecimal.cpp \
terrain/widgetterrainbasenoisepreview.cpp \ terrain/widgetterrainbasenoisepreview.cpp \
common/mainwindow.cpp \ common/mainwindow.cpp \

View file

@ -4,7 +4,7 @@
#include <QMessageBox> #include <QMessageBox>
#include "dialogbaseterrainnoise.h" #include "dialogbaseterrainnoise.h"
#include "dialogterrainpainting.h" #include "dialogterrainpainting.h"
#include "previewterrainshape.h" #include "TerrainShapePreviewRenderer.h"
#include "common/freeformhelper.h" #include "common/freeformhelper.h"
#include "tools.h" #include "tools.h"
#include "RenderingScenery.h" #include "RenderingScenery.h"
@ -25,7 +25,7 @@ MainTerrainForm::MainTerrainForm(QWidget *parent) :
_form_helper = new FreeFormHelper(this); _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->addPreview(ui->preview_shape, _renderer_shape);
_form_helper->addDoubleInputSlider(ui->input_scaling, &_terrain->scaling, 0.1, 3.0, 0.03, 0.3); _form_helper->addDoubleInputSlider(ui->input_scaling, &_terrain->scaling, 0.1, 3.0, 0.03, 0.3);

View file

@ -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;
}
}

View file

@ -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 "TexturesDefinition.h"
#include "TextureLayerDefinition.h"
#include "Zone.h" #include "Zone.h"
#include "SurfaceMaterial.h"
#include "NoiseGenerator.h"
#include "BasePreview.h"
/* // TEMP
* Terrain previews. #include "atmosphere/public.h"
*/ #include "tools/lighting.h"
#include "textures/public.h"
#include "water/public.h"
static void _getLightingStatus(Renderer*, LightStatus* status, Vector3, int) static void _getLightingStatus(Renderer*, LightStatus* status, Vector3, int)
{ {
@ -48,7 +48,7 @@ static Vector3 _getCameraLocation(Renderer*, Vector3 location)
return location; return location;
} }
void terrainAlterPreviewRenderer(Renderer* renderer) static void _alterPreviewRenderer(Renderer* renderer)
{ {
renderer->render_quality = 3; renderer->render_quality = 3;
renderer->getCameraLocation = _getCameraLocation; renderer->getCameraLocation = _getCameraLocation;
@ -67,13 +67,57 @@ void terrainAlterPreviewRenderer(Renderer* renderer)
TexturesRendererClass.bind(renderer, &textures); 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; _alterPreviewRenderer(this);
point.y = renderer->terrain->getHeight(renderer, x, z, 1); }
point.z = z;
void TerrainShapePreviewRenderer::bindEvent(BasePreview* preview)
return renderer->terrain->getFinalColor(renderer, point, detail); {
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;
}
} }

View file

@ -1,15 +1,17 @@
#ifndef PREVIEWTERRAINSHAPE_H #ifndef TERRAINSHAPEPREVIEWRENDERER_H
#define PREVIEWTERRAINSHAPE_H #define TERRAINSHAPEPREVIEWRENDERER_H
#include "desktop_global.h" #include "preview_global.h"
#include "Base2dPreviewRenderer.h" #include "Base2dPreviewRenderer.h"
#include "terrain/public.h"
class PreviewTerrainShape : public Base2dPreviewRenderer namespace paysages {
namespace preview {
class TerrainShapePreviewRenderer : public Base2dPreviewRenderer
{ {
public: public:
explicit PreviewTerrainShape(TerrainDefinition* terrain); explicit TerrainShapePreviewRenderer(TerrainDefinition* terrain);
protected: protected:
virtual void bindEvent(BasePreview* preview); virtual void bindEvent(BasePreview* preview);
@ -17,10 +19,14 @@ protected:
virtual Color getColor2D(double x, double y, double scaling) override; virtual Color getColor2D(double x, double y, double scaling) override;
virtual void toggleChangeEvent(QString key, bool value); virtual void toggleChangeEvent(QString key, bool value);
private:
TerrainDefinition* _terrain; TerrainDefinition* _terrain;
private:
bool _highlight_enabled; bool _highlight_enabled;
double _water_height; double _water_height;
}; };
#endif // PREVIEWTERRAINSHAPE_H }
}
#endif // TERRAINSHAPEPREVIEWRENDERER_H

View file

@ -2,6 +2,7 @@
#include "BasePreview.h" #include "BasePreview.h"
#include "Scenery.h" #include "Scenery.h"
#include "TerrainDefinition.h"
// TEMP // TEMP
#include "RenderingScenery.h" #include "RenderingScenery.h"
@ -9,11 +10,16 @@
#include "water/public.h" #include "water/public.h"
WaterCoveragePreviewRenderer::WaterCoveragePreviewRenderer(WaterDefinition* definition): WaterCoveragePreviewRenderer::WaterCoveragePreviewRenderer(WaterDefinition* definition):
definition(definition) TerrainShapePreviewRenderer(new TerrainDefinition(NULL)), definition(definition)
{ {
highlight = true; highlight = true;
} }
WaterCoveragePreviewRenderer::~WaterCoveragePreviewRenderer()
{
delete TerrainShapePreviewRenderer::_terrain;
}
void WaterCoveragePreviewRenderer::bindEvent(BasePreview* preview) void WaterCoveragePreviewRenderer::bindEvent(BasePreview* preview)
{ {
preview->addOsd("geolocation"); preview->addOsd("geolocation");
@ -27,11 +33,10 @@ void WaterCoveragePreviewRenderer::bindEvent(BasePreview* preview)
void WaterCoveragePreviewRenderer::updateEvent() void WaterCoveragePreviewRenderer::updateEvent()
{ {
getScenery()->setTerrain(RenderingScenery::getCurrent()->getTerrain());
getScenery()->setWater(definition); getScenery()->setWater(definition);
prepare();
terrainAlterPreviewRenderer(this); RenderingScenery::getCurrent()->getTerrain(_terrain);
TerrainShapePreviewRenderer::updateEvent();
} }
Color WaterCoveragePreviewRenderer::getColor2D(double x, double y, double scaling) 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); height = terrain->getHeight(this, x, y, 1);
if (height > terrain->getWaterHeight(this)) if (height > terrain->getWaterHeight(this))
{ {
return terrainGetPreviewColor(this, x, y, scaling); return TerrainShapePreviewRenderer::getColor2D(x, y, scaling);
} }
else else
{ {

View file

@ -3,15 +3,16 @@
#include "preview_global.h" #include "preview_global.h"
#include "Base2dPreviewRenderer.h" #include "TerrainShapePreviewRenderer.h"
namespace paysages { namespace paysages {
namespace preview { namespace preview {
class PREVIEWSHARED_EXPORT WaterCoveragePreviewRenderer : public Base2dPreviewRenderer class PREVIEWSHARED_EXPORT WaterCoveragePreviewRenderer : public TerrainShapePreviewRenderer
{ {
public: public:
WaterCoveragePreviewRenderer(WaterDefinition* definition); WaterCoveragePreviewRenderer(WaterDefinition* definition);
virtual ~WaterCoveragePreviewRenderer();
virtual void bindEvent(BasePreview* preview) override; virtual void bindEvent(BasePreview* preview) override;
virtual void updateEvent() override; virtual void updateEvent() override;

View file

@ -21,7 +21,8 @@ SOURCES += Base2dPreviewRenderer.cpp \
CloudsCoveragePreviewRenderer.cpp \ CloudsCoveragePreviewRenderer.cpp \
CloudsAspectPreviewRenderer.cpp \ CloudsAspectPreviewRenderer.cpp \
WaterCoveragePreviewRenderer.cpp \ WaterCoveragePreviewRenderer.cpp \
WaterAspectPreviewRenderer.cpp WaterAspectPreviewRenderer.cpp \
TerrainShapePreviewRenderer.cpp
HEADERS += Base2dPreviewRenderer.h\ HEADERS += Base2dPreviewRenderer.h\
preview_global.h \ preview_global.h \
@ -33,7 +34,8 @@ HEADERS += Base2dPreviewRenderer.h\
CloudsCoveragePreviewRenderer.h \ CloudsCoveragePreviewRenderer.h \
CloudsAspectPreviewRenderer.h \ CloudsAspectPreviewRenderer.h \
WaterCoveragePreviewRenderer.h \ WaterCoveragePreviewRenderer.h \
WaterAspectPreviewRenderer.h WaterAspectPreviewRenderer.h \
TerrainShapePreviewRenderer.h
unix:!symbian { unix:!symbian {
maemo5 { maemo5 {

View file

@ -22,6 +22,7 @@ namespace preview {
class CloudsAspectPreviewRenderer; class CloudsAspectPreviewRenderer;
class WaterCoveragePreviewRenderer; class WaterCoveragePreviewRenderer;
class WaterAspectPreviewRenderer; class WaterAspectPreviewRenderer;
class TerrainShapePreviewRenderer;
} }
} }
using namespace paysages::preview; using namespace paysages::preview;

View file

@ -19,7 +19,6 @@ SOURCES += main.cpp \
clouds/clo_density.cpp \ clouds/clo_density.cpp \
terrain/ter_render.cpp \ terrain/ter_render.cpp \
terrain/ter_raster.cpp \ terrain/ter_raster.cpp \
terrain/ter_preview.cpp \
terrain/ter_painting.cpp \ terrain/ter_painting.cpp \
textures/tex_tools.cpp \ textures/tex_tools.cpp \
textures/tex_rendering.cpp \ textures/tex_rendering.cpp \

View file

@ -14,13 +14,6 @@ typedef struct
} RayCastingResult; } RayCastingResult;
typedef RayCastingResult (*FuncGeneralCastRay)(Renderer* renderer, Vector3 start, Vector3 direction); 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* (*FuncObjectCreate)();
typedef void (*FuncObjectDelete)(void* object); typedef void (*FuncObjectDelete)(void* object);
typedef void (*FuncObjectBind)(void* base, void* sub); typedef void (*FuncObjectBind)(void* base, void* sub);

View file

@ -32,7 +32,4 @@ public:
RENDERINGSHARED_EXPORT extern StandardRenderer TerrainRendererClass; RENDERINGSHARED_EXPORT extern StandardRenderer TerrainRendererClass;
RENDERINGSHARED_EXPORT void terrainAlterPreviewRenderer(Renderer* renderer);
RENDERINGSHARED_EXPORT Color terrainGetPreviewColor(Renderer* renderer, double x, double z, double detail);
#endif #endif

View file

@ -4,6 +4,7 @@
#include "../rendering_global.h" #include "../rendering_global.h"
#include "../shared/types.h" #include "../shared/types.h"
#include "../tools/lighting.h" #include "../tools/lighting.h"
#include "TerrainDefinition.h"
typedef struct typedef struct
{ {