//Tp06 by Carlos Robson // ====================================================================== #include "pontos.inc" background{ color rgb < 0.75, 0.80, 0.85 > } #declare Yellow = rgb<255, 255, 0>; #declare Black = rgb < 0.4, 0.4, 0.4 >; #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 esfera = sphere { < 0, 0, 0>, 0.25 // Near lower left corner texture{ tx_plastico } } // ====================================================================== // DESCRIÇÃO DA CENA #include "eixos.inc" object{ eixos(3.00) } //Função que interpola 2 pontos(to,vo) e (t1,v1) decolvendo a coordenada vv a partir de um tt #macro interpola(to, vo, t1, v1, tt ) #local r = (tt-to)/(t1-to); #local s = 1-r; #local vv= s*vo+r*v1; vv #end // #macro arcobezier(to, t1, a, b, c, d, tt ) #local ab = interpola(to, a, t1, b, tt ); #local bc = interpola(to, b, t1, c, tt ); #local cd = interpola(to, c, t1, d, tt ); #local abc = interpola(to, ab, t1, bc, tt ); #local bcd = interpola(to, bc, t1, cd, tt ); #local abcd = interpola(to, abc, t1, bcd, tt ); abcd #end // N = num de lados, PO = Matriz 1, QO = segunda matriz, CO = parametro inicial para a matriz 1 // CI parametro final referente a matriz2 #macro interpolamatriz(PO, QO, N, CO, CI, cc, R) #local i = 0; #while(i < N) #local k = 0; #while(k<3) #declare R[i][k] = interpola(CO,PO[i][k], CI, QO[i][k], cc ); #local k = k+1; #end #local i = i+1; #end #end #macro arco(a0, a1, a2, a3, t0, t1, n) union{ #declare passo = 1/n; #declare j = t0; #while (j <= t1) object { esfera translate arcobezier(t0,t1, a0, a1, a2, a3, j)} #declare j=j+passo; #end } #end //Po = matrix, n = num de arcos, m = num de bolas por arco #macro noh(Po, n, m) union{ #declare lado = m/n; #local i = 0; #while(i < n) object {arco (Po[i][0], Po[i][1], Po[i][2], Po[i][3], i*lado, (i+1)*lado, m) } #local i = i+1; #end } #end //Suaviza 2 junções #macro suaviza(Po, i) #local j = mod(i+1, 4); #local vv = (Po[j][1]-Po[i][2])/2; #declare Po[i][2]= Po[i][3]-vv; #declare Po[j][1]= Po[j][0]+vv; #end //Po= matriz, n numero de arcos #macro suavizamatriz(Po, n) #local i = 0; #while(i < n ) suaviza(Po, i) #local i = i+1; #end #end #declare nk= 6; #declare na = 4; #declare tk = array[nk]; #declare tk[0]= 0.1667; #declare tk[1]= 0.3334; #declare tk[2]= 0.5001; #declare tk[3]= 0.6668; #declare tk[4]= 0.833; #declare tk[5]= 1.0; //Q0 = quadro 0 #macro interpolaAnima(PO N, Q0, Q1, cc, R) #local i = 0; #while(i < N) #local k = 0; #while(k<3) #declare R[i][k] = interpola(Q0,PO[Q0][i][k], Q1, PO[Q1][i][k], cc ); #local k = k+1; #end #local i = i+1; #end #end #macro busca_tempo(clk, nk, tk) #local res = 0; #for(k, 0, nk-2) #if((clk >= tk[k]) & (clk < tk[k+1])) #local res = k; #end #end res #end #macro makegif(P, clk, R) #local k = 0; #local k = busca_tempo(clk, nk, tk); interpolaAnima(P, 4, k, k+1, clk, R) object{noh(R, na, 50)} #end makegif(P, clock, R) #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 7.0; #declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)