paysages : Preview are now paused when not in active window.

paysages : Started material editor dialog (WIP).

git-svn-id: https://subversion.assembla.com/svn/thunderk/paysages@331 b1fd45b6-86a6-48da-8261-f70d1f35bdcc
This commit is contained in:
Michaël Lemaire 2012-06-02 09:46:24 +00:00 committed by ThunderK
parent a338872c82
commit 4daf92f3dd
20 changed files with 492 additions and 95 deletions

3
TODO
View file

@ -9,7 +9,7 @@ Technology Preview 2 :
- Add logarithmic sliders for some float values.
- Save GUI config (views, render params).
- Add an OSD ability on previews and use it for camera location and user landmarks.
- Add a material editor dialog.
- WIP : Add a material editor dialog.
- Add a zone editor dialog for localized textures.
- Add a terrain modifier dialog with zones.
- Use the curve editor in noise editor
@ -29,7 +29,6 @@ Technology Preview 2 :
=> Add toggles (for water...)
=> Max texture size should depend on GPU memory available
- Water and terrain LOD moves with the camera, fix it like in the wanderer.
- Pause previews drawing of main window when a dialog is opened.
- Interrupt preview chunk renderings that will be discarded at commit, or that are no more visible.
- Fix "RGB parameters out of range" (and segfault) on preview while moving render params fast in render tab.
=> May need to change the updateData system.

View file

