Merge remote-tracking branch 'origin/master' into ys_search

This commit is contained in:
YuSanka 2020-03-29 20:21:00 +02:00
commit d317f0753a
32 changed files with 1265 additions and 113 deletions

View file

@ -1,6 +1,21 @@
#version 110
const vec3 ZERO = vec3(0.0, 0.0, 0.0);
const vec3 GREEN = vec3(0.0, 0.7, 0.0);
const vec3 YELLOW = vec3(0.5, 0.7, 0.0);
const vec3 RED = vec3(0.7, 0.0, 0.0);
const float EPSILON = 0.0001;
struct SlopeDetection
{
bool active;
// x = yellow, y = red
vec2 z_range;
mat3 volume_world_normal_matrix;
};
uniform vec4 uniform_color;
uniform SlopeDetection slope;
varying vec3 clipping_planes_dots;
@ -10,14 +25,20 @@ varying vec2 intensity;
varying vec3 delta_box_min;
varying vec3 delta_box_max;
uniform vec4 uniform_color;
varying float world_normal_z;
vec3 slope_color()
{
float gradient_range = slope.z_range.x - slope.z_range.y;
return (world_normal_z > slope.z_range.x - EPSILON) ? GREEN : ((gradient_range == 0.0) ? RED : mix(RED, YELLOW, clamp((world_normal_z - slope.z_range.y) / gradient_range, 0.0, 1.0)));
}
void main()
{
if (any(lessThan(clipping_planes_dots, ZERO)))
discard;
vec3 color = slope.active ? slope_color() : uniform_color.rgb;
// if the fragment is outside the print volume -> use darker color
vec3 color = (any(lessThan(delta_box_min, ZERO)) || any(greaterThan(delta_box_max, ZERO))) ? mix(uniform_color.rgb, ZERO, 0.3333) : uniform_color.rgb;
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);
}

View file

@ -20,13 +20,22 @@ const vec3 ZERO = vec3(0.0, 0.0, 0.0);
struct PrintBoxDetection
{
bool active;
vec3 min;
vec3 max;
bool volume_detection;
mat4 volume_world_matrix;
};
struct SlopeDetection
{
bool active;
// x = yellow, y = red
vec2 z_range;
mat3 volume_world_normal_matrix;
};
uniform PrintBoxDetection print_box;
uniform SlopeDetection slope;
// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane.
uniform vec2 z_range;
@ -41,6 +50,8 @@ varying vec3 delta_box_max;
varying vec3 clipping_planes_dots;
varying float world_normal_z;
void main()
{
// First transform the normal into camera space and normalize the result.
@ -61,7 +72,7 @@ void main()
intensity.x += NdotL * LIGHT_FRONT_DIFFUSE;
// compute deltas for out of print volume detection (world coordinates)
if (print_box.volume_detection)
if (print_box.active)
{
vec3 v = (print_box.volume_world_matrix * gl_Vertex).xyz;
delta_box_min = v - print_box.min;
@ -73,6 +84,9 @@ void main()
delta_box_max = ZERO;
}
// z component of normal vector in world coordinate used for slope shading
world_normal_z = slope.active ? (normalize(slope.volume_world_normal_matrix * gl_Normal)).z : 0.0;
gl_Position = ftransform();
// Point in homogenous coordinates.
vec4 world_pos = print_box.volume_world_matrix * gl_Vertex;