lygia
/sdf
/lineSDF
)Segment SDF
Dependencies:
Use:
lineSDF(<vec2> st, <vec2> A, <vec2> B)
#ifndef FNC_LINESDF
#define FNC_LINESDF
float lineSDF( in vec2 st, in vec2 a, in vec2 b ) {
vec2 b_to_a = b - a;
vec2 to_a = st - a;
float h = saturate(dot(to_a, b_to_a)/dot(b_to_a, b_to_a));
return length(to_a - h * b_to_a );
}
float lineSDF(vec3 p, vec3 a, vec3 b) {
//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html
return length(cross(p - a, p - b))/length(b - a);
}
#endif
Use:
lineSDF(<float2> st, <float2> A, <float2> B)
#ifndef FNC_LINESDF
#define FNC_LINESDF
float lineSDF( in float2 st, in float2 a, in float2 b ) {
float2 b_to_a = b - a;
float2 to_a = st - a;
float h = saturate(dot(to_a, b_to_a)/dot(b_to_a, b_to_a));
return length(to_a - h * b_to_a );
}
#endif
Dependencies:
Use:
lineSDF(<float2> st, <float2> A, <float2> B)
#ifndef FNC_LINESDF
#define FNC_LINESDF
float lineSDF( float2 st, float2 a, float2 b ) {
float2 b_to_a = b - a;
float2 to_a = st - a;
float h = saturate(dot(to_a, b_to_a)/dot(b_to_a, b_to_a));
return length(to_a - h * b_to_a );
}
float lineSDF(float3 p, float3 a, float3 b) {
//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html
return length(cross(p - a, p - b))/length(b - a);
}
#endif
LYGIA is dual-licensed under the Prosperity License and the Patron License for sponsors and contributors.
Sponsors and contributors are automatically added to the Patron License and they can ignore the any non-commercial rule of the Prosperity Licensed software (please take a look to the exception).
It's also possible to get a permanent comercial license hook to a single and specific version of LYGIA.
Sign up for the news letter bellow, joing the LYGIA's channel on Discord or follow the Github repository