|
@ -6,3 +6,60 @@ mat3 look_mat(vec3 origin, vec3 target, float roll) { |
|
|
|
|
|
|
|
|
return mat3(uu, vv, ww); |
|
|
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); |
|
|
|
|
|
} |