diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-16 23:54:15 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-16 23:54:15 +0100 |
| commit | 340dd11c44077ac121f9da27752ae97b3b7566e8 (patch) | |
| tree | b19052b760b379718fc10497c41fa2e175ac7d96 /common | |
| parent | 3b2bee705cfe5a250bb6049a90b5d734d3125f73 (diff) | |
fix: correct Heptagon effect rendering and SDF implementation
- Change draw call from 21 to 3 vertices (fullscreen triangle)
- Replace broken folding-based SDF with IQ's atan-based regular polygon formula
- Simplify test timeline to render Heptagon directly to sink
- Reduce heptagon radius from 0.5 to 0.3 for better visibility
The effect was not visible due to incorrect vertex count and broken SDF
returning negative values everywhere (showing only fill color).
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'common')
| -rw-r--r-- | common/shaders/heptagon.wgsl | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/common/shaders/heptagon.wgsl b/common/shaders/heptagon.wgsl index 3bfc59d..078978a 100644 --- a/common/shaders/heptagon.wgsl +++ b/common/shaders/heptagon.wgsl @@ -19,12 +19,11 @@ struct VertexOutput { } fn sdf_heptagon(p: vec2<f32>, r: f32) -> f32 { - let k = vec3<f32>(0.868516, -0.495754, 0.357407); - var p_abs = abs(p); - p_abs -= 2.0 * k.xy * min(dot(k.xy, p_abs), 0.0); - p_abs -= 2.0 * vec2<f32>(-k.x, k.y) * min(dot(vec2<f32>(-k.x, k.y), p_abs), 0.0); - p_abs -= vec2<f32>(clamp(p_abs.x, -k.z * r, k.z * r), r); - return length(p_abs) * sign(p_abs.y); + let an = 3.141593 / 7.0; // PI/7 for heptagon + let acs = vec2<f32>(cos(an), sin(an)); + let bn = (atan2(p.x, p.y) % (2.0 * an)) - an; + let q = length(p) * vec2<f32>(cos(bn), abs(sin(bn))); + return length(q - r * acs) * sign(q.x - r * acs.x); } @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> { @@ -39,7 +38,7 @@ fn sdf_heptagon(p: vec2<f32>, r: f32) -> f32 { uv.x * s + uv.y * c ); - let dist = sdf_heptagon(rot_uv, 0.5); + let dist = sdf_heptagon(rot_uv, 0.3); let color = mix(vec3<f32>(0.2, 0.4, 0.8), vec3<f32>(1.0, 0.8, 0.2), smoothstep(0.01, -0.01, dist)); |
