Colours are now Vectors, added rainbow pigment.
[raymarcher.git] / Textures.lua
index ccc7dbc..324a2d2 100644 (file)
@@ -3,6 +3,9 @@
 require "Vector"
 local V = Vector
 
+require "Colours"
+local C = Colours
+
 local function make_phong_texture(lights, mapped_pigment, amb, diff, spec, shiny)
    local normalize = V.normalize
 
@@ -29,6 +32,7 @@ local function make_phong_texture(lights, mapped_pigment, amb, diff, spec, shiny
          local light_dir = (light-location)/light_dist
 
          local vis = light_visibility(location + light_dir*eps, light_dir, eps, light_dist, 1, sdf)
+         -- local vis = 1.0
 
          local Idiff = math.max(normal*light_dir, 0)
          local Ispec = math.pow(math.max(light_dir*reflected_ray,0),shiny)
@@ -139,6 +143,18 @@ local function make_mandelbrot_pigment(set_pigment, nonset_pigment, max_iter)
    end
 end
 
+local function make_rainbow_pigment(scale)
+   return function (x,y)
+
+      local Ired = math.sin(x/math.pi/scale)^2 * math.sin(y/math.pi/scale)^2
+      local Igreen = math.cos(x/math.pi/scale)^2 * math.sin(y/math.pi/scale)^2
+      local Iblue = math.sin(x/math.pi/scale)^2 * math.cos(y/math.pi/scale)^2
+
+      return C.red*Ired + C.green*Igreen + C.blue*Iblue
+   end
+end
+
+
 -- Mapping functions
 
 -- These functions define mappings from 3D world coordinates to 2D
@@ -168,6 +184,8 @@ Textures = {
    make_count_texture = make_count_texture,
    make_solid_pigment = make_solid_pigment,
    make_checkered_pigment = make_checkered_pigment,
+   make_image_pigment = make_image_pigment,
+   make_rainbow_pigment = make_rainbow_pigment,
    make_mandelbrot_pigment = make_mandelbrot_pigment,
    map_rectangular = map_rectangular,
    map_spherical = map_spherical