sdf2mesh 0.1.0

A tool to convert SDFs to triangle meshes using wgpu and dual contouring
Documentation
// Copyright © Michael Winkelmann <michael@winkelmann.site>
// SPDX-License-Identifier: AGPL-3.0-or-later

// Builtin SDF3D primitives
// mostly translated from https://iquilezles.org/articles/distfunctions/ 

fn sdf3d_box(p: vec3f, b: vec3f) -> f32
{
  let q = abs(p) - 0.5 * b;
  return length(max(q,vec3f(0.0, 0.0, 0.0))) + min(max(q.x,max(q.y,q.z)),0.0);
}

fn sdf3d_cylinder(p: vec3f, h: f32, r: f32) -> f32
{
  let d: vec2f = abs(vec2(length(p.xz),p.y)) - vec2(r,h);
  return min(max(d.x,d.y),0.0) + length(max(d,vec2f()));
}

fn sdf3d_capsule(p: vec3f, a: vec3f, b: vec3f, r: f32) -> f32
{
  let pa = p - a;
  let ba = b - a;
  let h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0);
  return length( pa - ba*h ) - r;
}

fn sdf3d_sphere(p: vec3f, s: f32) -> f32
{
  return length(p)-s;
}

fn sdf3d_torus(p: vec3f, t: vec2f) -> f32
{
  let q = vec2(length(p.xz)-t.x,p.y);
  return length(q)-t.y;
}