From c63e03c3674279c86b92bb648fac26f34a0e146e Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Thu, 28 May 2020 15:27:29 +0200 Subject: [PATCH] 1st installment of tech ENABLE_ENVIRONMENT_MAP --- resources/icons/Pmetal_001.png | Bin 0 -> 80450 bytes resources/shaders/gouraud.fs | 9 ++++++++- resources/shaders/gouraud.vs | 9 +++++---- src/libslic3r/Technologies.hpp | 3 +++ src/slic3r/GUI/3DScene.cpp | 26 ++++++++++++++++++++++++++ src/slic3r/GUI/AppConfig.cpp | 5 +++++ src/slic3r/GUI/GLCanvas3D.cpp | 4 ++++ src/slic3r/GUI/Plater.cpp | 17 ++++++++++++++++- src/slic3r/GUI/Plater.hpp | 5 +++++ src/slic3r/GUI/Preferences.cpp | 18 ++++++++++++++++++ src/slic3r/GUI/Preferences.hpp | 3 +++ 11 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 resources/icons/Pmetal_001.png diff --git a/resources/icons/Pmetal_001.png b/resources/icons/Pmetal_001.png new file mode 100644 index 0000000000000000000000000000000000000000..c848f839c50737963a9cfd6d60359953234e4de0 GIT binary patch literal 80450 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

)HiRNoA&OC*Bu+H3MFI-en3I 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Ðe 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 Cw{=MX literal 0 HcmV?d00001 diff --git a/resources/shaders/gouraud.fs b/resources/shaders/gouraud.fs index 853a5512c..45175acc2 100644 --- a/resources/shaders/gouraud.fs +++ b/resources/shaders/gouraud.fs @@ -17,6 +17,9 @@ struct SlopeDetection uniform vec4 uniform_color; uniform SlopeDetection slope; +uniform sampler2D environment_tex; +uniform bool use_environment_tex; + varying vec3 clipping_planes_dots; // x = tainted, y = specular; @@ -26,6 +29,7 @@ varying vec3 delta_box_min; varying vec3 delta_box_max; varying float world_normal_z; +varying vec3 eye_normal; vec3 slope_color() { @@ -40,5 +44,8 @@ void main() vec3 color = slope.actived ? slope_color() : uniform_color.rgb; // if the fragment is outside the print volume -> use darker color color = (any(lessThan(delta_box_min, ZERO)) || any(greaterThan(delta_box_max, ZERO))) ? mix(color, ZERO, 0.3333) : color; - gl_FragColor = vec4(vec3(intensity.y, intensity.y, intensity.y) + color * intensity.x, uniform_color.a); + if (use_environment_tex) + gl_FragColor = vec4(0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, uniform_color.a); + else + gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, uniform_color.a); } diff --git a/resources/shaders/gouraud.vs b/resources/shaders/gouraud.vs index 2644d48e4..d60f6eae8 100644 --- a/resources/shaders/gouraud.vs +++ b/resources/shaders/gouraud.vs @@ -51,22 +51,23 @@ varying vec3 delta_box_max; varying vec3 clipping_planes_dots; varying float world_normal_z; +varying vec3 eye_normal; void main() { // First transform the normal into camera space and normalize the result. - vec3 normal = normalize(gl_NormalMatrix * gl_Normal); + eye_normal = normalize(gl_NormalMatrix * gl_Normal); // Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex. // Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range. - float NdotL = max(dot(normal, LIGHT_TOP_DIR), 0.0); + float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0); intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE; vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz; - intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, normal)), 0.0), LIGHT_TOP_SHININESS); + intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS); // Perform the same lighting calculation for the 2nd light source (no specular applied). - NdotL = max(dot(normal, LIGHT_FRONT_DIR), 0.0); + NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0); intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; // compute deltas for out of print volume detection (world coordinates) diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index f9a2328fa..b29b1a7f6 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -42,5 +42,8 @@ // Enable rendering of objects colored by facets' slope #define ENABLE_SLOPE_RENDERING (1 && ENABLE_2_3_0_ALPHA1) +// Enable rendering of objects using environment map +#define ENABLE_ENVIRONMENT_MAP (1 && ENABLE_2_3_0_ALPHA1) + #endif // _prusaslicer_technologies_h_ diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 2fee7050a..4c61270cf 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1,6 +1,11 @@ #include #include "3DScene.hpp" +#if ENABLE_ENVIRONMENT_MAP +#include "GUI_App.hpp" +#include "Plater.hpp" +#include "AppConfig.hpp" +#endif // ENABLE_ENVIRONMENT_MAP #include "libslic3r/ExtrusionEntity.hpp" #include "libslic3r/ExtrusionEntityCollection.hpp" @@ -663,6 +668,10 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab GLint slope_normal_matrix_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "slope.volume_world_normal_matrix") : -1; GLint slope_z_range_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "slope.z_range") : -1; #endif // ENABLE_SLOPE_RENDERING + +#if ENABLE_ENVIRONMENT_MAP + GLint use_environment_tex_id = (current_program_id > 0) ? ::glGetUniformLocation(current_program_id, "use_environment_tex") : -1; +#endif // ENABLE_ENVIRONMENT_MAP glcheck(); if (print_box_min_id != -1) @@ -682,6 +691,18 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab glsafe(::glUniform2fv(slope_z_range_id, 1, (const GLfloat*)m_slope.z_range.data())); #endif // ENABLE_SLOPE_RENDERING +#if ENABLE_ENVIRONMENT_MAP + unsigned int environment_texture_id = GUI::wxGetApp().plater()->get_environment_texture_id(); + bool use_environment_texture = current_program_id > 0 && environment_texture_id > 0 && GUI::wxGetApp().app_config->get("use_environment_map") == "1"; + + if (use_environment_tex_id != -1) + { + glsafe(::glUniform1i(use_environment_tex_id, use_environment_texture ? 1 : 0)); + if (use_environment_texture) + glsafe(::glBindTexture(GL_TEXTURE_2D, environment_texture_id)); + } +#endif // ENABLE_ENVIRONMENT_MAP + GLVolumeWithIdAndZList to_render = volumes_to_render(this->volumes, type, view_matrix, filter_func); for (GLVolumeWithIdAndZ& volume : to_render) { volume.first->set_render_color(); @@ -712,6 +733,11 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab #endif // ENABLE_SLOPE_RENDERING } +#if ENABLE_ENVIRONMENT_MAP + if (use_environment_tex_id != -1 && use_environment_texture) + glsafe(::glBindTexture(GL_TEXTURE_2D, 0)); +#endif // ENABLE_ENVIRONMENT_MAP + glsafe(::glBindBuffer(GL_ARRAY_BUFFER, 0)); glsafe(::glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); diff --git a/src/slic3r/GUI/AppConfig.cpp b/src/slic3r/GUI/AppConfig.cpp index ba13a25d8..c9d4c026f 100644 --- a/src/slic3r/GUI/AppConfig.cpp +++ b/src/slic3r/GUI/AppConfig.cpp @@ -93,6 +93,11 @@ void AppConfig::set_defaults() if (get("use_free_camera").empty()) set("use_free_camera", "0"); +#if ENABLE_ENVIRONMENT_MAP + if (get("use_environment_map").empty()) + set("use_environment_map", "0"); +#endif // ENABLE_ENVIRONMENT_MAP + // Remove legacy window positions/sizes erase("", "main_frame_maximized"); erase("", "main_frame_pos"); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2f75f6a37..69bebc301 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1994,6 +1994,10 @@ void GLCanvas3D::render() return; } +#if ENABLE_ENVIRONMENT_MAP + wxGetApp().plater()->init_environment_texture(); +#endif // ENABLE_ENVIRONMENT_MAP + const Size& cnv_size = get_canvas_size(); // Probably due to different order of events on Linux/GTK2, when one switched from 3D scene // to preview, this was called before canvas had its final size. It reported zero width diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 7f60b38b4..03bbab796 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1583,6 +1583,9 @@ struct Plater::priv Sidebar *sidebar; Bed3D bed; Camera camera; +#if ENABLE_ENVIRONMENT_MAP + GLTexture environment_texture; +#endif // ENABLE_ENVIRONMENT_MAP Mouse3DController mouse3d_controller; View3D* view3D; GLToolbar view_toolbar; @@ -2078,7 +2081,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) }); wxGetApp().other_instance_message_handler()->init(this->q); - // collapse sidebar according to saved value bool is_collapsed = wxGetApp().app_config->get("collapsed_sidebar") == "1"; sidebar->collapse(is_collapsed); @@ -5531,6 +5533,19 @@ Camera& Plater::get_camera() return p->camera; } +#if ENABLE_ENVIRONMENT_MAP +void Plater::init_environment_texture() +{ + if (p->environment_texture.get_id() == 0) + p->environment_texture.load_from_file(resources_dir() + "/icons/Pmetal_001.png", false, GLTexture::SingleThreaded, false); +} + +unsigned int Plater::get_environment_texture_id() const +{ + return p->environment_texture.get_id(); +} +#endif // ENABLE_ENVIRONMENT_MAP + const Bed3D& Plater::get_bed() const { return p->bed; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 970005055..10b6b354e 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -319,6 +319,11 @@ public: const Camera& get_camera() const; Camera& get_camera(); +#if ENABLE_ENVIRONMENT_MAP + void init_environment_texture(); + unsigned int get_environment_texture_id() const; +#endif // ENABLE_ENVIRONMENT_MAP + const Bed3D& get_bed() const; Bed3D& get_bed(); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 35f2ee429..50abfb7e6 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -180,10 +180,28 @@ void PreferencesDialog::build() create_settings_mode_widget(); +#if ENABLE_ENVIRONMENT_MAP + m_optgroup_render = std::make_shared(this, _(L("Render"))); + m_optgroup_render->label_width = 40; + m_optgroup_render->m_on_change = [this](t_config_option_key opt_key, boost::any value) { + m_values[opt_key] = boost::any_cast(value) ? "1" : "0"; + }; + + def.label = L("Use environment map"); + def.type = coBool; + def.tooltip = L("If enabled, renders object using the environment map."); + def.set_default_value(new ConfigOptionBool{ app_config->get("use_environment_map") == "1" }); + option = Option(def, "use_environment_map"); + m_optgroup_render->append_single_option_line(option); +#endif // ENABLE_ENVIRONMENT_MAP + auto sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(m_optgroup_general->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); sizer->Add(m_optgroup_camera->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); sizer->Add(m_optgroup_gui->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); +#if ENABLE_ENVIRONMENT_MAP + sizer->Add(m_optgroup_render->sizer, 0, wxEXPAND | wxBOTTOM | wxLEFT | wxRIGHT, 10); +#endif // ENABLE_ENVIRONMENT_MAP SetFont(wxGetApp().normal_font()); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index d90f01e2b..f61c4d932 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -20,6 +20,9 @@ class PreferencesDialog : public DPIDialog std::shared_ptr m_optgroup_general; std::shared_ptr m_optgroup_camera; std::shared_ptr m_optgroup_gui; +#if ENABLE_ENVIRONMENT_MAP + std::shared_ptr m_optgroup_render; +#endif // ENABLE_ENVIRONMENT_MAP wxSizer* m_icon_size_sizer; wxRadioBox* m_layout_mode_box; bool isOSX {false};