#version 3.5; global_settings{max_trace_level 20} camera { location <.5,2,-5>*2 look_at 0 angle 15 } background{color rgb 1} light_source { <1,1.5,-3>*10 color rgb 1 } light_source { <-3,-2,-4>*10 color rgb <1,.7,.7>*.3 } #declare Rec_Exp = 8; #declare TA = array[Rec_Exp]; #declare TA[0] = transform { scale sqrt(2)/(4*cos(degrees(30))) rotate y*45 rotate -x*(90-degrees(atan2(sqrt(2)/2,1))) rotate -y*45 translate <1,1,-1>/3 } #declare TA[1] = transform{ transform TA[0] rotate y*90 } #declare TA[2] = transform{ transform TA[1] rotate y*90 } #declare TA[3] = transform{ transform TA[2] rotate y*90 } #declare TA[4] = transform{ transform TA[0] scale <1,-1,1> } #declare TA[5] = transform{ transform TA[1] scale <1,-1,1> } #declare TA[6] = transform{ transform TA[2] scale <1,-1,1> } #declare TA[7] = transform{ transform TA[3] scale <1,-1,1> } #declare Base = union { #local A = < 1, 0, 0>; #local B = < 0, 0, 1>; #local C = <-1, 0, 0>; #local D = < 0, 0,-1>; #local E = < 0, 1, 0>; #local F = < 0,-1, 0>; #local r = .05; union { sphere{A, r} cylinder{A,B,r} sphere{B, r} cylinder{B,C,r} sphere{C, r} cylinder{C,D,r} sphere{D, r} cylinder{D,A,r} sphere{E, r} cylinder{A,E,r} cylinder{B,E,r} cylinder{C,E,r} cylinder{D,E,r} sphere{F, r} cylinder{A,F,r} cylinder{B,F,r} cylinder{C,F,r} cylinder{D,F,r} torus{sqrt(4)/2,r} texture{pigment{color rgb 0} finish{specular 1 reflection {.1,.5}}} } union { triangle{A,B,E} triangle{B,C,E} triangle{C,D,E} triangle{D,A,E} triangle{A,B,F} triangle{B,C,F} triangle{C,D,F} triangle{D,A,F} texture { pigment { //color rgb <1,.95,.9> filter .9 color rgb 1.1 } finish{specular .3} normal{bozo 3 scale .03} } } pigment{color rgb 1} } #macro make_lsystem(baseObj, transforms, n_transforms, depth) #debug "make_lsystem was called \n" #if(depth>0) #local newObj = union { object{baseObj} #local i=0; #while(i0) make_lsystem(newObj, transforms, n_transforms, depth-1) #else object{newObj} #end #end make_lsystem(Base, TA, Rec_Exp, 5)