@ -7,6 +7,7 @@
#include "inputcolorgradation.h"
#include "inputnoise.h"
#include "inputcurve.h"
#include "inputmaterial.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
@ -92,11 +93,16 @@ BaseForm::BaseForm(QWidget* parent, bool auto_apply, bool with_layers) : QWidget
if (auto_apply)
{
button_apply->hide();
button_revert->hide();
hideButtons();
}
}
void BaseForm::hideButtons()
{
button_apply->hide();
button_revert->hide();
}
void BaseForm::configChangeEvent()
{
if (auto_apply)
@ -242,6 +248,11 @@ void BaseForm::addInputCurve(QString label, Curve* value, double xmin, double xm
addInput(new InputCurve(form, label, value, xmin, xmax, ymin, ymax));
}
void BaseForm::addInputMaterial(QString label, SurfaceMaterial* material)
{
addInput(new InputMaterial(form, label, material));
}
int BaseForm::currentLayer()
{
if (with_layers)

View file

@ -17,6 +17,7 @@ class BaseForm:public QWidget
public:
BaseForm(QWidget* parent, bool auto_apply=false, bool with_layers=false);
void hideButtons();
signals:
void configApplied();
@ -44,7 +45,8 @@ protected:
void addInputColorGradation(QString label, ColorGradation* value);
void addInputNoise(QString label, NoiseGenerator* value);
void addInputCurve(QString label, Curve* value, double xmin, double xmax, double ymin, double ymax);
void addInputMaterial(QString label, SurfaceMaterial* material);
int currentLayer();
void setLayerCount(int layer_count);

View file

@ -5,6 +5,7 @@
#include <QPainter>
#include <QTimer>
#include <QWheelEvent>
#include "tools.h"
/*************** PreviewChunk ***************/
class PreviewChunk
@ -45,12 +46,16 @@ public:
if (_need_render)
{
_need_render = false;
if (!_preview->isVisible())
{
return false;
}
if (!_preview->window()->isActiveWindow())
{
return false;
}
_need_render = false;
QImage pixbuf = _preview->startChunkTransaction(_xstart, _ystart, _xsize, _ysize, &revision);
@ -198,6 +203,22 @@ void PreviewDrawingManager::updateChunks(BasePreview* preview)
}
}
void PreviewDrawingManager::updateAllChunks()
{
for (int i = 0; i < _chunks.size(); i++)
{
PreviewChunk* chunk;
chunk = _chunks.at(i);
chunk->update();
_lock.lock();
if (!_updateQueue.contains(chunk))
{
_updateQueue.prepend(chunk);
}
_lock.unlock();
}
}
void PreviewDrawingManager::performOneThreadJob()
{
PreviewChunk* chunk;
@ -274,6 +295,12 @@ void BasePreview::stopDrawers()
_drawing_manager->stopThreads();
}
void BasePreview::reviveAll()
{
logDebug("Reviving all previews");
_drawing_manager->updateAllChunks();
}
void BasePreview::updateData()
{
}

View file

@ -17,6 +17,7 @@ public:
static void initDrawers();
static void stopDrawers();
static void reviveAll();
void redraw();
@ -114,6 +115,7 @@ public:
void addChunk(PreviewChunk* chunk);
void removeChunks(BasePreview* preview);
void updateChunks(BasePreview* preview);
void updateAllChunks();
void performOneThreadJob();
private:

66
gui_qt/dialogmaterial.cpp Normal file
View file

@ -0,0 +1,66 @@
#include "dialogmaterial.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <QWidget>
/**************** Dialog form ****************/
DialogMaterial::DialogMaterial(QWidget *parent, SurfaceMaterial* material) : QDialog(parent)
{
QPushButton* button;
QWidget* buttons;
setLayout(new QVBoxLayout());
_form = new FormMaterial(this, material);
_form->hideButtons();
layout()->addWidget(_form);
buttons = new QWidget(this);
buttons->setLayout(new QHBoxLayout());
layout()->addWidget(buttons);
layout()->setAlignment(buttons, Qt::AlignBottom);
button = new QPushButton(tr("Validate"), buttons);
buttons->layout()->addWidget(button);
QObject::connect(button, SIGNAL(clicked()), this, SLOT(accept()));
button = new QPushButton(tr("Reset"), buttons);
buttons->layout()->addWidget(button);
QObject::connect(button, SIGNAL(clicked()), this, SLOT(revert()));
button = new QPushButton(tr("Cancel"), buttons);
buttons->layout()->addWidget(button);
QObject::connect(button, SIGNAL(clicked()), this, SLOT(reject()));
setWindowTitle(tr("Paysages 3D - Material editor"));
}
bool DialogMaterial::getMaterial(QWidget* parent, SurfaceMaterial* material)
{
int result;
DialogMaterial* dialog = new DialogMaterial(parent, material);
result = dialog->exec();
if (result)
{
dialog->_form->getMaterial(material);
}
delete dialog;
return (result != 0) ? true : false;
}
void DialogMaterial::accept()
{
_form->applyConfig();
QDialog::accept();
}
void DialogMaterial::revert()
{
_form->revertConfig();
}

26
gui_qt/dialogmaterial.h Normal file
View file

@ -0,0 +1,26 @@
#ifndef _PAYSAGES_QT_DIALOGMATERIAL_H_
#define _PAYSAGES_QT_DIALOGMATERIAL_H_
#include <QDialog>
#include <QListWidget>
#include "basepreview.h"
#include "formmaterial.h"
#include "../lib_paysages/shared/types.h"
class DialogMaterial : public QDialog
{
Q_OBJECT
public:
explicit DialogMaterial(QWidget* parent, SurfaceMaterial* material);
static bool getMaterial(QWidget* parent, SurfaceMaterial* material);
public slots:
virtual void accept();
void revert();
private:
FormMaterial* _form;
};
#endif

View file

@ -148,15 +148,13 @@ FormClouds::FormClouds(QWidget *parent):
addPreview(new PreviewCloudsCoverage(parent), tr("Layer coverage (no lighting)"));
addPreview(new PreviewCloudsColor(parent), tr("Color and lighting"));
addInputDouble(tr("Lower altitude"), &_layer.ymin, -10.0, 250.0, 0.5, 5.0);
addInputDouble(tr("Upper altitude"), &_layer.ymax, -10.0, 250.0, 0.5, 5.0);
addInputCurve(tr("Density / Altitude"), _layer.density_altitude, 0.0, 1.0, 0.0, 1.0);
addInputDouble(tr("Lower altitude"), &_layer.ymin, -10.0, 50.0, 0.5, 5.0);
addInputDouble(tr("Upper altitude"), &_layer.ymax, -10.0, 50.0, 0.5, 5.0);
addInputCurve(tr("Density by altitude"), _layer.density_altitude, 0.0, 1.0, 0.0, 1.0);
addInputNoise(tr("Noise"), _layer.noise);
addInputDouble(tr("Coverage"), &_layer.coverage, 0.0, 1.0, 0.01, 0.1);
addInputDouble(tr("Scaling"), &_layer.scaling, 1.0, 100.0, 0.5, 5.0);
addInputColor(tr("Base color"), &_layer.material.base);
addInputDouble(tr("Light reflection"), &_layer.material.reflection, 0.0, 1.0, 0.01, 0.1);
addInputDouble(tr("Light reflection shininess"), &_layer.material.shininess, 0.0, 20.0, 0.1, 1.0);
addInputMaterial(tr("Material"), &_layer.material);
addInputDouble(tr("Hardness to light"), &_layer.hardness, 0.0, 1.0, 0.01, 0.1);
addInputDouble(tr("Transparency depth"), &_layer.transparencydepth, 0.0, 100.0, 0.5, 5.0);
addInputDouble(tr("Light traversal depth"), &_layer.lighttraversal, 0.0, 100.0, 0.5, 5.0);

52
gui_qt/formmaterial.cpp Normal file
View file

@ -0,0 +1,52 @@
#include "formmaterial.h"
#include "../lib_paysages/lighting.h"
/**************** Previews ****************/
class PreviewMaterialColor:public BasePreview
{
public:
PreviewMaterialColor(QWidget* parent, SurfaceMaterial* material) : BasePreview(parent)
{
configScaling(0.05, 2.0, 0.05, 2.0);
}
protected:
/*void updateData()
{
noiseCopy(_noise_original, _noise_preview);
}*/
QColor getColor(double x, double y)
{
return QColor(0, 0, 0);
}
private:
SurfaceMaterial* _material;
};
/**************** Form ****************/
FormMaterial::FormMaterial(QWidget* parent, SurfaceMaterial* material) : BaseForm(parent)
{
_initial = material;
_material = *_initial;
addInputColor(tr("Base color"), &_material.base);
addInputDouble(tr("Light reflection"), &_material.reflection, 0.0, 1.0, 0.01, 0.1);
addInputDouble(tr("Light reflection shininess"), &_material.shininess, 0.0, 20.0, 0.1, 1.0);
_preview_color = new PreviewMaterialColor(this, &_material);
addPreview(_preview_color, tr("Lighting preview"));
revertConfig();
}
void FormMaterial::getMaterial(SurfaceMaterial* material)
{
*material = _material;
}
void FormMaterial::revertConfig()
{
_material = *_initial;
BaseForm::revertConfig();
}

27
gui_qt/formmaterial.h Normal file
View file

@ -0,0 +1,27 @@
#ifndef _PAYSAGES_QT_FORMMATERIAL_H_
#define _PAYSAGES_QT_FORMMATERIAL_H_
#include "basepreview.h"
#include "baseform.h"
#include "../lib_paysages/shared/types.h"
class FormMaterial : public BaseForm
{
Q_OBJECT
public:
FormMaterial(QWidget* parent, SurfaceMaterial* material);
void getMaterial(SurfaceMaterial* material);
public slots:
virtual void revertConfig();
// virtual void applyConfig();
private:
BasePreview* _preview_color;
SurfaceMaterial* _initial;
SurfaceMaterial _material;
};
#endif

View file

@ -141,9 +141,7 @@ FormTextures::FormTextures(QWidget *parent):
addInputNoise(tr("Surface noise"), _layer.bump_noise);
addInputDouble(tr("Surface noise height"), &_layer.bump_height, 0.0, 0.5, 0.001, 0.05);
addInputDouble(tr("Surface noise scaling"), &_layer.bump_scaling, 0.01, 1.0, 0.01, 0.1);
addInputColor(tr("Base color"), &_layer.material.base);
addInputDouble(tr("Light reflection"), &_layer.material.reflection, 0.0, 1.0, 0.01, 0.1);
addInputDouble(tr("Light reflection shininess"), &_layer.material.shininess, 0.0, 20.0, 0.1, 1.0);
addInputMaterial(tr("Material"), &_layer.material);
addInputDouble(tr("Hard minimal height"), &_supp.height_hard_min, -20.0, 20.0, 0.1, 1.0);
addInputDouble(tr("Soft minimal height"), &_supp.height_soft_min, -20.0, 20.0, 0.1, 1.0);

View file

@ -178,13 +178,11 @@ FormWater::FormWater(QWidget *parent):
addPreview(previewColor, QString(tr("Rendered preview (without/with lighting)")));
addInputDouble(tr("Height"), &_definition.height, -10.0, 10.0, 0.1, 1.0);
addInputColor(tr("Surface color"), &_definition.material.base);
addInputDouble(tr("Light reflection"), &_definition.material.reflection, 0.0, 1.0, 0.01, 0.1);
addInputDouble(tr("Shininess to light"), &_definition.material.shininess, 0.0, 20.0, 0.1, 1.0);
addInputMaterial(tr("Surface material"), &_definition.material);
addInputColor(tr("Depth color"), &_definition.depth_color);
addInputDouble(tr("Transparency"), &_definition.transparency, 0.0, 1.0, 0.001, 0.1);
addInputDouble(tr("Reflection"), &_definition.reflection, 0.0, 1.0, 0.001, 0.1);
addInputDouble(tr("Transparency distance"), &_definition.transparency_depth, 0.0, 20.0, 0.1, 1.0);
addInputColor(tr("Depth color"), &_definition.depth_color);
addInputDouble(tr("Light-through distance"), &_definition.lighting_depth, 0.0, 20.0, 0.1, 1.0);
addInputNoise(tr("Waves noise"), _definition.waves_noise);
addInputDouble(tr("Waves height"), &_definition.waves_noise_height, 0.0, 0.1, 0.001, 0.01);

79
gui_qt/inputmaterial.cpp Normal file
View file

@ -0,0 +1,79 @@
#include "inputmaterial.h"
#include <QLabel>
#include <QPushButton>
#include <QPainter>
#include <QColorDialog>
#include "dialogmaterial.h"
class MaterialSmallPreview:public QWidget
{
public:
MaterialSmallPreview(QWidget* parent, SurfaceMaterial* value) : QWidget(parent)
{
_value = value;
}
void paintEvent(QPaintEvent* event)
{
if (!_value)
{
return;
}
/*QPainter painter(this);
int width = this->width();
int height = this->height();
double value, factor;
for (int x = 0; x < width; x++)
{
factor = ((double)(height / 2)) / noiseGetMaxValue(noise);
value = noiseGet1DTotal(noise, ((double)x) / factor) * factor;
painter.setPen(QColor(255, 255, 255));
painter.drawLine(x, 0, x, height / 2 + value);
painter.setPen(QColor(0, 0, 0));
painter.drawLine(x, height / 2 + value + 1, x, height);
}*/
}
SurfaceMaterial* _value;
};
InputMaterial::InputMaterial(QWidget* form, QString label, SurfaceMaterial* value) : BaseInput(form, label)
{
_value = value;
_preview = new MaterialSmallPreview(form, value);
_preview->setMinimumSize(100, 40);
_control = new QPushButton(tr("Edit"), form);
_control->setMaximumWidth(150);
connect((QPushButton*)_control, SIGNAL(clicked()), this, SLOT(editMaterial()));
}
void InputMaterial::updatePreview()
{
_preview->update();
BaseInput::updatePreview();
}
void InputMaterial::applyValue()
{
BaseInput::applyValue();
}
void InputMaterial::revert()
{
BaseInput::revert();
}
void InputMaterial::editMaterial()
{
if (DialogMaterial::getMaterial(_control, _value))
{
applyValue();
}
}

28
gui_qt/inputmaterial.h Normal file
View file

@ -0,0 +1,28 @@
#ifndef _PAYSAGES_QT_INPUTMATERIAL_H_
#define _PAYSAGES_QT_INPUTMATERIAL_H_
#include <QWidget>
#include "baseinput.h"
#include "../lib_paysages/shared/types.h"
class InputMaterial:public BaseInput
{
Q_OBJECT
public:
InputMaterial(QWidget* form, QString label, SurfaceMaterial* value);
public slots:
virtual void updatePreview();
virtual void applyValue();
virtual void revert();
private slots:
void editMaterial();
private:
SurfaceMaterial* _value;
};
#endif

View file

@ -25,4 +25,4 @@ private:
NoiseGenerator* _value;
};
#endif // _PAYSAGES_QT_INPUTNOISE_H_
#endif

