From 4daf92f3dda945d7bff9030d460c2d9f3f6c04b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Sat, 2 Jun 2012 09:46:24 +0000 Subject: [PATCH] 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 --- TODO | 3 +- gui_qt/baseform.cpp | 15 ++- gui_qt/baseform.h | 4 +- gui_qt/basepreview.cpp | 31 +++++- gui_qt/basepreview.h | 2 + gui_qt/dialogmaterial.cpp | 66 ++++++++++++ gui_qt/dialogmaterial.h | 26 +++++ gui_qt/formclouds.cpp | 10 +- gui_qt/formmaterial.cpp | 52 ++++++++++ gui_qt/formmaterial.h | 27 +++++ gui_qt/formtextures.cpp | 4 +- gui_qt/formwater.cpp | 6 +- gui_qt/inputmaterial.cpp | 79 +++++++++++++++ gui_qt/inputmaterial.h | 28 ++++++ gui_qt/inputnoise.h | 2 +- gui_qt/mainwindow.cpp | 12 ++- gui_qt/mainwindow.h | 1 + gui_qt/paysages-qt.pro | 3 + gui_qt/tools.h | 10 ++ i18n/paysages_fr.ts | 206 ++++++++++++++++++++++++-------------- 20 files changed, 492 insertions(+), 95 deletions(-) create mode 100644 gui_qt/dialogmaterial.cpp create mode 100644 gui_qt/dialogmaterial.h create mode 100644 gui_qt/formmaterial.cpp create mode 100644 gui_qt/formmaterial.h create mode 100644 gui_qt/inputmaterial.cpp create mode 100644 gui_qt/inputmaterial.h diff --git a/TODO b/TODO index f93808f..5e7ece1 100644 --- a/TODO +++ b/TODO @@ -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. diff --git a/gui_qt/baseform.cpp b/gui_qt/baseform.cpp index 0a1b513..11a8fa9 100644 --- a/gui_qt/baseform.cpp +++ b/gui_qt/baseform.cpp @@ -7,6 +7,7 @@ #include "inputcolorgradation.h" #include "inputnoise.h" #include "inputcurve.h" +#include "inputmaterial.h" #include #include @@ -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) diff --git a/gui_qt/baseform.h b/gui_qt/baseform.h index c55f5b2..2e01630 100644 --- a/gui_qt/baseform.h +++ b/gui_qt/baseform.h @@ -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); diff --git a/gui_qt/basepreview.cpp b/gui_qt/basepreview.cpp index bb7420a..32306ee 100644 --- a/gui_qt/basepreview.cpp +++ b/gui_qt/basepreview.cpp @@ -5,6 +5,7 @@ #include #include #include +#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() { } diff --git a/gui_qt/basepreview.h b/gui_qt/basepreview.h index 7d0dda2..128da2f 100644 --- a/gui_qt/basepreview.h +++ b/gui_qt/basepreview.h @@ -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: diff --git a/gui_qt/dialogmaterial.cpp b/gui_qt/dialogmaterial.cpp new file mode 100644 index 0000000..fb3f8cb --- /dev/null +++ b/gui_qt/dialogmaterial.cpp @@ -0,0 +1,66 @@ +#include "dialogmaterial.h" + +#include +#include +#include +#include + +/**************** 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(); +} diff --git a/gui_qt/dialogmaterial.h b/gui_qt/dialogmaterial.h new file mode 100644 index 0000000..83f6519 --- /dev/null +++ b/gui_qt/dialogmaterial.h @@ -0,0 +1,26 @@ +#ifndef _PAYSAGES_QT_DIALOGMATERIAL_H_ +#define _PAYSAGES_QT_DIALOGMATERIAL_H_ + +#include +#include +#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 diff --git a/gui_qt/formclouds.cpp b/gui_qt/formclouds.cpp index e65b8c1..13f4d2c 100644 --- a/gui_qt/formclouds.cpp +++ b/gui_qt/formclouds.cpp @@ -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); diff --git a/gui_qt/formmaterial.cpp b/gui_qt/formmaterial.cpp new file mode 100644 index 0000000..fc157ac --- /dev/null +++ b/gui_qt/formmaterial.cpp @@ -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(); +} diff --git a/gui_qt/formmaterial.h b/gui_qt/formmaterial.h new file mode 100644 index 0000000..69614d1 --- /dev/null +++ b/gui_qt/formmaterial.h @@ -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 diff --git a/gui_qt/formtextures.cpp b/gui_qt/formtextures.cpp index 89cc5ad..1f17b50 100644 --- a/gui_qt/formtextures.cpp +++ b/gui_qt/formtextures.cpp @@ -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); diff --git a/gui_qt/formwater.cpp b/gui_qt/formwater.cpp index 2e6c6e1..2e996e0 100644 --- a/gui_qt/formwater.cpp +++ b/gui_qt/formwater.cpp @@ -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); diff --git a/gui_qt/inputmaterial.cpp b/gui_qt/inputmaterial.cpp new file mode 100644 index 0000000..a597c03 --- /dev/null +++ b/gui_qt/inputmaterial.cpp @@ -0,0 +1,79 @@ +#include "inputmaterial.h" + +#include +#include +#include +#include +#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(); + } +} diff --git a/gui_qt/inputmaterial.h b/gui_qt/inputmaterial.h new file mode 100644 index 0000000..5e6ef5b --- /dev/null +++ b/gui_qt/inputmaterial.h @@ -0,0 +1,28 @@ +#ifndef _PAYSAGES_QT_INPUTMATERIAL_H_ +#define _PAYSAGES_QT_INPUTMATERIAL_H_ + +#include +#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 diff --git a/gui_qt/inputnoise.h b/gui_qt/inputnoise.h index 777ede4..924b1ed 100644 --- a/gui_qt/inputnoise.h +++ b/gui_qt/inputnoise.h @@ -25,4 +25,4 @@ private: NoiseGenerator* _value; }; -#endif // _PAYSAGES_QT_INPUTNOISE_H_ +#endif diff --git a/gui_qt/mainwindow.cpp b/gui_qt/mainwindow.cpp index 679faa9..648c42b 100644 --- a/gui_qt/mainwindow.cpp +++ b/gui_qt/mainwindow.cpp @@ -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 list_forms = this->findChildren("_base_form_"); diff --git a/gui_qt/mainwindow.h b/gui_qt/mainwindow.h index 08fdf1f..418e97a 100644 --- a/gui_qt/mainwindow.h +++ b/gui_qt/mainwindow.h @@ -10,6 +10,7 @@ class MainWindow : public QMainWindow public: explicit MainWindow(QWidget *parent = 0); + virtual bool event(QEvent* event); public slots: void refreshAll(); diff --git a/gui_qt/paysages-qt.pro b/gui_qt/paysages-qt.pro index d81380c..803005e 100644 --- a/gui_qt/paysages-qt.pro +++ b/gui_qt/paysages-qt.pro @@ -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 diff --git a/gui_qt/tools.h b/gui_qt/tools.h index 54fe7b1..270442f 100644 --- a/gui_qt/tools.h +++ b/gui_qt/tools.h @@ -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 +static inline void logDebug(QString string) +{ + qDebug() << string; +} +#else +#define logDebug(_x_) ; +#endif + #endif diff --git a/i18n/paysages_fr.ts b/i18n/paysages_fr.ts index 16735e8..2fee872 100644 --- a/i18n/paysages_fr.ts +++ b/i18n/paysages_fr.ts @@ -4,32 +4,32 @@ BaseForm - + Layers : Niveaux : - + Add layer Ajouter un niveau - + Delete layer Supprimer un niveau - + Apply Appliquer - + Revert Annuler les modifications - + Layer %1 Niveau %1 @@ -121,6 +121,29 @@ Right click on a point to delete it. + + DialogMaterial + + + Validate + Valider + + + + Reset + Recommencer + + + + Cancel + Annuler + + + + Paysages 3D - Material editor + + + DialogNoise @@ -317,7 +340,7 @@ Maintenir Ctrl : Plus rapide - Density / Altitude + Density by altitude @@ -337,36 +360,38 @@ Maintenir Ctrl : Plus rapide + Material + + + Base color - Couleur de base + Couleur de base + + + Light reflection + Facteur de réflexion de la lumière + + + Light reflection shininess + Concentration de la réflexion de lumière - Light reflection - Facteur de réflexion de la lumière - - - - Light reflection shininess - Concentration de la réflexion de lumière - - - Hardness to light - + Transparency depth Distance de transparence - + Light traversal depth Distance de traversée de la lumière - + Minimum lighting Eclairage minimal @@ -398,6 +423,29 @@ Maintenir Ctrl : Plus rapide Annuler + + FormMaterial + + + Base color + Couleur de base + + + + Light reflection + + + + + Light reflection shininess + + + + + Lighting preview + + + FormRender @@ -581,57 +629,59 @@ Maintenir Ctrl : Plus rapide Echelle du bruit - Base color - Couleur de base + Couleur de base - Light reflection - Réflexion de lumière + Réflexion de lumière - Light reflection shininess - Concentration de la lumière réfléchie + Concentration de la lumière réfléchie - + Soft minimal height Altitude minimal (adoucie) - + Hard minimal height Altitude minimale - + + Material + + + + Hard maximal height Altitude maximale - + Soft maximal height Altitude maximale (adoucie) - + Soft minimal slope Pente minimale (adoucie) - + Hard minimal slope Pente minimale - + Hard maximal slope Pente maximale - + Soft maximal slope Pente maximale (adoucie) @@ -654,57 +704,59 @@ Maintenir Ctrl : Plus rapide Hauteur - Surface color - Couleur de la surface + Couleur de la surface - Light reflection - Réflection de la lumière + Réflection de la lumière + + + Shininess to light + Concentration de la lumière réfléchie + + + + Surface material + - Shininess to light - Concentration de la lumière réfléchie - - - Transparency Transparence - + Reflection Reflets - + Transparency distance Distance maximale de transparence - + Depth color Couleur en profondeur - + Light-through distance Distance de filtrage de la lumière - + Waves noise Bruit des vagues - + Waves height Hauteur des vagues - + Waves scaling Echelle des vagues @@ -754,6 +806,14 @@ Maintenir Ctrl : Plus rapide Editer + + InputMaterial + + + Edit + Editer + + InputNoise @@ -817,87 +877,87 @@ rapide (F5) F5 - + Do you want to start a new scenery ? Any unsaved changes will be lost. Voulez-vous commencer un nouveau paysage ? Les modifications non sauvegardées seront perdues. - + Paysages 3D - New scenery Paysages 3D - Nouvelle scène - + Paysages 3D - Choose a file to save the scenery Paysages 3D - Choisissez un fichier pour enregistrer la scène - - + + Paysages 3D Scenery (*.p3d) Scène Paysages 3D (*.p3d) - - + + Paysages 3D - File saving error - + Can't write specified file : %1 - + Unexpected error while saving file : %1 - + Do you want to load a scenery from file ? Any unsaved changes will be lost. Voulez-vous charger une scène ? Les modifications nons sauvegardées seront perdues. - + Paysages 3D - Load scenery Paysages 3D - Charger une scène - + Paysages 3D - Choose a scenery file to load Paysages 3D - Choisissez un fichier de scène à charger - - - - + + + + Paysages 3D - File loading error - + Can't read specified file : %1 - + This file doesn't look like a Paysages 3D file : %1 - + This file was created with an incompatible Paysages 3D version : %1 - + Unexpected error while loading file : %1 - + A 3D landscape editing and rendering software. Authors : @@ -1007,7 +1067,7 @@ GLib - http://www.gtk.org/ Voulez-vous charger un paysage ? Les modifications nons sauvegardées seront perdues. - + Paysages 3D Paysages 3D