diff --git a/examples/test/shaders/utils.glsl b/examples/test/shaders/utils.glsl index 1998de8..752306e 100644 --- a/examples/test/shaders/utils.glsl +++ b/examples/test/shaders/utils.glsl @@ -6,3 +6,60 @@ mat3 look_mat(vec3 origin, vec3 target, float roll) { return mat3(uu, vv, ww); } + +#define N_HIT_FAR_PLANE -1. +#define N_SDF_RULER -2. + +float dot2( in vec3 v ) { return dot(v,v); } +float udQuad( vec3 p, vec3 a, vec3 b, vec3 c, vec3 d ) +{ + vec3 ba = b - a; vec3 pa = p - a; + vec3 cb = c - b; vec3 pb = p - b; + vec3 dc = d - c; vec3 pc = p - c; + vec3 ad = a - d; vec3 pd = p - d; + vec3 nor = cross( ba, ad ); + + return sqrt( + (sign(dot(cross(ba,nor),pa)) + + sign(dot(cross(cb,nor),pb)) + + sign(dot(cross(dc,nor),pc)) + + sign(dot(cross(ad,nor),pd))<3.0) + ? + min( min( min( + dot2(ba*clamp(dot(ba,pa)/dot2(ba),0.0,1.0)-pa), + dot2(cb*clamp(dot(cb,pb)/dot2(cb),0.0,1.0)-pb) ), + dot2(dc*clamp(dot(dc,pc)/dot2(dc),0.0,1.0)-pc) ), + dot2(ad*clamp(dot(ad,pd)/dot2(ad),0.0,1.0)-pd) ) + : + dot(nor,pa)*dot(nor,pa)/dot2(nor) ); +} + +float atan2(in float y, in float x) { + return x == 0.0 ? sign(y)*PI/2 : atan(y, x); +} + +float mod289(float x){return x - floor(x * (1.0 / 289.0)) * 289.0;} +vec4 mod289(vec4 x){return x - floor(x * (1.0 / 289.0)) * 289.0;} +vec4 perm(vec4 x){return mod289(((x * 34.0) + 1.0) * x);} + +float noise(vec3 p){ + vec3 a = floor(p); + vec3 d = p - a; + d = d * d * (3.0 - 2.0 * d); + + vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0); + vec4 k1 = perm(b.xyxy); + vec4 k2 = perm(k1.xyxy + b.zzww); + + vec4 c = k2 + a.zzzz; + vec4 k3 = perm(c); + vec4 k4 = perm(c + 1.0); + + vec4 o1 = fract(k3 * (1.0 / 41.0)); + vec4 o2 = fract(k4 * (1.0 / 41.0)); + + vec4 o3 = o2 * d.z + o1 * (1.0 - d.z); + vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x); + + return o4.y * d.y + o4.x * (1.0 - d.y); +}