// Last edited on 2013-12-11 11:19:05 by stolfilocal // Processed by remove-cam-lights background{ color rgb < 0.0, 0.20, 0.42 > } #declare tx_polvo = texture { pigment { color rgb < 0.64, 0.22, 0.33 > } finish { diffuse 0.8 ambient 0.1 specular 0.0 roughness 0.05 } } #declare num_bolas = 20; #declare bola = sphere { < 0, 0, 0 > 1 texture { tx_polvo } } #macro interpolar(p0, p1, tt) ((1-tt)*p0+tt*p1) #end #macro bezier(p0, dp0, p3, dp3, tt) #local p01=interpolar(p0, p0+dp0, tt); #local p12=interpolar(p0+dp0, p3-dp3, tt); #local p23=interpolar(p3-dp3, p3, tt); #local p012=interpolar(p01, p12, tt); #local p123=interpolar(p12, p23, tt); interpolar(p012, p123, tt) #end #macro tentaculo(base, d_base, meio, d_meio, ponta, d_ponta, raio_base, raio_ponta) union { #local tt=0; #while (tt<=1) object { bola scale bezier(raio_base, 0, raio_ponta, 0, tt/2) translate bezier(base, d_base, meio, d_meio, tt) } #local tt=tt+1/(num_bolas-1); #end #local tt=0; #while (tt<=1) object { bola scale bezier(raio_base, 0, raio_ponta, 0, 0.5+tt/2) translate bezier(meio, d_meio, ponta, d_ponta, tt) } #local tt=tt+1/(num_bolas-1); #end } #end #declare param1=array[5]; #declare param1[0]=<0,1,1>; #declare param1[1]=<0,3,0>; #declare param1[2]=<0,1,+1>; #declare param1[3]=<0,5,0>; #declare param1[4]=<0,1,-1>; #declare param2=array[5]; #declare param2[0]=<0,1,1>; #declare param2[1]=<0,3,0>; #declare param2[2]=<0,1,-1>; #declare param2[3]=<0,5,0>; #declare param2[4]=<0,1,+1>; #declare param0=array[5]; #declare param0[0]=(param1[0]+param2[0])/2; #declare param0[1]=(param1[1]+param2[1])/2; #declare param0[2]=(param1[2]+param2[2])/2; #declare param0[3]=(param1[3]+param2[3])/2; #declare param0[4]=(param1[4]+param2[4])/2; #declare param3=param0; #macro bezier2(p0, p1, p2, p3, tt) #local p01=interpolar(p0, p1, tt); #local p12=interpolar(p1, p2, tt); #local p23=interpolar(p2, p3, tt); #local p012=interpolar(p01, p12, tt); #local p123=interpolar(p12, p23, tt); interpolar(p012, p123, tt); #end #macro tentaculo_animado() #local i = 0; #local param=array[5]; #while (i < 5) #local param[i]=bezier2(param0[i],param1[i],param2[i],param3[i],clock); #local i = i + 1; #end object{ tentaculo(<0,0,0>,param[0],param[1],param[2],param[3],param[4],pi/8,pi/16)} #end #macro polvo(num_tentaculos, modelo) union { object { tentaculo(< 0, 0, 0 >, < 0, 0, 0.1 >, < 0, 0, 0.2 >, < 0, 0, 0.5 >, < 0, 0, 1.2 >, < 0, 0, 0.1 >, 5/num_tentaculos, 7/num_tentaculos) } #local i = 1; #while (i <= num_tentaculos) object { tentaculo_animado() translate < 0, 1, 0 > rotate < 0, 0, i * 360 / num_tentaculos > } #local i = i + 1; #end } #end #declare pos_polvo = < 0, 0, 0 >; union{ object { polvo(8, 15654) translate pos_polvo } } #include "camlight.inc" #declare centro_cena = pos_polvo; #declare raio_cena = 8; #declare dir_camera = < 0.5, -1, 0.3 >; #declare dist_camera = 100.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)