mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-24 15:13:58 -06:00
Merge remote-tracking branch 'origin/master' into ys_search
This commit is contained in:
commit
d317f0753a
32 changed files with 1265 additions and 113 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue