// perspective (default) camera camera { location <4, 2, 1> look_at 0 } // create a regular point light source light_source {<0, 5, 0> 0.5} light_source {<4, 2, 1> 0.5} background { color rgb 1 } #declare T_Red = texture { pigment { color rgb <1,0,0>} finish { diffuse 1.0 ambient 0.0 phong 0.5 } } #macro sierpinski (s, base_center, recursion_depth) #if (recursion_depth > 0) union { sierpinski(s / 2, base_center + s/2*y, recursion_depth - 1) // Top sierpinski(s / 2, base_center - s/2*(x+z), recursion_depth - 1) // Base +x +z corner sierpinski(s / 2, base_center - s/2*(x-z), recursion_depth - 1) // Base +x -z corner sierpinski(s / 2, base_center - s/2*(-x+z), recursion_depth - 1) // Base -x +z corner sierpinski(s / 2, base_center - s/2*(-x-z), recursion_depth - 1) // Base -x -z corner } #else difference{ box { <1,1,1>, <-1,0,-1> } plane{ x-y, -sqrt(2)/2} plane{ -x-y, -sqrt(2)/2} plane{ z-y, -sqrt(2)/2} plane{ -z-y, -sqrt(2)/2} scale s translate base_center } #end #end object { sierpinski(1, 0, 1) texture { T_Red } }