#include "colors.inc" //#include "shapes.inc" //#include "shapes2.inc" //#include "metals.inc" //#include "stones.inc" #include "meshpoly.inc" //global_settings { max_trace_level 20 ambient_light White*2 } //background { color White*.025 } camera { location <-3,4,-7> look_at <0,0,0> } //camera { location <-5,5,-15> look_at <0,0,0> } light_source { <-200,200,-500> color Gray90 } light_source { <100,600,-300> color Gray90 } //light_source { <0,0,400> color Gray90 } //light_source { <400,600,-100> color White } //usage: //(DCrystal, ICrystal, CCrystal, OCrystal, TCrystal ) //Crystal ( center, radius-of-innermost-polyhedron, level-of-recursion, ratio-of-parent/child-radii, internal(0) ) #declare c = 1; #macro DCrystal(center,r,l,R,n) #if (n = 0) #local q = 1; #while (q < l) #declare n = n + pow(20,q); #local q = q + 1; #end #end #if (l > 0) #render concat(str(c,8,0),"/",str(n,8,0),"\r") #declare c=c+1; DCrystal( center+< 0.000000, 2.383963,-1.821186>*r*(1+R)/3, r*R, l-1, R, n ) //This code was copied over DCrystal( center+< 1.732051, 2.383963,-0.562777>*r*(1+R)/3, r*R, l-1, R, n ) //from the "infinite reflections", DCrystal( center+< 1.070466, 2.383963, 1.473370>*r*(1+R)/3, r*R, l-1, R, n ) //so the translates are set to DCrystal( center+<-1.070466, 2.383963, 1.473370>*r*(1+R)/3, r*R, l-1, R, n ) //be 3 units from the origin. DCrystal( center+<-1.732051, 2.383963,-0.562777>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 0.000000,-2.383963, 1.821186>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 1.732051,-2.383963, 0.562777>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 1.070466,-2.383963,-1.473370>*r*(1+R)/3, r*R, l-1, R, n ) //Didn't feel like retyping DCrystal( center+<-1.070466,-2.383963,-1.473370>*r*(1+R)/3, r*R, l-1, R, n ) //all these numbers. DCrystal( center+<-1.732051,-2.383963, 0.562777>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 0.000000, 0.562777,-2.946741>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 2.802517, 0.562777,-0.910593>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 1.732051, 0.562777, 2.383963>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+<-1.732051, 0.562777, 2.383963>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+<-2.802517, 0.562777,-0.910593>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 0.000000,-0.562777, 2.946741>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 2.802517,-0.562777, 0.910593>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+< 1.732051,-0.562777,-2.383963>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+<-1.732051,-0.562777,-2.383963>*r*(1+R)/3, r*R, l-1, R, n ) DCrystal( center+<-2.802517,-0.562777, 0.910593>*r*(1+R)/3, r*R, l-1, R, n ) #end object { Dodecahedron scale r translate center /*pigment { color rgb center*3/8+.5 }*/ } #end #declare c = 1; #macro ICrystal(center,r,l,R,n) #if (n = 0) #local q = 1; #while (q < l) #declare n = n + pow(12,q); #local q = q + 1; #end #end #if (l > 0) #render concat(str(c,8,0),"/",str(n,8,0),"\r") #declare c=c+1; ICrystal( center+<0,1,0 >*r*(1+R), r*R, l-1, R, n ) ICrystal( center+< 0.000000, 0.447213, 0.894427>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+< 0.850651, 0.447213, 0.276393>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+< 0.525731, 0.447213,-0.723607>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+<-0.525731, 0.447213,-0.723607>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+<-0.850651, 0.447213, 0.276393>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+<-0.000000,-0.447213,-0.894427>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+<-0.850651,-0.447213,-0.276393>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+<-0.525731,-0.447213, 0.723607>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+< 0.525731,-0.447213, 0.723607>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+< 0.850651,-0.447213,-0.276393>*r*(1+R), r*R, l-1, R, n ) ICrystal( center+<0,-1,0 >*r*(1+R), r*R, l-1, R, n ) #end object { Icosahedron scale r translate center /*pigment { color rgb center*3/8+.5 }*/ } #end #declare c = 1; #macro CCrystal(center,r,l,R,n) #if (n = 0) #local q = 1; #while (q < l) #declare n = n + pow(8,q); #local q = q + 1; #end #end #if (l > 0) #render concat(str(c,8,0),"/",str(n,8,0),"\r") #declare c=c+1; CCrystal( center+< 0.577350, 0.577350, 0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+< 0.577350, 0.577350,-0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+< 0.577350,-0.577350, 0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+< 0.577350,-0.577350,-0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+<-0.577350, 0.577350, 0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+<-0.577350, 0.577350,-0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+<-0.577350,-0.577350, 0.577350>*r*(1+R), r*R, l-1, R, n ) CCrystal( center+<-0.577350,-0.577350,-0.577350>*r*(1+R), r*R, l-1, R, n ) #end object { Cube scale r translate center /*pigment { color rgb center*3/8+.5 }*/ } #end #declare c = 1; #macro OCrystal(center,r,l,R,n) #if (n = 0) #local q = 1; #while (q < l) #declare n = n + pow(6,q); #local q = q + 1; #end #end #if (l > 0) #render concat(str(c,8,0),"/",str(n,8,0),"\r") #declare c=c+1; OCrystal( center+<1,0,0>*r*(1+R), r*R, l-1, R, n ) OCrystal( center+<0,1,0>*r*(1+R), r*R, l-1, R, n ) OCrystal( center+<0,0,1>*r*(1+R), r*R, l-1, R, n ) OCrystal( center+<-1,0,0>*r*(1+R), r*R, l-1, R, n ) OCrystal( center+<0,-1,0>*r*(1+R), r*R, l-1, R, n ) OCrystal( center+<0,0,-1>*r*(1+R), r*R, l-1, R, n ) #end object { Octahedron scale r translate center /*pigment { color rgb center*3/8+.5 }*/ } #end #declare c = 1; #macro TCrystal(center,r,l,R,n) #if (n = 0) #local q = 1; #while (q < l) #declare n = n + pow(4,q); #local q = q + 1; #end #end #if (l > 0) #render concat(str(c,8,0),"/",str(n,8,0),"\r") #declare c=c+1; TCrystal( center+<0,1,0 >*r*1.3333333, r*R, l-1, R, n ) TCrystal( center+<0,-.333333,.942809 >*r*1.3333333, r*R, l-1, R, n ) TCrystal( center+<.816497,-.333333,-.471405 >*r*1.3333333, r*R, l-1, R, n ) TCrystal( center+<-.816497,-.333333,-.471405>*r*1.3333333, r*R, l-1, R, n ) #end object { Tetrahedron scale r translate center /*pigment { color rgb center*3/8+.5 }*/ } #end union { TCrystal(<0,0,0>,1.5,5,.5,0) pigment { average pigment_map { //RGB = XYZ (well, sort of) [ 1.0 gradient x color_map { [0.0 color Black] [1.0 color Red*3] } translate -.5*x scale 8 ] [ 1.0 gradient y color_map { [0.0 color Black] [1.0 color Green*3] } translate -.5*y scale 8 ] [ 1.0 gradient z color_map { [0.0 color Black] [1.0 color Blue*3] } translate -.5*z scale 8 ] } } }