// ----------------------------------------------------------------------------- // This work is licensed under the Creative Commons Attribution 3.0 Unported License. // To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/ // or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, // California, 94041, USA. // // Persistence Of Vision raytracer sample file. // -------------------------------------------------------------------------- // 2024-06-17 - lb // -------------------------------------------------------------------------- // https://iquilezles.org/articles/palettes/ // -------------------------------------------------------------------------- // -------------------------------------------------------------------------- #declare fnColor = function(a, b, c, d, _t) { a + b*cos(2*pi*(_t*c+d)) } // -------------------------------------------------------------------------- #macro CalColor(p1, p2, p3, p4, _t) < fnColor(p1.red, p2.red, p3.red, p4.red, _t), fnColor(p1.green, p2.green, p3.green, p4.green, _t), fnColor(p1.blue, p2.blue, p3.blue, p4.blue, _t) > #end // -------------------------------------------------------------------------- // the same examples as the site // -------------------------------------------------------------------------- #declare palette = 0; #switch (palette) #case (0) #declare A = <0.50, 0.50, 0.50>; #declare B = <0.50, 0.50, 0.50>; #declare C = <1.00, 1.00, 1.00>; #declare D = <0.00, 0.33, 0.67>; #break #case (1) #declare A = <0.50, 0.50, 0.50>; #declare B = <0.50, 0.50, 0.50>; #declare C = <1.00, 1.00, 1.00>; #declare D = <0.00, 0.10, 0.20>; #break #case (2) #declare A = <0.50, 0.50, 0.50>; #declare B = <0.50, 0.50, 0.50>; #declare C = <1.00, 1.00, 1.00>; #declare D = <0.30, 0.20, 0.20>; #break #case (3) #declare A = <0.50, 0.50, 0.50>; #declare B = <0.50, 0.50, 0.50>; #declare C = <1.00, 1.00, 0.50>; #declare D = <0.80, 0.90, 0.30>; #break #case (4) #declare A = <0.50, 0.50, 0.50>; #declare B = <0.50, 0.50, 0.50>; #declare C = <1.00, 0.70, 0.40>; #declare D = <0.00, 0.15, 0.20>; #break #case (5) #declare A = <0.50, 0.50, 0.50>; #declare B = <0.50, 0.50, 0.50>; #declare C = <2.00, 1.00, 0.00>; #declare D = <0.50, 0.20, 0.25>; #break #case (6) #declare A = <0.80, 0.50, 0.40>; #declare B = <0.20, 0.40, 0.20>; #declare C = <2.00, 1.00, 1.00>; #declare D = <0.00, 0.25, 0.25>; #break #else #error "Selector must be between 0 and 6" #end // ----------------------------------------------------------------------------- #if(16*image_height != 9* image_width) #error "Set image ratio to 16/9." #end #declare ZSize = 10; #declare HSize = 4; // ----------------------------------------------------------------------------- // --- SETTINGS ---------------------------------------------------------------- // ----------------------------------------------------------------------------- global_settings { assumed_gamma 1.00 max_trace_level 5 } #default { finish { ambient 0.00 emission 0.40 diffuse 0.60 } } // ----------------------------------------------------------------------------- // --- SCENE ------------------------------------------------------------------- // ----------------------------------------------------------------------------- camera { orthographic location <16,HSize*0.50,ZSize*0.50> up y right x*image_width/image_height look_at <0, HSize*0.50, ZSize*0.50> angle 36 } light_source { <100, HSize*0.50, ZSize*0.50> color 1 } background { color <0.167438, 0.167443, 0.167440> } // ----------------------------------------------------------------------------- // --- OBJETS ------------------------------------------------------------------ // ----------------------------------------------------------------------------- #declare S = 0.05; box { <0, 0, 0>, <-1, HSize, ZSize> pigment { gradient z color_map { #declare T = 0; #while ( T <= 1 ) [ T rgb CalColor(A,B,C,D,T) ] #declare T = T + S; #end } scale ZSize } }