// Last edited on 2013-12-11 11:26:17 by stolfilocal // Processed by remove-cam-lights background{ color rgb < 0.08, 0.03, 0.02 > } #declare tx_polvo = texture { pigment { color rgb < 0.35, 0.20, 0.12 > } finish { diffuse 0.8 ambient 0.1 specular 0.0 roughness 0.05 } } #declare tx_olho = texture { pigment { color rgb < 0.00, 0.00, 0.00 > } finish { diffuse 0.8 ambient 0.1 specular 0.0 roughness 0.05 } } #declare num_bolas = 40; #declare nq = 6; #declare nt = 8; #declare np = 5; #declare d = array[nq+1]; #declare q = array[nq+1][nt][np*2]; #macro preencher_q() #local i = 0; #local aleatorio = seed(278346); #local total = 0; #while (i < nq - 1) #declare total = total + 1 + rand(aleatorio); #declare d[i] = total; #local j = 0; #while (j < nt) #declare q[i][j][0] = < 0, 1, rand(aleatorio) * 2 - 1 >; #declare q[i][j][1] = < 0, 1 + rand(aleatorio) * 2, 0 >; #declare q[i][j][2] = < 0, 1, rand(aleatorio) * 2 - 1 >; #declare q[i][j][3] = < 0, 5, - rand(aleatorio) >; #declare q[i][j][4] = < 0, 1, rand(aleatorio) * 2 - 1 >; #local j = j + 1; #end #local i = i + 1; #end #declare d[nq-1] = 1; #local j = 0; #while (j < nt) #declare q[nq-1][j][0] = q[0][j][0]; #declare q[nq-1][j][1] = q[0][j][1]; #declare q[nq-1][j][2] = q[0][j][2]; #declare q[nq-1][j][3] = q[0][j][3]; #declare q[nq-1][j][4] = q[0][j][4]; #local j = j + 1; #end #local i = nq - 2; #while (i >= 0) #declare d[i] = (d[i] - d[0]) / (total); #if (i > 0) #local j = 0; #while (j < nt) #declare q[i][j][5] = (q[i+1][j][0] - q[i-1][j][0]) / 2; #declare q[i][j][6] = (q[i+1][j][1] - q[i-1][j][1]) / 2; #declare q[i][j][7] = (q[i+1][j][2] - q[i-1][j][2]) / 2; #declare q[i][j][8] = (q[i+1][j][3] - q[i-1][j][3]) / 2; #declare q[i][j][9] = (q[i+1][j][4] - q[i-1][j][4]) / 2; #local j = j + 1; #end #end #local i = i - 1; #end #local j = 0; #while (j < nt) #declare q[0][j][5] = (q[1][j][0] - q[nq-2][j][0]) / 4; #declare q[0][j][6] = (q[1][j][1] - q[nq-2][j][1]) / 4; #declare q[0][j][7] = (q[1][j][2] - q[nq-2][j][2]) / 4; #declare q[0][j][8] = (q[1][j][3] - q[nq-2][j][3]) / 4; #declare q[0][j][9] = (q[1][j][4] - q[nq-2][j][4]) / 4; #declare q[nq-1][j][5] = q[0][j][5]; #declare q[nq-1][j][6] = q[0][j][5]; #declare q[nq-1][j][7] = q[0][j][5]; #declare q[nq-1][j][8] = q[0][j][5]; #declare q[nq-1][j][9] = q[0][j][5]; #local j = j + 1; #end #end preencher_q() #declare bola = sphere { < 0, 0, 0 > 1 texture { tx_polvo } } #declare olho = sphere { < 0, 0, 0 > 1 texture { tx_olho } } #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 #macro tentaculo_vetor(j, raio_base, raio_ponta) #local i = 1; #while (clock > d[i]) #local i = i + 1; #end #local tempo = (clock - d[i-1]) / (d[i] - d[i-1]); tentaculo(< 0, 0, 0 >, bezier(q[i-1][j][0], q[i-1][j][5], q[i][j][0], q[i][j][5], tempo), bezier(q[i-1][j][1], q[i-1][j][6], q[i][j][1], q[i][j][6], tempo), bezier(q[i-1][j][2], q[i-1][j][7], q[i][j][2], q[i][j][7], tempo), bezier(q[i-1][j][3], q[i-1][j][8], q[i][j][3], q[i][j][8], tempo), bezier(q[i-1][j][4], q[i-1][j][9], q[i][j][4], q[i][j][9], tempo), raio_base, raio_ponta) #end #macro polvo() 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/nt, 7/nt) } #local i = 1; #while (i <= nt) object { tentaculo_vetor(i-1, pi/(nt), pi/(2*nt)) translate < 0, 0.8, 0 > rotate < 0, 0, i * 360 / nt > } #local i = i + 1; #end object { olho scale < 0.1, 0.1, 0.1 > translate < -3/nt, -5.3/nt, 0.7 > } object { olho scale < 0.1, 0.1, 0.1 > translate < 3/nt, -5.3/nt, 0.7 > } } #end #declare pos_polvo = < 0, 0, 0 >; union{ object { polvo() translate pos_polvo } } #include "camlight.inc" #declare centro_cena = pos_polvo; #declare raio_cena = 8; #declare dir_camera = < 0.2, -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)