From: Tim Vaughan Date: Thu, 23 Feb 2023 15:07:08 +0000 (+0100) Subject: Unions and differences now take arrays as arguments. X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=commitdiff_plain;h=c91cd134a1333e89ffddceb0b4a3d21c961f4fd5;p=raymarcher.git Unions and differences now take arrays as arguments. --- diff --git a/Operations.lua b/Operations.lua index 617916d..db9b9a7 100644 --- a/Operations.lua +++ b/Operations.lua @@ -1,25 +1,32 @@ -- Package of geometric operations on SDF objects -local function union(s1, s2) +local function union(sdfs) return function (location) - local p1 = s1(location) - local p2 = s2(location) + local p = sdfs[1](location) + local pp = nil - if p1.dist < p2.dist then - return {dist = p1.dist, texture = p1.texture} - else - return {dist = p2.dist, texture = p2.texture} + for i=2,#sdfs do + pp = sdfs[i](location) + if pp.dist < p.dist then + p = pp + end end + + return p end end -local function diff(s1, s2) +local function diff(sdfs) return function (location) - local p1 = s1(location) - local p2 = s2(location) + local p = sdfs[1](location) + local pp = nil - return {dist = math.max(p1.dist, -p2.dist), - texture = p1.texture} + for i=2,#sdfs do + pp = sdfs[i](location) + p.dist = math.max(p.dist, -pp.dist) + end + + return p end end