diff options
| author | yum <yum.food.vr@gmail.com> | 2025-01-27 19:09:34 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-01-27 19:09:34 -0800 |
| commit | dfe6371283f2415804b4341dbac71f79188ea890 (patch) | |
| tree | cb8041bf824dfb930a5f25972a64e84c55b2f3a7 /iq_sdf.cginc | |
| parent | 8d2c11025c372e8b4ab4e02daf9f7495b162d3f8 (diff) | |
Begin work on zwrite abomination
Diffstat (limited to 'iq_sdf.cginc')
| -rw-r--r-- | iq_sdf.cginc | 21 |
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 ) { |
