ENH:overhang use chess to render

jira: none
Change-Id: I6acf6046a57c6378de2dbe0f0d831d50cef595e5
(cherry picked from commit 3fc313b3dd9d39340907fbfe7dd48f710169e3ca)
This commit is contained in:
zhou.xu 2024-12-26 14:51:24 +08:00 committed by lane.wei
parent e1bc737d1c
commit 998d0322d1
3 changed files with 28 additions and 21 deletions

View File

@ -21,6 +21,9 @@ const float EPSILON = 0.0001;
const vec3 ORANGE = vec3(0.8, 0.4, 0.0); const vec3 ORANGE = vec3(0.8, 0.4, 0.0);
const vec3 LightRed = vec3(0.78, 0.0, 0.0); const vec3 LightRed = vec3(0.78, 0.0, 0.0);
const vec3 LightBlue = vec3(0.73, 1.0, 1.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; uniform vec4 uniform_color;
varying vec3 clipping_planes_dots; varying vec3 clipping_planes_dots;
@ -75,15 +78,15 @@ void main()
vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal); vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal);
if (slope.actived) { if (slope.actived) {
if(world_pos.z<0.1&&world_pos.z>-0.1) alpha = 1.0;
{ if(abs(world_pos.z) < 0.1){
color = LightBlue; color = LightBlue;
alpha = 1.0; }
} else if( transformed_normal.z < slope.normal_z - EPSILON){
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);
color = color * 0.7 + LightRed * 0.3; vec3 temp_color = (x_flag^^y_flag) ? COLOR_A : COLOR_B;
alpha = 1.0; color = mix(color,temp_color,0.2);
} }
} }
@ -105,7 +108,7 @@ void main()
intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; intensity.x += NdotL * LIGHT_FRONT_DIFFUSE;
if (show_wireframe) { if (show_wireframe) {
vec3 wireframeColor = show_wireframe ? getWireframeColor(color) : color; vec3 wireframeColor = getWireframeColor(color);
vec3 triangleColor = wireframe(color, wireframeColor, 1.0); vec3 triangleColor = wireframe(color, wireframeColor, 1.0);
gl_FragColor = vec4(vec3(intensity.y) + triangleColor * intensity.x, alpha); gl_FragColor = vec4(vec3(intensity.y) + triangleColor * intensity.x, alpha);
} }

View File

@ -21,6 +21,9 @@ const float EPSILON = 0.0001;
const vec3 ORANGE = vec3(0.8, 0.4, 0.0); const vec3 ORANGE = vec3(0.8, 0.4, 0.0);
const vec3 LightRed = vec3(0.78, 0.0, 0.0); const vec3 LightRed = vec3(0.78, 0.0, 0.0);
const vec3 LightBlue = vec3(0.73, 1.0, 1.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; uniform vec4 uniform_color;
in vec3 clipping_planes_dots; in vec3 clipping_planes_dots;
@ -77,15 +80,15 @@ void main()
vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal); vec3 transformed_normal = normalize(slope.volume_world_normal_matrix * triangle_normal);
if (slope.actived) { if (slope.actived) {
if(world_pos.z<0.1&&world_pos.z>-0.1) alpha = 1.0;
{ if(abs(world_pos.z) < 0.1){
color = LightBlue; color = LightBlue;
alpha = 1.0; }
} else if( transformed_normal.z < slope.normal_z - EPSILON){
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);
color = color * 0.7 + LightRed * 0.3; vec3 temp_color = (x_flag^^y_flag) ? COLOR_A : COLOR_B;
alpha = 1.0; color = mix(color,temp_color,0.2);
} }
} }
@ -107,7 +110,7 @@ void main()
intensity.x += NdotL * LIGHT_FRONT_DIFFUSE; intensity.x += NdotL * LIGHT_FRONT_DIFFUSE;
if (show_wireframe) { if (show_wireframe) {
vec3 wireframeColor = show_wireframe ? getWireframeColor(color) : color; vec3 wireframeColor = getWireframeColor(color);
vec3 triangleColor = wireframe(color, wireframeColor, 1.0); vec3 triangleColor = wireframe(color, wireframeColor, 1.0);
frag_color = vec4(vec3(intensity.y) + triangleColor * intensity.x, alpha); frag_color = vec4(vec3(intensity.y) + triangleColor * intensity.x, alpha);
} }

View File

@ -145,7 +145,8 @@ bool GLShaderProgram::init_from_texts(const std::string& name, const ShaderSourc
glsafe(::glGetShaderiv(id, GL_INFO_LOG_LENGTH, &params)); glsafe(::glGetShaderiv(id, GL_INFO_LOG_LENGTH, &params));
std::vector<char> msg(params); std::vector<char> msg(params);
glsafe(::glGetShaderInfoLog(id, params, &params, msg.data())); glsafe(::glGetShaderInfoLog(id, params, &params, 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
release_shaders(shader_ids); release_shaders(shader_ids);