Render is now its own package.
[raymarcher.git] / holy_sphere.lua
diff --git a/holy_sphere.lua b/holy_sphere.lua
new file mode 100644 (file)
index 0000000..b26f67e
--- /dev/null
@@ -0,0 +1,41 @@
+require "Vector"
+local V = Vector
+
+require "Primitives"
+local P = Primitives
+
+require "Operations"
+local O = Operations
+
+require "Textures"
+local T = Textures
+
+require "Render"
+
+local lights = {V.new{3,-3,1}}
+
+local scene = {
+   sdf =
+      O.union(
+         O.diff(
+            O.diff(
+               O.diff(
+                  P.make_sphere(V.new{0,0,0}, 1,
+                                T.make_phong_texture(lights,
+                                                     T.make_solid_pigment({0,1,0}),
+                                                     0.2, 0.7, 1.0, 100)),
+                  P.make_sphere(V.new{0,0,0}, 0.8)),
+               P.make_pipe(V.new{0,0,0}, 0.5, V.new{0,1,0})),
+            P.make_pipe(V.new{0,0,0}, 0.5, V.new{1,0,0})),
+
+         P.make_plane(V.new{0,0,-1.0}, V.new{0,0,1},
+                      T.make_phong_texture(lights,
+                         T.make_checkered_pigment({0.5,0,0.2}, {1,1,1}),
+                         0.2, 1.0, 0, 1))),
+                               
+   camera = {location = V.new{2,-5,1},
+             point_at = V.new{0,0,0},
+             right = V.x,
+             fov = 1}}
+
+Render.render(scene, 1280, 960, "holy_sphere.ppm")