progress on minimap generator. ready for testing
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
[=]()
|
||||
|
||||
@@ -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};
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user