// ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #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 tx_vidro = texture{ pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 } // filter cria o efeito de difracao finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_plastico = texture{ pigment{ color rgb < 1.0, 0.05, 0.10 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_plastico_2 = texture{ pigment{ color rgb < 0.10, 0.80, 0.10 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #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_espelho_red = texture{ pigment{ color rgb < 1.00, 0.2, 0.20 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } // ====================================================================== // DESCRIÇÃO DA CENA #declare chao = box{ <-50,-50,-1>, <+50,+50,0> } #declare golden_sphere = sphere{ <0,0,0>, 0.5 texture{ tx_espelho } } //#declare red_sphere = #declare NQ = 9; #declare NMAX = 12; #declare tempo = array[NQ]; #declare grafico_1 = array[NMAX]; #declare grafico_2 = array[NMAX]; #declare tempo[0] = 0.0; #declare tempo[1] = 0.125; #declare tempo[2] = 0.250; #declare tempo[3] = 0.375; #declare tempo[4] = 0.5; #declare tempo[5] = 0.625; #declare tempo[6] = 0.75; #declare tempo[7] = 0.875; #declare tempo[8] = 1.0; #declare grafico_1[0] = 2; #declare grafico_1[1] = 1.5; #declare grafico_1[2] = 1.2; #declare grafico_1[3] = 1.5; #declare grafico_1[4] = 2; #declare grafico_1[5] = 3; #declare grafico_1[6] = 3.75; #declare grafico_1[7] = 4; #declare grafico_1[8] = 4.1; #declare grafico_1[9] = 4.15; #declare grafico_1[10] = 4.175; #declare grafico_1[11] = 4.18; #declare grafico_2[0] = 2; #declare grafico_2[1] = 1.5; #declare grafico_2[2] = 1.2; #declare grafico_2[3] = 1.5; #declare grafico_2[4] = 2; #declare grafico_2[5] = 3; #declare grafico_2[6] = 3.75; #declare grafico_2[7] = 4; #declare grafico_2[8] = 4.1; #declare grafico_2[9] = 4.15; #declare grafico_2[10] = 4.175; #declare grafico_2[11] = 4.18; // ====================================================================== // MACROS // pontos do grafico #macro red_dots(Y, Z) union{ sphere{ <0,Y,Z>, 0.1 texture{ tx_espelho_red } } } #end #macro interpola(f0, v0, f1, v1, f) #local ss = (f-f0)/(f1-f0); #local rr = 1-ss; (rr*v0 + ss*v1) #end // metodo para lidar com curvas e trajetos: Curvas de Bézier #macro interpola_4(t0, v0, v1, v2, v3, t1, tt) #local v01 = interpola(t0, v0, t1, v1, tt); #local v12 = interpola(t0, v1, t1, v2, tt); #local v23 = interpola(t0, v2, t1, v3, tt); #local v012 = interpola(t0, v01, t1, v12, tt); #local v123 = interpola(t0, v12, t1, v23, tt); #local v0123 = interpola(t0, v012, t1, v123, tt); v0123 #end #macro quadro_anterior(fase) #local k = 0; #while ((k < NQ-1) & (tempo[k+1] < fase)) #local k = k+1; #end k #end // macros utilizando as funcoes de interpolacao #macro primeiro_grafico(cronometro) #local i = quadro_anterior(cronometro); #local S = interpola_4(tempo[i], grafico_1[i], grafico_1[i+1], grafico_1[i+2], grafico_1[i+3] tempo[i+1], cronometro); object{ golden_sphere translate <0,cronometro*9,S> } #end #macro grafico(x0, y0, y1, y2, y3, x3, N) #local i = 0; #while (i<=N) #local X = x0 + (x3-x0)*(i/N); #local S = interpola_4(x0, y0, y1, y2, y3, x3, X); object{ red_dots(X, S) } #local i = i+1; #end #end // ====================================================================== #include "eixos.inc" // Aqui está a cena, finalmente: union{ object{ primeiro_grafico(clock) } // object{ grafico(0, 1, 0, 1, 2, 3, 16) } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 9.0; #declare dir_camera = < 5.00, 7.00, 2.00 >; #declare dist_camera = 35.00; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)