Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenricoturri1966 <enricoturri@seznam.cz>2020-03-13 17:09:07 +0300
committerenricoturri1966 <enricoturri@seznam.cz>2020-03-13 17:09:07 +0300
commitb36051af82f372a9555eb03025d85f7cbd6a07cd (patch)
tree40fa7401ca8e810de9dc0e7430dac36550e22803 /resources
parent84c9136e2d990b2079890b66fd88568f29dbf859 (diff)
New tech ENABLE_SLOPE_RENDERING - 1st installment of rendering objects colored by facets slope
Diffstat (limited to 'resources')
-rw-r--r--resources/shaders/gouraud.fs24
-rw-r--r--resources/shaders/gouraud.vs18
2 files changed, 38 insertions, 4 deletions
diff --git a/resources/shaders/gouraud.fs b/resources/shaders/gouraud.fs
index 09003f407..be75b7d9a 100644
--- a/resources/shaders/gouraud.fs
+++ b/resources/shaders/gouraud.fs
@@ -1,6 +1,21 @@
#version 110
const vec3 ZERO = vec3(0.0, 0.0, 0.0);
+const vec3 GREEN = vec3(0.0, 0.65, 0.0);
+const vec3 YELLOW = vec3(0.5, 0.65, 0.0);
+const vec3 RED = vec3(0.65, 0.0, 0.0);
+const float EPSILON = 0.0001;
+
+struct SlopeDetection
+{
+ bool active;
+ // x = yellow z, y = red z
+ vec2 z_range;
+ mat3 volume_world_normal_matrix;
+};
+
+uniform vec4 uniform_color;
+uniform SlopeDetection slope;
varying vec3 clipping_planes_dots;
@@ -10,14 +25,19 @@ 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()
+{
+ return (world_normal_z > slope.z_range.x - EPSILON) ? GREEN : mix(RED, YELLOW, (world_normal_z - slope.z_range.y) / (slope.z_range.x - slope.z_range.y));
+}
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);
}
diff --git a/resources/shaders/gouraud.vs b/resources/shaders/gouraud.vs
index cc54c1c44..3c06729f8 100644
--- a/resources/shaders/gouraud.vs
+++ b/resources/shaders/gouraud.vs
@@ -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 z, y = red z
+ 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;