Colours are now Vectors, added rainbow pigment.
[raymarcher.git] / Operations.lua
1 -- Package of geometric operations on SDF objects
2
3 local function union(sdfs)
4    return function (location)
5       local p = sdfs[1](location)
6       local pp = nil
7
8       for i=2,#sdfs do
9          pp = sdfs[i](location)
10          if pp.dist < p.dist then
11             p = pp
12          end
13       end
14
15       return p
16    end
17 end
18
19 local function diff(sdfs)
20    return function (location)
21       local p = sdfs[1](location)
22       local pp = nil
23
24       for i=2,#sdfs do
25          pp = sdfs[i](location)
26          p.dist = math.max(p.dist, -pp.dist)
27       end
28       
29       return p
30    end
31 end
32
33
34 Operations = {
35    union = union,
36    diff = diff
37 }
38
39 return Operations