// Last edited on 2013-12-11 11:24:12 by stolfilocal // Processed by remove-cam-lights background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_espelho = texture{ pigment{ color rgb < 1.00, 0.85, 0.30 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } #declare tx_vidro = texture{ pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } #macro interpola2(p0, p1, tt) ((1-tt)*p0 + tt*p1) #end #macro interpola4(P0,P1,P2,P3,tt) #local P01 = interpola2(P0,P1,tt); #local P12 = interpola2(P1,P2,tt); #local P23 = interpola2(P2,P3,tt); #local P012 = interpola2(P01,P12,tt); #local P123 = interpola2(P12,P23,tt); #local P0123 = interpola2(P012,P123,tt); P0123 #end #declare ptent1 = array[4] {<0,0,0>,<1,1,1>,<2,2,-1>,<3,3,0.5>} #declare t1c1 = array[3] {<0.5,0.5,0>,<1,1,0.5>,<1.5,1.5,0.5>} #declare t1c2 = array[3] {<2.5,2.5,-0.5>,<3,3,-0.5>,<3.5,3.5,0>} #declare t2c1 = array[3] {<-0.5,0.5,0>,<-1,1,0.5>,<-2,2,0.5>} #declare t2c2 = array[3] {<-2.5,2.5,-0.5>,<-3,3,-0.5>,<-3.5,3.5,0.5>} #declare t3c1 = array[3] {<-0.5,-0.5,0>,<-0.5,-0.5,0.5>,<-1,-1,0.5>} #declare t3c2 = array[3] {<-2.5,-2.5,-0.5>,<-3,-3,-0.5>,<-3.5,-3.5,0>} #declare t1ai = array[18] {0.5,0.5,0,1,1,0.5,1.5,1.5,0.5,2.5,2.5,-0.5,3,3,-0.5,3.5,3.5,0} #declare t1am1 = array[18] {0.5,0.5,0,1,1,0.3,1.5,1.5,0.1,2.5,2.5,-0.1,3,3,-0.3,3.5,3.5,0.5} #declare t1am2 = array[18] {0.5,0.5,0,1,1,-0.3,1.5,1.5,-0.3,2.5,2.5,0.3,3,3,0.3,3.5,3.5,-0.5} #declare t1af = t1ai; #declare nq=1;//num. quadros chave #declare nt=3;//num. tentaculos #declare np=6;//num. param. por tentaculo #declare d = array[nq+1]; //tempo de cada quadro chave #declare q = array[nq+1][nt][np]; //param. de cada tentatuco em cada quadro chave #declare d[0]=0; #declare d[1]=1; #declare q[0][0][0] = <0.5,0.5,0>; #declare q[0][0][1] = <1,1,0.5>; #declare q[0][0][2] = <1.5,1.5,0.5>; #declare q[0][0][3] = <2.5,2.5,-0.5>; #declare q[0][0][4] = <3,3,-0.5>; #declare q[0][0][5] = <3.5,3.5,0>; #declare q[0][1][0] = <0.5,0.5,0>; #declare q[0][1][1] = <1,1,0.5>; #declare q[0][1][2] = <1.5,1.5,0.5>; #declare q[0][1][3] = <2.5,2.5,-0.5>; #declare q[0][1][4] = <3,3,-0.5>; #declare q[0][1][5] = <3.5,3.5,0>; #declare q[0][2][0] = <0.5,0.5,0>; #declare q[0][2][1] = <1,1,0.5>; #declare q[0][2][2] = <1.5,1.5,0.5>; #declare q[0][2][3] = <2.5,2.5,-0.5>; #declare q[0][2][4] = <3,3,-0.5>; #declare q[0][2][5] = <3.5,3.5,0>; #macro copia_quadros(q, is, id) #local lt = 0; #while (lt < nt ) #local lp = 0; #while (lp < np) #declare q[id][lt][lp] = q[is][lt][lp]; #local lp = lp+1; #end #local lt = lt+1; #end #end copia_quadros(q,0,1) #macro polvo_quadro_animado(tempo,N) #local k = 1; #local i = 0; #while (k < nq+1) #if (d[k-1] <= tempo) #if (tempo <= d[k]) #local i = k-1; #end #end #local k = k+1; #end #local tloc = (tempo-d[i])/d[i+1]-d[1]; #local qtempo = array[nt][np]; #local j = 0; #while (j < nt) #local p =0; #while (p < np) #local qtempo[j][p] = interpola2 (q[i][j][p], q[i+1][j][p],tloc); #local p = p+1; #end #local j = j+1; #end polvo_quadro(qtempo,N) #end #macro extrai_quadro(q,i,qi) //copia q[i][0..nt][0..np] para qi[0..nt][0..np] #local lt=0; #while (lt < nt) #local lp = 0; #while ( lp < np) #declare qi[lt][lp] = q[i][lt][lp]; #local lp = lp +1; #end #local lt = lt+1; #end #end #macro extrai_parametros_de_quadro(qi,j,qij) //copia qi[j][0..np] para qij[0..np] #local p=0; #while (p < np) #declare qij[p] = qi[j][p]; #local p = p+1; #end #end #macro polvo_quadro(qi, N) union { #local j=0; #while(j < nt) #local qit = array[np]; extrai_parametros_de_quadro(qi,j,qit) object { tentaculo_vetor(qit,N) rotate <0,0,360*j/nt> } #local j = j+1; #end } #end #macro tentaculo_vetor(vv,N) tentaculo(vv[0],vv[1],vv[2],vv[3],vv[4],vv[5],N) #end #macro curva_raio(P0,P1,P2,P3,R0,R1,R2,R3,N) union { #local i = 0; #while (i <= N ) #local centro = interpola4(P0,P1,P2,P3, i/N); #local raio = interpola4(R0,R1,R2,R3,i/N); object { sphere { centro, raio} texture {tx_plastico }} #local i = i + 1; #end } #end #macro curva(P0,P1,P2,P3,N) union { #local i = 0; #while (i <= N ) object { sphere { interpola4(P0,P1,P2,P3, i/N), 0.02} texture {tx_plastico }} #local i = i + 1; #end } #end #macro tentaculo(P0,P1,P2,Q0,Q1,Q2,N) #local PM = (P2+Q0)/2; union { curva_raio(P0,P1,P2,PM,0.35,0.3,0.2,0.1,N) curva_raio(PM,Q0,Q1,Q2,0.1,0.07,0.05,0.03,N) } #end #macro tentaculo_animado(param0, param1, param2, param3, tempo, N) #local M = 18; #local param = array[M]; #local i=0; #while (i < M) #local param[i] = interpola4(param0[i],param1[i], param2[i], param3[i], tempo); #local i = i+1; #end #local P0 = ; #local P1 = ; #local P2 = ; #local Q0 = ; #local Q1 = ; #local Q2 = ; object { tentaculo(P0,P1,P2,Q0,Q1,Q2,N) } #end #declare bola = sphere { <0,1,1> 0.2 } #include "eixos.inc" union{ object{ eixos(3.00) } object{ chao translate < 0,0,-5 > texture{ tx_xadrez } } object { sphere { <0,0,0> 0.7} texture {tx_plastico} } #local qi = array[nt][np]; extrai_quadro(q,0,qi) polvo_quadro_animado(clock,100) } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 6.0; #declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 16.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)