#declare l1 = array[9][9] { {1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,1,1,0,1}, {1,1,1,1,1,1,1,1,1}, {1,1,1,0,0,0,1,1,1}, {1,0,1,0,0,0,1,0,1}, {1,1,1,0,0,0,1,1,1}, {1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,1,1,0,1}, {1,1,1,1,1,1,1,1,1} } #declare Lvl1 = array[3][3] { {1,1,1}, {1,0,1}, {1,1,1}, } #declare lvl0= mesh{ triangle {<0,0,0>,<1,0,0>,<1,0,1>} triangle {<0,0,0>,<0,0,1>,<1,0,1>} } #declare lvl2= mesh{ triangle {<0,0,0>,<9,0,0>,<9,0,1>} triangle {<0,0,0>,<0,0,1>,<9,0,1>} triangle {<0,0,2>,<9,0,2>,<9,0,3>} triangle {<0,0,2>,<0,0,3>,<9,0,3>} triangle {<0,0,6>,<9,0,6>,<9,0,7>} triangle {<0,0,6>,<0,0,7>,<9,0,7>} triangle {<0,0,8>,<9,0,8>,<9,0,9>} triangle {<0,0,8>,<0,0,9>,<9,0,9>} // triangle {<0,0,0>,<0,0,9>,<1,0,9>} triangle {<0,0,0>,<1,0,0>,<1,0,9>} triangle {<2,0,0>,<2,0,9>,<3,0,9>} triangle {<2,0,0>,<3,0,0>,<3,0,9>} triangle {<6,0,0>,<6,0,9>,<7,0,9>} triangle {<6,0,0>,<7,0,0>,<7,0,9>} triangle {<8,0,0>,<8,0,9>,<9,0,9>} triangle {<8,0,0>,<9,0,0>,<9,0,9>} // triangle {<1,0,3>,<2,0,3>,<2,0,4>} triangle {<1,0,3>,<1,0,4>,<2,0,4>} triangle {<1,0,5>,<2,0,5>,<2,0,6>} triangle {<1,0,5>,<1,0,6>,<2,0,6>} // triangle {<7,0,3>,<8,0,3>,<8,0,4>} triangle {<7,0,3>,<7,0,4>,<8,0,4>} triangle {<7,0,5>,<8,0,5>,<8,0,6>} triangle {<7,0,5>,<7,0,6>,<8,0,6>} // triangle {<3,0,1>,<3,0,2>,<4,0,2>} triangle {<3,0,1>,<4,0,1>,<4,0,2>} triangle {<5,0,1>,<5,0,2>,<6,0,2>} triangle {<5,0,1>,<6,0,1>,<6,0,2>} // triangle {<3,0,7>,<3,0,8>,<4,0,8>} triangle {<3,0,7>,<4,0,7>,<4,0,8>} triangle {<5,0,7>,<5,0,8>,<6,0,8>} triangle {<5,0,7>,<6,0,7>,<6,0,8>} // scale 1/9 } #macro ROTATE(v1,v2,v3,vrot,tr,tr_v) ((vrotate(v1,vrot)+tr)*(1/9))+tr_v ((vrotate(v2,vrot)+tr)*(1/9))+tr_v ((vrotate(v3,vrot)+tr)*(1/9))+tr_v #end #macro Level2_Box(vect) #local vr=array[6] {<0,0,0>,<0,0,0>,<0,0,90>,<0,90,90>,<-90,0,0>,<-90,0,0>} #local tr=array[6] {<0,0,0>,<0,9,0>,<0,0,0>,<9,0,9>,<0,0,0>,<0,0,9>} #local i=0; #while(i<6) triangle {ROTATE(<0,0,0>,<9,0,0>,<9,0,1>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,0>,<0,0,1>,<9,0,1>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,2>,<9,0,2>,<9,0,3>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,2>,<0,0,3>,<9,0,3>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,6>,<9,0,6>,<9,0,7>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,6>,<0,0,7>,<9,0,7>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,8>,<9,0,8>,<9,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,8>,<0,0,9>,<9,0,9>,vr[i],tr[i],vect)} // triangle {ROTATE(<0,0,0>,<0,0,9>,<1,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<0,0,0>,<1,0,0>,<1,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<2,0,0>,<2,0,9>,<3,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<2,0,0>,<3,0,0>,<3,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<6,0,0>,<6,0,9>,<7,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<6,0,0>,<7,0,0>,<7,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<8,0,0>,<8,0,9>,<9,0,9>,vr[i],tr[i],vect)} triangle {ROTATE(<8,0,0>,<9,0,0>,<9,0,9>,vr[i],tr[i],vect)} // triangle {ROTATE(<1,0,3>,<2,0,3>,<2,0,4>,vr[i],tr[i],vect)} triangle {ROTATE(<1,0,3>,<1,0,4>,<2,0,4>,vr[i],tr[i],vect)} triangle {ROTATE(<1,0,5>,<2,0,5>,<2,0,6>,vr[i],tr[i],vect)} triangle {ROTATE(<1,0,5>,<1,0,6>,<2,0,6>,vr[i],tr[i],vect)} // triangle {ROTATE(<7,0,3>,<8,0,3>,<8,0,4>,vr[i],tr[i],vect)} triangle {ROTATE(<7,0,3>,<7,0,4>,<8,0,4>,vr[i],tr[i],vect)} triangle {ROTATE(<7,0,5>,<8,0,5>,<8,0,6>,vr[i],tr[i],vect)} triangle {ROTATE(<7,0,5>,<7,0,6>,<8,0,6>,vr[i],tr[i],vect)} // triangle {ROTATE(<3,0,1>,<3,0,2>,<4,0,2>,vr[i],tr[i],vect)} triangle {ROTATE(<3,0,1>,<4,0,1>,<4,0,2>,vr[i],tr[i],vect)} triangle {ROTATE(<5,0,1>,<5,0,2>,<6,0,2>,vr[i],tr[i],vect)} triangle {ROTATE(<5,0,1>,<6,0,1>,<6,0,2>,vr[i],tr[i],vect)} // triangle {ROTATE(<3,0,7>,<3,0,8>,<4,0,8>,vr[i],tr[i],vect)} triangle {ROTATE(<3,0,7>,<4,0,7>,<4,0,8>,vr[i],tr[i],vect)} triangle {ROTATE(<5,0,7>,<5,0,8>,<6,0,8>,vr[i],tr[i],vect)} triangle {ROTATE(<5,0,7>,<6,0,7>,<6,0,8>,vr[i],tr[i],vect)} // #local i=i+1; #end #end #macro Carpet(base_obj, L) #declare new = union { #local X=0; #while(X<3) #local Z=0; #while(Z<3) #if(Lvl1[X][Z]) object { base_obj translate } #end #local Z=Z+1; #end #local X=X+1; #end scale 1/3 } #undef base_obj #if(L>1) Carpet(new,L-1) #else object { new } #end #end #macro Carpet2(base_obj, Lvl, Use_Color) #declare new = union { #declare Y=0; #declare X=0; #while(X<9) #declare Z=0; #while(Z<9) #if(l1[X][Z]) object { base_obj translate #if (Lvl=1) #if (Use_Color) #if(Z=8) #declare Y=Y+1; #if (Y>9) #declare Y=0; #end #end pigment {rgb /8 } #end #end } #end #declare Z=Z+1; #end #declare X=X+1; #end scale 1/9 } #undef base_obj #if(Lvl>1) Carpet2(new,Lvl-1,Use_Color) #else object { new } #end #end