global_settings { assumed_gamma 1.0 max_trace_level 20 } background { color rgb <0.2,0.4,0.7> } #declare camLookAt = <0,0,0>; #declare camPos = <-5, 2, -15>*5; #declare camAngle = 35; #declare lightPos = <-2000,10000,-4000>; camera { up <0, 1, 0> right <1, 0, 0> location camPos direction <0.0, 0.0, 1> angle camAngle look_at camLookAt } light_source { 0*x colour rgb 1.0 translate lightPos media_attenuation on } light_source { 0*x colour rgb 0.4 translate camPos media_attenuation off media_interaction off shadowless } #macro SpongeInt(A, V, S, L, Obj) #if (L > 0) #local X = dimension_size(A, 1); #local Y = dimension_size(A, 2); #local Z = dimension_size(A, 3); #local LS = S/; #local CZ = 0; #while (CZ < Z) #local CY = 0; #while (CY < Y) #local CX = 0; #while (CX < X) #if (0 != A[CX][CY][CZ]) SpongeInt(A, V+*LS, LS, L-1, Obj) #end #local CX = CX+1; #end #local CY = CY+1; #end #local CZ = CZ+1; #end #else object { Obj scale S translate V } #end #end #macro Sponge(A, S, L, Obj, Mat) union { SpongeInt(A, 0, 1, L, Obj) #local X = dimension_size(A, 1); #local Y = dimension_size(A, 2); #local Z = dimension_size(A, 3); #local M = max(X,max(Y,Z)); translate -0.5 scale S*/pow(M,L) material { Mat } } #end #declare O_Test = array [3] #declare O_Test[0] = superellipsoid { 0.3 scale 0.6 } #declare O_Test[1] = sphere { 0, sqrt(2) } #declare O_Test[2] = box { -0.5, 0.5 } #declare A_Test = array [6] #declare A_Test[0] = array [3][3][3] {{{0,1,1},{1,0,1},{1,1,0}},{{1,0,1},{0,1,0},{1,0,1}},{{1,1,0},{1,0,1},{0,1,1}}} #declare A_Test[1] = array [3][3][3] {{{1,0,0},{0,1,0},{0,0,1}},{{0,1,0},{1,0,1},{0,1,0}},{{0,0,1},{0,1,0},{1,0,0}}} #declare A_Test[2] = array [2][2][2] {{{1,0},{0,1}},{{0,1},{1,0}}} #declare A_Test[3] = array [3][3][3] {{{1,1,1},{1,0,1},{1,1,1}},{{1,0,1},{0,0,0},{1,0,1}},{{1,1,1},{1,0,1},{1,1,1}}} #declare A_Test[4] = array [2][3][3] {{{1,0,0},{0,1,0},{0,0,1}},{{0,0,1},{0,1,0},{1,0,0}}} #declare A_Test[5] = array [4][3][2] {{{1,0},{0,1},{1,0}},{{0,1},{1,0},{0,1}},{{1,0},{0,1},{1,0}},{{0,1},{1,0},{0,1}}} #declare M_Test = material { texture { pigment { rgb 1 } } } // Architype Sierpinski gasket // Sponge(A_Test[3], 30, 3, O_Test[0], M_Test) // Sierpinski tetrahedron Sponge(A_Test[1], 30, 4, O_Test[1], M_Test)