From 998d0322d1a48f0ed85c8b0354ff0b432673a15b Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Thu, 26 Dec 2024 14:51:24 +0800 Subject: [PATCH] ENH:overhang use chess to render jira: none Change-Id: I6acf6046a57c6378de2dbe0f0d831d50cef595e5 (cherry picked from commit 3fc313b3dd9d39340907fbfe7dd48f710169e3ca) --- resources/shaders/110/mm_gouraud_wireframe.fs | 23 +++++++++++-------- resources/shaders/140/mm_gouraud_wireframe.fs | 23 +++++++++++-------- src/slic3r/GUI/GLShader.cpp | 3 ++- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/resources/shaders/110/mm_gouraud_wireframe.fs b/resources/shaders/110/mm_gouraud_wireframe.fs index ea8f0ce7e..424a1de03 100644 --- a/resources/shaders/110/mm_gouraud_wireframe.fs +++ b/resources/shaders/110/mm_gouraud_wireframe.fs @@ -21,6 +21,9 @@ const float EPSILON = 0.0001; const vec3 ORANGE = vec3(0.8, 0.4, 0.0); const vec3 LightRed = vec3(0.78, 0.0, 0.0); const vec3 LightBlue = vec3(0.73, 1.0, 1.0); +const float CHESS_WIDTH = 2.0; +const vec3 COLOR_A = vec3(0.8, 0.8, 0.8); +const vec3 COLOR_B = vec3(0.1, 0.1, 0.1); uniform vec4 uniform_color; varying vec3 clipping_planes_dots; @@ -75,15 +78,15 @@ void main() vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal); if (slope.actived) { - if(world_pos.z<0.1&&world_pos.z>-0.1) - { - color = LightBlue; - alpha = 1.0; - } - else if( transformed_normal.z < slope.normal_z - EPSILON) - { - color = color * 0.7 + LightRed * 0.3; - alpha = 1.0; + alpha = 1.0; + if(abs(world_pos.z) < 0.1){ + color = LightBlue; + } + else if( transformed_normal.z < slope.normal_z - EPSILON){ + bool x_flag = mod(world_pos.x, CHESS_WIDTH) < (CHESS_WIDTH / 2.0); + bool y_flag = mod(world_pos.y, CHESS_WIDTH) < (CHESS_WIDTH / 2.0); + vec3 temp_color = (x_flag^^y_flag) ? COLOR_A : COLOR_B; + color = mix(color,temp_color,0.2); } } @@ -105,7 +108,7 @@ void main() intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; if (show_wireframe) { - vec3 wireframeColor = show_wireframe ? getWireframeColor(color) : color; + vec3 wireframeColor = getWireframeColor(color); vec3 triangleColor = wireframe(color, wireframeColor, 1.0); gl_FragColor = vec4(vec3(intensity.y) + triangleColor * intensity.x, alpha); } diff --git a/resources/shaders/140/mm_gouraud_wireframe.fs b/resources/shaders/140/mm_gouraud_wireframe.fs index 6935ebc5e..8c5987abc 100644 --- a/resources/shaders/140/mm_gouraud_wireframe.fs +++ b/resources/shaders/140/mm_gouraud_wireframe.fs @@ -21,6 +21,9 @@ const float EPSILON = 0.0001; const vec3 ORANGE = vec3(0.8, 0.4, 0.0); const vec3 LightRed = vec3(0.78, 0.0, 0.0); const vec3 LightBlue = vec3(0.73, 1.0, 1.0); +const float CHESS_WIDTH = 2.0; +const vec3 COLOR_A = vec3(0.8, 0.8, 0.8); +const vec3 COLOR_B = vec3(0.1, 0.1, 0.1); uniform vec4 uniform_color; in vec3 clipping_planes_dots; @@ -77,15 +80,15 @@ void main() vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal); if (slope.actived) { - if(world_pos.z<0.1&&world_pos.z>-0.1) - { - color = LightBlue; - alpha = 1.0; - } - else if( transformed_normal.z < slope.normal_z - EPSILON) - { - color = color * 0.7 + LightRed * 0.3; - alpha = 1.0; + alpha = 1.0; + if(abs(world_pos.z) < 0.1){ + color = LightBlue; + } + else if( transformed_normal.z < slope.normal_z - EPSILON){ + bool x_flag = mod(world_pos.x, CHESS_WIDTH) < (CHESS_WIDTH / 2.0); + bool y_flag = mod(world_pos.y, CHESS_WIDTH) < (CHESS_WIDTH / 2.0); + vec3 temp_color = (x_flag^^y_flag) ? COLOR_A : COLOR_B; + color = mix(color,temp_color,0.2); } } @@ -107,7 +110,7 @@ void main() intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; if (show_wireframe) { - vec3 wireframeColor = show_wireframe ? getWireframeColor(color) : color; + vec3 wireframeColor = getWireframeColor(color); vec3 triangleColor = wireframe(color, wireframeColor, 1.0); frag_color = vec4(vec3(intensity.y) + triangleColor * intensity.x, alpha); } diff --git a/src/slic3r/GUI/GLShader.cpp b/src/slic3r/GUI/GLShader.cpp index edccb283b..c9ebc331b 100644 --- a/src/slic3r/GUI/GLShader.cpp +++ b/src/slic3r/GUI/GLShader.cpp @@ -145,7 +145,8 @@ bool GLShaderProgram::init_from_texts(const std::string& name, const ShaderSourc glsafe(::glGetShaderiv(id, GL_INFO_LOG_LENGTH, ¶ms)); std::vector msg(params); glsafe(::glGetShaderInfoLog(id, params, ¶ms, msg.data())); - BOOST_LOG_TRIVIAL(error) << "Unable to compile " << shader_type_as_string(type) << " shader of shader program '" << name << "':\n" << msg.data(); + std::string error_info = msg.data(); + BOOST_LOG_TRIVIAL(error) << "Unable to compile " << shader_type_as_string(type) << " shader of shader program '" << name << "':\n" << error_info; // release shaders release_shaders(shader_ids);