|
|
- mat3 look_mat(vec3 origin, vec3 target, float roll) {
- vec3 rr = vec3(sin(roll), cos(roll), 0.0);
- vec3 ww = normalize(target - origin);
- vec3 uu = normalize(cross(ww, rr));
- vec3 vv = normalize(cross(uu, 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);
- }
|