View file

@ -124,13 +124,23 @@ QMainWindow(parent)
toolbar->addAction(QIcon("images/explore.png"), tr("&Explore (F2)"), this, SLOT(explore3D()))->setShortcut(QKeySequence(tr("F2")));
toolbar->addAction(QIcon("images/render.png"), tr("&Quick\nrender (F5)"), this, SLOT(quickPreview()))->setShortcut(QKeySequence(tr("F5")));
toolbar->addAction(QIcon("images/about.png"), tr("&About"), this, SLOT(showAboutDialog()));
setCentralWidget(tabs);
setWindowTitle("Paysages 3D");
setWindowIcon(QIcon("images/logo_32.png"));
}
bool MainWindow::event(QEvent* event)
{
if (event->type() == QEvent::WindowActivate)
{
BasePreview::reviveAll();
}
return QMainWindow::event(event);
}
void MainWindow::refreshAll()
{
QList<BaseForm*> list_forms = this->findChildren<BaseForm*>("_base_form_");

View file

@ -10,6 +10,7 @@ class MainWindow : public QMainWindow
public:
explicit MainWindow(QWidget *parent = 0);
virtual bool event(QEvent* event);
public slots:
void refreshAll();

View file

@ -6,8 +6,11 @@ INCLUDEPATH += .
OBJECTS_DIR = ./obj/$$BUILDMODE/
MOC_DIR = ./moc/$$BUILDMODE/
DESTDIR = ../build/$$BUILDMODE/
CONFIG -= release
CONFIG += $$BUILDMODE
release:DEFINES += NDEBUG
LIBS += -lGLU
unix:LIBS += -L$$DESTDIR -lpaysages
win32:LIBS += ../libpaysages.a -lDevIL -lILU -lILUT -lglib-2.0 -lgthread-2.0

View file

@ -12,4 +12,14 @@ static inline QColor colorToQColor(Color color)
return QColor(color.r * 255.0, color.g * 255.0, color.b * 255.0, color.a * 255.0);
}
#ifndef NDEBUG
#include <QDebug>
static inline void logDebug(QString string)
{
qDebug() << string;
}
#else
#define logDebug(_x_) ;
#endif
#endif

