summaryrefslogtreecommitdiffstats
path: root/iq_sdf.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-01-27 19:09:34 -0800
committeryum <yum.food.vr@gmail.com>2025-01-27 19:09:34 -0800
commitdfe6371283f2415804b4341dbac71f79188ea890 (patch)
treecb8041bf824dfb930a5f25972a64e84c55b2f3a7 /iq_sdf.cginc
parent8d2c11025c372e8b4ab4e02daf9f7495b162d3f8 (diff)
Begin work on zwrite abomination
Diffstat (limited to 'iq_sdf.cginc')
-rw-r--r--iq_sdf.cginc21
1 files changed, 21 insertions, 0 deletions
diff --git a/iq_sdf.cginc b/iq_sdf.cginc
index 4f5608e..d905b81 100644
--- a/iq_sdf.cginc
+++ b/iq_sdf.cginc
@@ -27,6 +27,19 @@ float distance_from_sphere(float3 p, float r)
return length(p) - r;
}
+float distance_from_torus(float3 p, float2 t)
+{
+ float2 q = float2(length(p.xz) - t.x, p.y);
+ return length(q) - t.y;
+}
+
+float distance_from_capped_torus(float3 p, float2 sc, float ra, float rb)
+{
+ p.x = abs(p.x);
+ float k = (sc.y*p.x>sc.x*p.y) ? dot(p.xy,sc) : length(p.xy);
+ return sqrt(dot(p,p) + ra*ra - 2.0*ra*k) - rb;
+}
+
float distance_from_cut_sphere( in float3 p, in float r, in float h )
{
float w = sqrt(r*r-h*h); // constant for a given shape
@@ -126,6 +139,14 @@ float distance_from_hex_prism(float3 p, float2 h)
p.z-h.y );
return min(max(d.x,d.y),0.0) + length(max(d,0.0));
}
+
+float distance_from_capsule(float3 p, float3 a, float3 b, float r)
+{
+ float3 pa = p - a, ba = b - a;
+ float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
+ return length( pa - ba*h ) - r;
+}
+
/*
float sdHexPrism( vec3 p, vec2 h )
{