// Last edited on DATE TIME by USER // Processed by remove-cam-lights background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_blue = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_green = texture{ pigment{ color rgb < 0.10, 1.00, 0.20 > } finish{ diffuse 0.9 ambient 0.1 } } #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 0.22 } #include "eixos.inc" #include "math.inc" #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 #macro curva(a, r, n) union { #declare i = 0; #while (i <= n) sphere{ Interpola4(a[0], a[1], a[2], a[3], i / n), Interpola4(r[0], r[1], r[2], r[3], i / n) } #declare i = i+1; #end } #end #declare nq = 2; //numero de quadros-chave #declare nt = 3; //numero de tentaculos #declare np = 4; //numero de parametros por tentaculo #declare d = array[nq+1] {0, 0.5, 1}; #declare q = array[nq+1][nt][np] { { {<0,0,0>, <1,-2,0>, <2,2,0>, <3,0,0>}, {<0,0,0>, <1,-2,0>, <2,2,0>, <3,0,0>}, {<0,0,0>, <1,0,-2>, <2,0,2>, <3,0,0>} }, { {<0,0,0>, <1,0,-2>, <2,0,2>, <3,0,0>} {<0,0,0>, <1,2,0>, <2,-2,0>, <3,0,0>}, {<0,0,0>, <1,0,2>, <2,0,-2>, <3,0,0>} }, { {<0,0,0>, <1,2,-2>, <2,-2,2>, <3,0,0>} {<0,0,0>, <1,2,2>, <2,-2,2>, <3,0,0>}, {<0,0,0>, <1,1,0>, <2,1,1>, <3,0,0>} } }; #declare r = array[np] {0.1, 0.5, 0.3, 0.01}; #macro extrai_quadro(q, i, qi) #local tt = 0; #while (tt < nt) #local p = 0; #while (p < np) #declare qi[tt][p] = q[i][tt][p]; #local p = p+1; #end #local tt = tt+1; #end #end #macro extrai_tentaculo(qi, tt, qit) #local p = 0; #while (p < np) #declare qit[p] = qi[tt][p]; #local p = p+1; #end #end #declare n_points = 128; #macro tentaculo(a, r, tx) object{ curva(a, r, n_points) texture{ tx } } #end #macro polvo_quadro(qi) union { #local tt = 0; #while (tt < nt) #local qit = array[np] {<0,0,0>, <1,-2,0>, <2,2,0>, <3,0,0>}; extrai_tentaculo(qi, tt, qit) object{ tentaculo(qit, r, tx_green) rotate<0,0,(360/nt)*tt> } #local tt = tt+1; #end } #end #macro polvo_animado(tempo) #local qtempo = array[nt][np] { {<0,0,0>, <0,0,0>, <0,0,0>, <0,0,0>}, {<0,0,0>, <0,0,0>, <0,0,0>, <0,0,0>}, {<0,0,0>, <0,0,0>, <0,0,0>, <0,0,0>} } #local i = 0; #while (clock > d[i+1]) //linear search #local i = i+1; #end #local tloc = (tempo-d[i]) / (d[i+1]-d[i]); #local tt = 0; #while (tt < nt) #local p = 0; #while (p < np) #declare qtempo[tt][p] = Interpola2(q[i][tt][p], q[i+1][tt][p], tloc); #local p = p+1; #end #local tt = tt+1; #end object{ polvo_quadro(qtempo) } #end union{ object{ eixos(3.00) } object{ polvo_animado(clock) } } #include "camlight.inc" #declare centro_cena = < 1.00, -0.80, 1.00 >; #declare raio_cena = 7; #declare dir_camera = < 4.00, -1.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)