View file

@ -4,32 +4,32 @@
<context>
<name>BaseForm</name>
<message>
<location filename="../gui_qt/baseform.cpp" line="38"/>
<location filename="../gui_qt/baseform.cpp" line="39"/>
<source>Layers : </source>
<translation>Niveaux :</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="46"/>
<location filename="../gui_qt/baseform.cpp" line="47"/>
<source>Add layer</source>
<translation>Ajouter un niveau</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="50"/>
<location filename="../gui_qt/baseform.cpp" line="51"/>
<source>Delete layer</source>
<translation>Supprimer un niveau</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="86"/>
<location filename="../gui_qt/baseform.cpp" line="87"/>
<source>Apply</source>
<translation>Appliquer</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="89"/>
<location filename="../gui_qt/baseform.cpp" line="90"/>
<source>Revert</source>
<translation>Annuler les modifications</translation>
</message>
<message>
<location filename="../gui_qt/baseform.cpp" line="268"/>
<location filename="../gui_qt/baseform.cpp" line="279"/>
<source>Layer %1</source>
<translation>Niveau %1</translation>
</message>
@ -121,6 +121,29 @@ Right click on a point to delete it.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogMaterial</name>
<message>
<location filename="../gui_qt/dialogmaterial.cpp" line="25"/>
<source>Validate</source>
<translation type="unfinished">Valider</translation>
</message>
<message>
<location filename="../gui_qt/dialogmaterial.cpp" line="29"/>
<source>Reset</source>
<translation type="unfinished">Recommencer</translation>
</message>
<message>
<location filename="../gui_qt/dialogmaterial.cpp" line="33"/>
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
</message>
<message>
<location filename="../gui_qt/dialogmaterial.cpp" line="37"/>
<source>Paysages 3D - Material editor</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DialogNoise</name>
<message>
@ -317,7 +340,7 @@ Maintenir Ctrl : Plus rapide</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="153"/>
<source>Density / Altitude</source>
<source>Density by altitude</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -337,36 +360,38 @@ Maintenir Ctrl : Plus rapide</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="157"/>
<source>Material</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Base color</source>
<translation>Couleur de base</translation>
<translation type="obsolete">Couleur de base</translation>
</message>
<message>
<source>Light reflection</source>
<translation type="obsolete">Facteur de réflexion de la lumière</translation>
</message>
<message>
<source>Light reflection shininess</source>
<translation type="obsolete">Concentration de la réflexion de lumière</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="158"/>
<source>Light reflection</source>
<translation>Facteur de réflexion de la lumière</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="159"/>
<source>Light reflection shininess</source>
<translation>Concentration de la réflexion de lumière</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="160"/>
<source>Hardness to light</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="161"/>
<location filename="../gui_qt/formclouds.cpp" line="159"/>
<source>Transparency depth</source>
<translation>Distance de transparence</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="162"/>
<location filename="../gui_qt/formclouds.cpp" line="160"/>
<source>Light traversal depth</source>
<translation>Distance de traversée de la lumière</translation>
</message>
<message>
<location filename="../gui_qt/formclouds.cpp" line="163"/>
<location filename="../gui_qt/formclouds.cpp" line="161"/>
<source>Minimum lighting</source>
<translation>Eclairage minimal</translation>
</message>
@ -398,6 +423,29 @@ Maintenir Ctrl : Plus rapide</translation>
<translation type="obsolete">Annuler</translation>
</message>
</context>
<context>
<name>FormMaterial</name>
<message>
<location filename="../gui_qt/formmaterial.cpp" line="32"/>
<source>Base color</source>
<translation type="unfinished">Couleur de base</translation>
</message>
<message>
<location filename="../gui_qt/formmaterial.cpp" line="33"/>
<source>Light reflection</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formmaterial.cpp" line="34"/>
<source>Light reflection shininess</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formmaterial.cpp" line="37"/>
<source>Lighting preview</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FormRender</name>
<message>
@ -581,57 +629,59 @@ Maintenir Ctrl : Plus rapide</translation>
<translation>Echelle du bruit</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="144"/>
<source>Base color</source>
<translation>Couleur de base</translation>
<translation type="obsolete">Couleur de base</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="145"/>
<source>Light reflection</source>
<translation>Réflexion de lumière</translation>
<translation type="obsolete">Réflexion de lumière</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="146"/>
<source>Light reflection shininess</source>
<translation>Concentration de la lumière réfléchie</translation>
<translation type="obsolete">Concentration de la lumière réfléchie</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="149"/>
<location filename="../gui_qt/formtextures.cpp" line="147"/>
<source>Soft minimal height</source>
<translation>Altitude minimal (adoucie)</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="148"/>
<location filename="../gui_qt/formtextures.cpp" line="146"/>
<source>Hard minimal height</source>
<translation>Altitude minimale</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="151"/>
<location filename="../gui_qt/formtextures.cpp" line="144"/>
<source>Material</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="149"/>
<source>Hard maximal height</source>
<translation>Altitude maximale</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="150"/>
<location filename="../gui_qt/formtextures.cpp" line="148"/>
<source>Soft maximal height</source>
<translation>Altitude maximale (adoucie)</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="153"/>
<location filename="../gui_qt/formtextures.cpp" line="151"/>
<source>Soft minimal slope</source>
<translation>Pente minimale (adoucie)</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="152"/>
<location filename="../gui_qt/formtextures.cpp" line="150"/>
<source>Hard minimal slope</source>
<translation>Pente minimale</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="155"/>
<location filename="../gui_qt/formtextures.cpp" line="153"/>
<source>Hard maximal slope</source>
<translation>Pente maximale</translation>
</message>
<message>
<location filename="../gui_qt/formtextures.cpp" line="154"/>
<location filename="../gui_qt/formtextures.cpp" line="152"/>
<source>Soft maximal slope</source>
<translation>Pente maximale (adoucie)</translation>
</message>
@ -654,57 +704,59 @@ Maintenir Ctrl : Plus rapide</translation>
<translation>Hauteur</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="181"/>
<source>Surface color</source>
<translation>Couleur de la surface</translation>
<translation type="obsolete">Couleur de la surface</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="182"/>
<source>Light reflection</source>
<translation>Réflection de la lumière</translation>
<translation type="obsolete">Réflection de la lumière</translation>
</message>
<message>
<source>Shininess to light</source>
<translation type="obsolete">Concentration de la lumière réfléchie</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="181"/>
<source>Surface material</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="183"/>
<source>Shininess to light</source>
<translation>Concentration de la lumière réfléchie</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="184"/>
<source>Transparency</source>
<translation>Transparence</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="185"/>
<location filename="../gui_qt/formwater.cpp" line="184"/>
<source>Reflection</source>
<translation>Reflets</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="186"/>
<location filename="../gui_qt/formwater.cpp" line="185"/>
<source>Transparency distance</source>
<translation>Distance maximale de transparence</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="187"/>
<location filename="../gui_qt/formwater.cpp" line="182"/>
<source>Depth color</source>
<translation>Couleur en profondeur</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="188"/>
<location filename="../gui_qt/formwater.cpp" line="186"/>
<source>Light-through distance</source>
<translation>Distance de filtrage de la lumière</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="189"/>
<location filename="../gui_qt/formwater.cpp" line="187"/>
<source>Waves noise</source>
<translation>Bruit des vagues</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="190"/>
<location filename="../gui_qt/formwater.cpp" line="188"/>
<source>Waves height</source>
<translation>Hauteur des vagues</translation>
</message>
<message>
<location filename="../gui_qt/formwater.cpp" line="191"/>
<location filename="../gui_qt/formwater.cpp" line="189"/>
<source>Waves scaling</source>
<translation>Echelle des vagues</translation>
</message>
@ -754,6 +806,14 @@ Maintenir Ctrl : Plus rapide</translation>
<translation type="unfinished">Editer</translation>
</message>
</context>
<context>
<name>InputMaterial</name>
<message>
<location filename="../gui_qt/inputmaterial.cpp" line="50"/>
<source>Edit</source>
<translation type="unfinished">Editer</translation>
</message>
</context>
<context>
<name>InputNoise</name>
<message>
@ -817,87 +877,87 @@ rapide (F5)</translation>
<translation>F5</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="145"/>
<location filename="../gui_qt/mainwindow.cpp" line="155"/>
<source>Do you want to start a new scenery ? Any unsaved changes will be lost.</source>
<translation>Voulez-vous commencer un nouveau paysage ? Les modifications non sauvegardées seront perdues.</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="145"/>
<location filename="../gui_qt/mainwindow.cpp" line="155"/>
<source>Paysages 3D - New scenery</source>
<translation>Paysages 3D - Nouvelle scène</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="155"/>
<location filename="../gui_qt/mainwindow.cpp" line="165"/>
<source>Paysages 3D - Choose a file to save the scenery</source>
<translation>Paysages 3D - Choisissez un fichier pour enregistrer la scène</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="155"/>
<location filename="../gui_qt/mainwindow.cpp" line="181"/>
<location filename="../gui_qt/mainwindow.cpp" line="165"/>
<location filename="../gui_qt/mainwindow.cpp" line="191"/>
<source>Paysages 3D Scenery (*.p3d)</source>
<translation>Scène Paysages 3D (*.p3d)</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="169"/>
<location filename="../gui_qt/mainwindow.cpp" line="172"/>
<location filename="../gui_qt/mainwindow.cpp" line="179"/>
<location filename="../gui_qt/mainwindow.cpp" line="182"/>
<source>Paysages 3D - File saving error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="169"/>
<location filename="../gui_qt/mainwindow.cpp" line="179"/>
<source>Can&apos;t write specified file : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="172"/>
<location filename="../gui_qt/mainwindow.cpp" line="182"/>
<source>Unexpected error while saving file : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="179"/>
<location filename="../gui_qt/mainwindow.cpp" line="189"/>
<source>Do you want to load a scenery from file ? Any unsaved changes will be lost.</source>
<translation>Voulez-vous charger une scène ? Les modifications nons sauvegardées seront perdues.</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="179"/>
<location filename="../gui_qt/mainwindow.cpp" line="189"/>
<source>Paysages 3D - Load scenery</source>
<translation>Paysages 3D - Charger une scène</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="181"/>
<location filename="../gui_qt/mainwindow.cpp" line="191"/>
<source>Paysages 3D - Choose a scenery file to load</source>
<translation>Paysages 3D - Choisissez un fichier de scène à charger</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="191"/>
<location filename="../gui_qt/mainwindow.cpp" line="194"/>
<location filename="../gui_qt/mainwindow.cpp" line="197"/>
<location filename="../gui_qt/mainwindow.cpp" line="200"/>
<location filename="../gui_qt/mainwindow.cpp" line="201"/>
<location filename="../gui_qt/mainwindow.cpp" line="204"/>
<location filename="../gui_qt/mainwindow.cpp" line="207"/>
<location filename="../gui_qt/mainwindow.cpp" line="210"/>
<source>Paysages 3D - File loading error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="191"/>
<location filename="../gui_qt/mainwindow.cpp" line="201"/>
<source>Can&apos;t read specified file : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="194"/>
<location filename="../gui_qt/mainwindow.cpp" line="204"/>
<source>This file doesn&apos;t look like a Paysages 3D file : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="197"/>
<location filename="../gui_qt/mainwindow.cpp" line="207"/>
<source>This file was created with an incompatible Paysages 3D version : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="200"/>
<location filename="../gui_qt/mainwindow.cpp" line="210"/>
<source>Unexpected error while loading file : %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="208"/>
<location filename="../gui_qt/mainwindow.cpp" line="218"/>
<source>A 3D landscape editing and rendering software.
Authors :
@ -1007,7 +1067,7 @@ GLib - http://www.gtk.org/
<translation type="obsolete">Voulez-vous charger un paysage ? Les modifications nons sauvegardées seront perdues.</translation>
</message>
<message>
<location filename="../gui_qt/mainwindow.cpp" line="208"/>
<location filename="../gui_qt/mainwindow.cpp" line="218"/>
<source>Paysages 3D</source>
<translation>Paysages 3D</translation>
</message>