// SHADOW / Cocoon '01.10 // By Tsutomu HIGO E-mail: nj2t-hg@asahi-net.or.jp #version 3.1; global_settings { max_trace_level 6 assumed_gamma 2.2 } camera { location <-300, 100, 50> angle 16 look_at <0, 1, 0> } light_source { <0,0,0> color rgb <1,1,1> } #declare R1 = seed(23); #declare Nxm = 30; #declare Xp = array[Nxm] #declare Yp = array[Nxm] #declare Zp = array[Nxm] #declare Xr = array[Nxm] #declare Yr = array[Nxm] #declare X1 = array[Nxm] #declare Y1 = array[Nxm] #declare Z1 = array[Nxm] #declare X0 = array[Nxm] #declare Y0 = array[Nxm] #declare Z0 = array[Nxm] #macro Henkan(Ds, Rs, Xi, Yi, Zi, Xo, Yo, Zo) #if(Ds = 2*int(Ds/2)) #declare Xo = pow(Rs*Rs-pow(Yi-Rs,2),0.5)*cos(Zi/6/pi); #declare Yo = Yi; #declare Zo = pow(Rs*Rs-pow(Yi-Rs,2),0.5)*sin(Zi/6/pi); #else #declare Xo = pow(Rs*Rs-pow(Yi-Rs,2),0.5)*cos(-Zi/6/pi); #declare Yo = 2*Rs-Yi; #declare Zo = pow(Rs*Rs-pow(Yi-Rs,2),0.5)*sin(-Zi/6/pi); #end #end #declare Nxm = 20; #declare Ntm = 56; #declare Nc =-2; #while (Nc < 3) #declare Nx =0; #while (Nx < Nxm) #declare Xp[Nx] = 0; #declare Yp[Nx] = 0; #declare Zp[Nx] = 24*Nc; #declare Xr[Nx] = 30*(rand(R1)-0.5); #declare Yr[Nx] = 0; #declare X1[Nx] = 0; #declare Y1[Nx] = 1; #declare Z1[Nx] = 0; #declare X0[Nx] = 0; #declare Y0[Nx] = 0; #declare Z0[Nx] = 0; #declare Nx = Nx+1; #end #declare Nt = 0; #while (Nt < Ntm) #declare R = 0.5*(1-Nt/Ntm)+0.1; #declare Nx = 0; #while (Nx < Nxm) #declare Xr[Nx] = Xr[Nx]+20*(rand(R1)-0.5); #if(Nt > 0) union { cylinder { , , R } sphere { R } pigment { color rgb <1, 1, 1> } finish { ambient 0 phong 0.8 reflection 1 } translate y*-26 rotate x*180 rotate <-60, 30, 0> no_shadow } #end Henkan(2, 26, Xp[Nx], Yp[Nx], Zp[Nx], X0[Nx], Y0[Nx], Z0[Nx]) #declare Xp[Nx] = Xp[Nx]+sin(Xr[Nx]*pi/180)*sin(Yr[Nx]*pi/180); #declare Yp[Nx] = Yp[Nx]+cos(Xr[Nx]*pi/180); #declare Zp[Nx] = Zp[Nx]+sin(Xr[Nx]*pi/180)*cos(Yr[Nx]*pi/180); Henkan(2, 26, Xp[Nx], Yp[Nx], Zp[Nx], X1[Nx], Y1[Nx], Z1[Nx]) #declare Nx = Nx+1; #end #declare Nt = Nt+1; #end #declare Nc = Nc+1; #end #declare Ntm = 62; #declare Nxm = 30; #declare Nc = 0; #while (Nc < 4) #declare Nx = 0; #while (Nx < Nxm) #declare Xp[Nx] = 0; #declare Yp[Nx] = 0; #declare Zp[Nx] = 30*Nc; #declare Xr[Nx] = 30*(rand(R1)-0.5); #declare Yr[Nx] = 0; #declare X1[Nx] = 0; #declare Y1[Nx] = 1; #declare Z1[Nx] = 0; #declare X0[Nx] = 0; #declare Y0[Nx] = 0; #declare Z0[Nx] = 0; #declare Nx = Nx+1; #end #declare Nt = 0; #while (Nt < Ntm) #declare R = 0.5*(1-Nt/Ntm)+0.1; #declare Nx = 0; #while (Nx < Nxm) #declare Xr[Nx] = Xr[Nx]+12*(rand(R1)-0.45); #if(Nt > 0) union { cylinder { , , R } sphere { R } pigment { color rgb <0, 0.5, 1> } finish { ambient 0.2 phong 1 reflection 1 } translate y*-30*1.5 rotate y*60 rotate <-60, 30, 0> no_shadow } #end Henkan(Nc, 30, Xp[Nx], Yp[Nx], Zp[Nx], X0[Nx], Y0[Nx], Z0[Nx]) #declare Xp[Nx] = Xp[Nx]+sin(Xr[Nx]*pi/180)*sin(Yr[Nx]*pi/180); #declare Yp[Nx] = Yp[Nx]+cos(Xr[Nx]*pi/180); #declare Zp[Nx] = Zp[Nx]+sin(Xr[Nx]*pi/180)*cos(Yr[Nx]*pi/180); Henkan(Nc, 30, Xp[Nx], Yp[Nx], Zp[Nx], X1[Nx], Y1[Nx], Z1[Nx]) #declare Nx = Nx+1; #end #declare Nt = Nt+1; #end #declare Nc = Nc+1; #end background { color rgb <0, 0, 0.2> } sphere { <0, 0, 0> 47 pigment {color rgbt <0, 0, 0, 1>} finish { ambient 0 phong 1 reflection 0 } no_shadow }