X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=Operations.lua;h=db9b9a7574644bc332c5b7f4f0486859d1f34ad3;hb=cb5790513e938b4879b6e66012802c9c5a0a2297;hp=d606d391006d73963666bf64df483672922c2d15;hpb=bbd8d6d0b901e62730562d6cddfa80ca1c00bbbe;p=raymarcher.git diff --git a/Operations.lua b/Operations.lua index d606d39..db9b9a7 100644 --- a/Operations.lua +++ b/Operations.lua @@ -1,20 +1,39 @@ -- 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(sdfs) + return function (location) + local p = sdfs[1](location) + local pp = nil + + for i=2,#sdfs do + pp = sdfs[i](location) + p.dist = math.max(p.dist, -pp.dist) + end + + return p end end + Operations = { - union = union + union = union, + diff = diff } return Operations