progress on minimap generator. ready for testing

This commit is contained in:
Skarn
2020-10-27 03:33:45 +03:00
parent 7f21eb0bd3
commit 0c48ada684
4 changed files with 163 additions and 31 deletions

View File

@@ -1832,7 +1832,6 @@ void World::drawMinimap ( MapTile *tile
int daytime = static_cast<int>(time) % 2880;
skies->update_sky_colors(camera_pos, daytime);
outdoorLightStats = ol->getLightStats(daytime);
math::vector_3d light_dir = outdoorLightStats.dayDir;
@@ -1840,9 +1839,6 @@ void World::drawMinimap ( MapTile *tile
// todo: figure out why I need to use a different light vector for the terrain
math::vector_3d terrain_light_dir = {-light_dir.z, light_dir.y, -light_dir.x};
math::vector_3d diffuse_color(skies->color_set[LIGHT_GLOBAL_DIFFUSE] * outdoorLightStats.dayIntensity);
math::vector_3d ambient_color(skies->color_set[LIGHT_GLOBAL_AMBIENT] * outdoorLightStats.ambientIntensity);
culldistance = 100000.0f;
gl.enable(GL_DEPTH_TEST);
@@ -1861,8 +1857,8 @@ void World::drawMinimap ( MapTile *tile
mcnk_shader.uniform("draw_terrain_height_contour", static_cast<int>(settings->draw_elevation));
mcnk_shader.uniform("light_dir", terrain_light_dir);
mcnk_shader.uniform("diffuse_color", diffuse_color);
mcnk_shader.uniform("ambient_color", ambient_color);
mcnk_shader.uniform("diffuse_color", settings->diffuse_color);
mcnk_shader.uniform("ambient_color", settings->ambient_color);
mcnk_shader.uniform("alphamap", 0);
mcnk_shader.uniform("tex0", 1);
@@ -1931,8 +1927,8 @@ void World::drawMinimap ( MapTile *tile
m2_shader.uniform("tex2", 1);
m2_shader.uniform("light_dir", light_dir);
m2_shader.uniform("diffuse_color", diffuse_color);
m2_shader.uniform("ambient_color", ambient_color);
m2_shader.uniform("diffuse_color", settings->diffuse_color);
m2_shader.uniform("ambient_color", settings->ambient_color);
for (auto &it : _models_by_filename)
{
@@ -1999,15 +1995,10 @@ void World::drawMinimap ( MapTile *tile
water_shader.uniform("model_view", model_view);
water_shader.uniform("projection", projection);
math::vector_4d ocean_color_light(skies->color_set[OCEAN_COLOR_LIGHT], skies->ocean_shallow_alpha());
math::vector_4d ocean_color_dark(skies->color_set[OCEAN_COLOR_DARK], skies->ocean_deep_alpha());
math::vector_4d river_color_light(skies->color_set[RIVER_COLOR_LIGHT], skies->river_shallow_alpha());
math::vector_4d river_color_dark(skies->color_set[RIVER_COLOR_DARK], skies->river_deep_alpha());
water_shader.uniform("ocean_color_light", ocean_color_light);
water_shader.uniform("ocean_color_dark", ocean_color_dark);
water_shader.uniform("river_color_light", river_color_light);
water_shader.uniform("river_color_dark", river_color_dark);
water_shader.uniform("ocean_color_light", settings->ocean_color_light);
water_shader.uniform("ocean_color_dark", settings->ocean_color_dark);
water_shader.uniform("river_color_light", settings->river_color_light);
water_shader.uniform("river_color_dark", settings->river_color_dark);
water_shader.uniform("use_transform", 1);
}
@@ -2025,8 +2016,8 @@ void World::drawMinimap ( MapTile *tile
wmo_program.uniform("draw_fog", 0);
wmo_program.uniform("exterior_light_dir", light_dir);
wmo_program.uniform("exterior_diffuse_color", diffuse_color);
wmo_program.uniform("exterior_ambient_color", ambient_color);
wmo_program.uniform("exterior_diffuse_color", settings->diffuse_color);
wmo_program.uniform("exterior_ambient_color", settings->ambient_color);
_model_instance_storage.for_each_wmo_instance(
[&](WMOInstance &wmo)
@@ -2154,7 +2145,15 @@ bool World::saveMinimap(tile_index const& tile_idx, MinimapRenderSettings* setti
, settings);
QImage image = pixel_buffer.toImage();
image.save(("/Users/sshumakov/Desktop/MinimapGenTest/test_" + std::to_string(tile_idx.x) + "_" + std::to_string(tile_idx.z) + ".png").c_str());
QSettings settings;
QString str = settings.value ("project/path").toString();
if (!(str.endsWith('\\') || str.endsWith('/')))
{
str += "/";
}
image.save((str.toStdString() + "/textures/minimap/" + basename + "_" + std::to_string(tile_idx.x) + "_" + std::to_string(tile_idx.z) + ".png").c_str());
if (unload)
{

View File

@@ -278,10 +278,138 @@ namespace noggit
clear_btn_wmo_i->setIcon(font_awesome_icon(font_awesome::trash));
wmo_instance_exclude_box_layout_btns->addWidget(clear_btn_wmo_i);
// Lighting
auto lighting_widget = new QWidget(this);
auto lighting_layout = new QFormLayout(filter_widget);
lighting_widget->setLayout(lighting_layout);
settings_tabs->addTab(lighting_widget, "Lighting");
auto diffuse_color = new color_widgets::ColorSelector (this);
diffuse_color->setDisplayMode (color_widgets::ColorSelector::NoAlpha);
diffuse_color->setColor (QColor::fromRgbF (_render_settings.diffuse_color.x,
_render_settings.diffuse_color.y,
_render_settings.diffuse_color.z));
diffuse_color->setMinimumHeight(25);
lighting_layout->addRow("Diffuse color:", diffuse_color);
auto ambient_color = new color_widgets::ColorSelector (this);
ambient_color->setDisplayMode (color_widgets::ColorSelector::NoAlpha);
ambient_color->setColor (QColor::fromRgbF (_render_settings.ambient_color.x,
_render_settings.ambient_color.y,
_render_settings.ambient_color.z));
ambient_color->setMinimumHeight(25);
lighting_layout->addRow("Ambient color:", ambient_color);
auto ocean_color_light = new color_widgets::ColorSelector (this);
ocean_color_light->setColor (QColor::fromRgbF (_render_settings.ocean_color_light.x,
_render_settings.ocean_color_light.y,
_render_settings.ocean_color_light.z,
_render_settings.ocean_color_light.w));
ocean_color_light->setMinimumHeight(25);
lighting_layout->addRow("Ocean light color:", ocean_color_light);
auto ocean_color_dark = new color_widgets::ColorSelector (this);
ocean_color_dark->setColor (QColor::fromRgbF (_render_settings.ocean_color_dark.x,
_render_settings.ocean_color_dark.y,
_render_settings.ocean_color_dark.z,
_render_settings.ocean_color_dark.w));
ocean_color_dark->setMinimumHeight(25);
lighting_layout->addRow("Ocean dakr color:", ocean_color_dark);
auto river_color_light = new color_widgets::ColorSelector (this);
river_color_light->setColor (QColor::fromRgbF (_render_settings.river_color_light.x,
_render_settings.river_color_light.y,
_render_settings.river_color_light.z,
_render_settings.river_color_light.w));
river_color_light->setMinimumHeight(25);
lighting_layout->addRow("River light color:", river_color_light);
auto river_color_dark = new color_widgets::ColorSelector (this);
river_color_dark->setColor (QColor::fromRgbF (_render_settings.river_color_dark.x,
_render_settings.river_color_dark.y,
_render_settings.river_color_dark.z,
_render_settings.river_color_dark.w));
river_color_dark->setMinimumHeight(25);
lighting_layout->addRow("River dark color:", river_color_dark);
// Connections
// Filter buttons
// Lighting colors
connect(diffuse_color, &color_widgets::ColorSelector::colorChanged,
[this] (QColor new_color)
{
_render_settings.diffuse_color = {static_cast<float>(new_color.redF()),
static_cast<float>(new_color.greenF()),
static_cast<float>(new_color.blueF())};
}
);
connect(ambient_color, &color_widgets::ColorSelector::colorChanged,
[this] (QColor new_color)
{
_render_settings.ambient_color = {static_cast<float>(new_color.redF()),
static_cast<float>(new_color.greenF()),
static_cast<float>(new_color.blueF())};
}
);
connect(ocean_color_light, &color_widgets::ColorSelector::colorChanged,
[this] (QColor new_color)
{
_render_settings.ocean_color_light = {static_cast<float>(new_color.redF()),
static_cast<float>(new_color.greenF()),
static_cast<float>(new_color.blueF()),
static_cast<float>(new_color.alphaF())};
}
);
connect(ocean_color_dark, &color_widgets::ColorSelector::colorChanged,
[this] (QColor new_color)
{
_render_settings.ocean_color_dark = {static_cast<float>(new_color.redF()),
static_cast<float>(new_color.greenF()),
static_cast<float>(new_color.blueF()),
static_cast<float>(new_color.alphaF())};
}
);
connect(river_color_light, &color_widgets::ColorSelector::colorChanged,
[this] (QColor new_color)
{
_render_settings.river_color_light = {static_cast<float>(new_color.redF()),
static_cast<float>(new_color.greenF()),
static_cast<float>(new_color.blueF()),
static_cast<float>(new_color.alphaF())};
}
);
connect(river_color_dark , &color_widgets::ColorSelector::colorChanged,
[this] (QColor new_color)
{
_render_settings.river_color_dark = {static_cast<float>(new_color.redF()),
static_cast<float>(new_color.greenF()),
static_cast<float>(new_color.blueF()),
static_cast<float>(new_color.alphaF())};
}
);
// M2 model filter
connect(add_btn, &QPushButton::clicked,
[=]()

View File

@@ -4,21 +4,25 @@
#include <QLabel>
#include <QWidget>
#include <QtWidgets/QSlider>
#include <QSlider>
#include <QDoubleSpinBox>
#include <QSpinBox>
#include <QProgressBar>
#include <QLineEdit>
#include <QListWidget>
#include <qt-color-widgets/color_selector.hpp>
#include <boost/optional.hpp>
#include <string>
#include <unordered_map>
#include <vector>
#include <array>
#include <math/vector_4d.hpp>
#include <math/vector_3d.hpp>
#include <noggit/ui/minimap_widget.hpp>
class MapView;
class World;
@@ -31,7 +35,7 @@ enum MinimapGenMode
struct MinimapRenderSettings
{
MinimapGenMode export_mode; // Export mode
MinimapGenMode export_mode;
// Render settings
int resolution = 512;
@@ -42,21 +46,22 @@ struct MinimapRenderSettings
bool draw_elevation = false;
bool use_filters = false;
// Selection
std::array<bool, 4096> selected_tiles = {false};
// Filtering
QListWidget* m2_model_filter_include;
QListWidget* m2_instance_filter_include;
QListWidget* wmo_model_filter_exclude;
QListWidget* wmo_instance_filter_exclude;
// Filtering
/*
std::unordered_map<std::string, float> m2_model_filter_include; // filename, size category
std::vector<uint32_t> m2_instance_filter_include; // include specific M2 instances
std::vector<std::string> wmo_model_filter_exclude; // exclude WMOs by filename
std::vector<uint32_t> wmo_instance_filter_exclude; // exclude specific WMO instances
*/
// Lighting
math::vector_3d diffuse_color = {1.0, 0.532352924, 0.0};
math::vector_3d ambient_color = {0.407770514, 0.508424163, 0.602650642};
math::vector_4d ocean_color_light = {0.0693173409, 0.294008732, 0.348329663, 0.75};
math::vector_4d ocean_color_dark = {0.000762581825, 0.113907099, 0.161220074, 1.0};
math::vector_4d river_color_light = {0.308351517, 0.363725543, 0.0798838138, 0.5};
math::vector_4d river_color_dark = {0.19945538, 0.320697188, 0.332425594, 1.0};
};

View File

@@ -99,7 +99,7 @@ namespace noggit
_color_palette->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
layout->addRow(_color_palette);
auto info_label (new QLabel("drag&drop colors to select them", this));
auto info_label (new QLabel("Drag&Drop colors to select.", this));
info_label->setAlignment(Qt::AlignCenter);
layout->addRow(info_label);