Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. float sdSphere(vec3 p,float s){return length(p)-s;}
  2. float udBox(vec3 p,vec3 b){return length(max(abs(p)-b,0.));}
  3. float udRoundBox(vec3 p,vec3 b,float r){return length(max(abs(p)-b,0.))-r;}
  4. float sdBox(vec3 p,vec3 b){vec3 d=abs(p)-b;return min(max(d.x,max(d.y,d.z)),0.)+length(max(d,0.));}
  5. float sdTorus(vec3 p,vec2 t){vec2 q=vec2(length(p.xz)-t.x,p.y);return length(q)-t.y;}
  6. float sdCylinder(vec3 p,vec3 c){return length(p.xz-c.xy)-c.z;}
  7. float sdCone(vec3 p,vec2 c){/*c must be normalized*/float q=length(p.xy);return dot(c,vec2(q,p.z));}
  8. float sdPlane(vec3 p,vec4 n){/*n must be normalized*/return dot(p,n.xyz)+n.w;}
  9. float sdHexPrism(vec3 p,vec2 h){vec3 q=abs(p);return max(q.z-h.y,max((q.x*.866025+q.y*.5),q.y)-h.x);}
  10. float sdTriPrism(vec3 p,vec2 h){vec3 q=abs(p);return max(q.z-h.y,max(q.x*.866025+p.y*.5,-p.y)-h.x*.5);}
  11. float sdCapsule(vec3 p,vec3 a,vec3 b,float r){vec3 pa=p-a,ba=b-a;float h=clamp(dot(pa,ba)/dot(ba,ba),0.,1.);return length(pa-ba*h)-r;}
  12. float sdCappedCylinder(vec3 p,vec2 h){vec2 d=abs(vec2(length(p.xz),p.y))-h;return min(max(d.x,d.y),0.)+length(max(d,0.));}
  13. float sdCappedCone(in vec3 p,in vec3 c){
  14.     vec2 q=vec2(length(p.xz),p.y);
  15.     vec2 v=vec2(c.z*c.y/c.x,-c.z);
  16.     vec2 w=v-q;
  17.     vec2 vv=vec2(dot(v,v),v.x*v.x);
  18.     vec2 qv=vec2(dot(v,w),v.x*w.x);
  19.     vec2 d=max(qv,0.)*qv/vv;
  20.     return sqrt(dot(w,w)-max(d.x,d.y))*sign(max(q.y*v.x-q.x*v.y,w.y));
  21. }
  22. float sdEllipsoid(in vec3 p,in vec3 r){return(length(p/r)-1.)*min(min(r.x,r.y),r.z);}
  23. float udTriangle(vec3 p,vec3 a,vec3 b,vec3 c){
  24.     vec3 ba=b-a;vec3 pa=p-a;
  25.     vec3 cb=c-b;vec3 pb=p-b;
  26.     vec3 ac=a-c;vec3 pc=p-c;
  27.     vec3 nor=cross(ba,ac);
  28.     return sqrt(
  29.     (sign(dot(cross(ba,nor),pa))+
  30.     sign(dot(cross(cb,nor),pb))+
  31.     sign(dot(cross(ac,nor),pc))<2.)
  32.     ?
  33.     min(min(
  34.     dot2(ba*clamp(dot(ba,pa)/dot2(ba),0.,1.)-pa),
  35.     dot2(cb*clamp(dot(cb,pb)/dot2(cb),0.,1.)-pb)),
  36.     dot2(ac*clamp(dot(ac,pc)/dot2(ac),0.,1.)-pc))
  37.     :
  38.     dot(nor,pa)*dot(nor,pa)/dot2(nor));
  39. }
  40. float udQuad(vec3 p,vec3 a,vec3 b,vec3 c,vec3 d){
  41.     vec3 ba=b-a;vec3 pa=p-a;
  42.     vec3 cb=c-b;vec3 pb=p-b;
  43.     vec3 dc=d-c;vec3 pc=p-c;
  44.     vec3 ad=a-d;vec3 pd=p-d;
  45.     vec3 nor=cross(ba,ad);
  46.     return sqrt(
  47.     (sign(dot(cross(ba,nor),pa))+
  48.     sign(dot(cross(cb,nor),pb))+
  49.     sign(dot(cross(dc,nor),pc))+
  50.     sign(dot(cross(ad,nor),pd))<3.)
  51.     ?
  52.     min(min(min(
  53.     dot2(ba*clamp(dot(ba,pa)/dot2(ba),0.,1.)-pa),
  54.     dot2(cb*clamp(dot(cb,pb)/dot2(cb),0.,1.)-pb)),
  55.     dot2(dc*clamp(dot(dc,pc)/dot2(dc),0.,1.)-pc)),
  56.     dot2(ad*clamp(dot(ad,pd)/dot2(ad),0.,1.)-pd))
  57.     :
  58.     dot(nor,pa)*dot(nor,pa)/dot2(nor));
  59. }
  60. float sdTorus82(vec3 p,vec2 t){vec2 q=vec2(length2(p.xz)-t.x,p.y);return length8(q)-t.y;}
  61. float sdTorus88(vec3 p,vec2 t){vec2 q=vec2(length8(p.xz)-t.x,p.y);return length8(q)-t.y;}
  62. float opU(float d1,float d2){return min(d1,d2);} //Union.
  63. float opS(float d1,float d2){return max(-d1,d2);} //Subtraction.
  64. float opI(float d1,float d2){return max(d1,d2);} //Intersection.
  65. //float opRep(vec3 p,vec3 c){vec3 q=mod(p,c)-.5*c;return primitve(q);} //Repetition.
  66. //vec3 opTx(vec3 p,mat4 m){vec3 q=invert(m)*p;return primitive(q);} //Rotation/Translation.
  67. //float opScale(vec3 p,float s){return primitive(p/s)*s;} //Scale.
  68. //float opDisplace(vec3 p){float d1=primitive(p);float d2=displacement(p);return d1+d2;} //Displacement.
  69. //float opBlend(vec3 p){float d1=primitiveA(p);float d2=primitiveB(p);return smin(d1,d2);} //Blend.
  70. //float opTwist(vec3 p){float c=cos(20.*p.y);float s=sin(20.*p.y);mat2 m=mat2(c,-s,s,c);vec3 q=vec3(m*p.xz,p.y);return primitive(q);}
  71. //float opCheapBend(vec3 p){float c=cos(20.*p.y);float s=sin(20.*p.y);mat2 m=mat2(c,-s,s,c);vec3 q=vec3(m*p.xy,p.z);return primitive(q);}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement