// Last edited on DATE TIME by USER // 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_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_blueglass = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > filter 0.95} finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_gold = texture{ pigment{ color rgb < 1.00, 1.00, 0.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_yellowglass = texture{ pigment{ color rgb < 1.00, 1.00, 0.00 > filter 0.95} finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare tx_red = texture{ pigment{ color rgb < 1.00, 0.00, 0.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_redglass = texture{ pigment{ color rgb < 1.00, 0.00, 0.00 > filter 0.95} finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } #declare pto = array[4][4]; #declare pto[0][0] = <0,0,0>; #declare pto[0][1] = <1,2,2>; #declare pto[0][2] = <-3,2,2>; #declare pto[0][3] = <2,0,1>; #declare pto[1][0] = <2,-2,2>; #declare pto[1][1] = <2,-2,2>; #declare pto[1][2] = <1,2,-2>; #declare pto[1][3] = <1,2,3>; #declare pto[2][0] = <1,1,1>; #declare pto[2][1] = <3,2,2>; #declare pto[2][2] = <1,2,5>; #declare pto[2][3] = <1,5,4>; #declare pto[3][0] = <2,2,2>; #declare pto[3][1] = <3,7,2>; #declare pto[3][2] = <5,3,2>; #declare pto[3][3] = <0,0,0>; #declare ptor1 = array[4][4]; #declare ptor1[0][0] = <0,0,0>; #declare ptor1[0][1] = <0,1,2>; #declare ptor1[0][2] = <0,2,2>; #declare ptor1[0][3] = <0,3,0>; #declare ptor1[1][0] = <1,0,0>; #declare ptor1[1][1] = <1,1,2>; #declare ptor1[1][2] = <1,2,2>; #declare ptor1[1][3] = <1,3,0>; #declare ptor1[2][0] = <2,0,0>; #declare ptor1[2][1] = <2,1,2>; #declare ptor1[2][2] = <2,2,2>; #declare ptor1[2][3] = <2,3,0>; #declare ptor1[3][0] = <3,0,0>; #declare ptor1[3][1] = <3,1,2>; #declare ptor1[3][2] = <3,2,2>; #declare ptor1[3][3] = <3,3,0>; #declare ptor2 = array[4][4]; #declare ptor2[0][0] = <0,4,-1>; #declare ptor2[0][1] = <0,5,-4>; #declare ptor2[0][2] = <0,7,-1>; #declare ptor2[0][3] = <0,6,-4>; #declare ptor2[1][0] = <1,4,-1>; #declare ptor2[1][1] = <1,5,-4>; #declare ptor2[1][2] = <1,7,-1>; #declare ptor2[1][3] = <1,6,-4>; #declare ptor2[2][0] = <2,4,-1>; #declare ptor2[2][1] = <2,5,-4>; #declare ptor2[2][2] = <2,7,-1>; #declare ptor2[2][3] = <2,6,-4>; #declare ptor2[3][0] = <3,4,-1>; #declare ptor2[3][1] = <3,5,-4>; #declare ptor2[3][2] = <3,7,-1>; #declare ptor2[3][3] = <3,6,-4>; #declare ptor3 = array[4][4]; #declare ptor3[0][0] = <0,8,-1>; #declare ptor3[0][1] = <0,9,-4>; #declare ptor3[0][2] = <0,11,-1>; #declare ptor3[0][3] = <0,10,-4>; #declare ptor3[1][0] = <1,8,-1>; #declare ptor3[1][1] = <1,9,-4>; #declare ptor3[1][2] = <1,11,-1>; #declare ptor3[1][3] = <1,10,-4>; #declare ptor3[2][0] = <2,8,-1>; #declare ptor3[2][1] = <2,9,-4>; #declare ptor3[2][2] = <2,11,-1>; #declare ptor3[2][3] = <2,10,-4>; #declare ptor3[3][0] = <3,8,-1>; #declare ptor3[3][1] = <3,9,-4>; #declare ptor3[3][2] = <3,11,-1>; #declare ptor3[3][3] = <3,10,-4>; #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } #macro interpola(f0, v0, f1, v1, f) #local ss = (f - f0)/(f1 - f0); #local rr = 1 - ss; (rr * v0 + ss * v1) #end #macro interpola4(t0, v0, v1, v2, v3, t3, tt) #local v01 = interpola(t0,v0,t3,v1,tt); #local v12 = interpola(t0,v1,t3,v2,tt); #local v23 = interpola(t0,v2,t3,v3,tt); #local v012 = interpola(t0,v01,t3,v12,tt); #local v123 = interpola(t0,v12,t3,v23,tt); interpola(t0,v012,t3,v123,tt); #end #macro grafico(x0, y0, y1, y2, y3, x3, N) #local delta = (x3 - x0)/N; #local xx = x0; #local yy = 0; union{ #while(xx < x3) #local yy = interpola4(x0, y0, y1, y2, y3, x3, xx); sphere{ yy 0.10 texture{ tx_plastico } } #local xx = xx + delta; #end } #end #macro concatena4(x0, x3, N) #local espaco = (x3 - x0)/ 4; #local i = 0; union{ #while(i < 4) #if (i = 0) #local aux = (pto[3][2] + pto[i][1]) / 2; #local medio = (pto[i][2] + pto[i+1][1]) / 2; #else #if (i = 3) #local aux = (pto[i-1][2] + pto[i][1]) / 2; #local medio = (pto[i][2] + pto[0][1]) / 2; #else #local aux = (pto[i-1][2] + pto[i][1]) / 2; #local medio = (pto[i][2] + pto[i+1][1]) / 2; #end #end object{ grafico(x0 + (i * espaco),aux,pto[i][1],pto[i][2],medio, x0 + (i + 1) * espaco, N)} #local i = i + 1; #end } #end #macro bolinha_graf(x0, y0, y1, y2, y3, x3, N, frac) #local yy = interpola4(x0, y0, y1, y2, y3, x3, frac); sphere{ yy 0.20 texture{ tx_red } } #end #macro bolinha(x0, x3, N, frac) #local espaco = (x3 - x0)/ 4; union{ #if (frac <= 0.25) #local aux = (pto[3][2] + pto[0][1]) / 2; #local medio = (pto[0][2] + pto[1][1]) / 2; object{ bolinha_graf(x0 + (0 * espaco),aux,pto[0][1],pto[0][2],medio, x0 + (0 + 1) * espaco, N, frac)} #end #if (frac > 0.25 & frac <= 0.5) #local aux = (pto[0][2] + pto[1][1]) / 2; #local medio = (pto[1][2] + pto[2][1]) / 2; object{ bolinha_graf(x0 + (1 * espaco),aux,pto[1][1],pto[1][2],medio, x0 + (1 + 1) * espaco, N, frac)} #end #if (frac > 0.5 & frac <= 0.75) #local aux = (pto[1][2] + pto[2][1]) / 2; #local medio = (pto[2][2] + pto[3][1]) / 2; object{ bolinha_graf(x0 + (2 * espaco),aux,pto[2][1],pto[2][2],medio, x0 + (2 + 1) * espaco, N, frac)} #end #if (frac > 0.75) #local aux = (pto[2][2] + pto[3][1]) / 2; #local medio = (pto[3][2] + pto[0][1]) / 2; object{ bolinha_graf(x0 + (3 * espaco),aux,pto[3][1],pto[3][2],medio, x0 + (3 + 1) * espaco, N, frac)} #end } #end #macro concatena2(tam) #local p1 = (ptor1[0][2] + ptor2[0][1])/2; #local p2 = (ptor1[1][2] + ptor2[1][1])/2; #local p3 = (ptor1[2][2] + ptor2[2][1])/2; #local p4 = (ptor1[3][2] + ptor2[3][1])/2; #local p5 = (ptor2[0][2] + ptor3[0][1])/2; #local p6 = (ptor2[1][2] + ptor3[1][1])/2; #local p7 = (ptor2[2][2] + ptor3[2][1])/2; #local p8 = (ptor2[3][2] + ptor3[3][1])/2; union{ object{retalho(ptor1[0][0],ptor1[0][1],ptor1[0][2],p1,ptor1[1][0],ptor1[1][1],ptor1[1][2],p2,ptor1[2][0],ptor1[2][1],ptor1[2][2],p3,ptor1[3][0],ptor1[3][1],ptor1[3][2],p4,tam,tx_blueglass,tx_plastico)} object{retalho(p1,ptor2[0][1],ptor2[0][2],p5, p2, ptor2[1][1],ptor2[1][2],p6, p3,ptor2[2][1],ptor2[2][2],p7, p4, ptor2[3][1],ptor2[3][2],p8,tam,tx_yellowglass,tx_gold)} object{retalho(p5,ptor3[0][1],ptor3[0][2],ptor3[0][3], p6, ptor3[1][1],ptor3[1][2],ptor3[1][3], p7,ptor3[2][1],ptor3[2][2],ptor3[2][3], p8, ptor3[3][1],ptor3[3][2],ptor3[3][3],tam,tx_redglass,tx_red)} } #end #include "eixos.inc" #include "retalho.inc" union{ object{ chao translate < 0,0,-5 > texture{ tx_xadrez } } object{concatena4(0, 20, 200) translate<0,6,3>} object{bolinha(0, 1, 200, clock) translate<0,6,3>} object{concatena2(0.01)} } #include "camlight.inc" #declare centro_cena = < 0.00, 6.00, 1.00 >; #declare raio_cena = 13.0; #declare dir_camera = < 14.00, 0.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)