// CORES E TEXTURAS 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 } // DESCRIÇÃO DA CENA #declare pto = array[4][4]; #declare pto[0][0] = 1; #declare pto[0][1] = -2; #declare pto[0][2] = 1; #declare pto[0][3] = 1; #declare pto[1][0] = 1; #declare pto[1][1] = -3; #declare pto[1][2] = 3; #declare pto[1][3] = 1; #declare pto[2][0] = 1; #declare pto[2][1] = -6; #declare pto[2][2] = 2; #declare pto[2][3] = 1; #declare pto[3][0] = 1; #declare pto[3][1] = -2; #declare pto[3][2] = 1; #declare pto[3][3] = 1; // Partes da cena: #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{ <00, xx, 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 medio = (pto[i][2] + pto[i+1][1]) / 2; object {grafico(x0 + (i * espaco),pto[i][0], pto[i][1], pto[i][2], medio, x0 + (i + 1) * espaco, N)} #else #if (i = 3) #local aux = (pto[i-1][2] + pto[i][1]) / 2; object{ grafico(x0 + (i * espaco),aux,pto[i][1],pto[i][2],pto[i][3], x0 + (i + 1) * espaco, N)} #else #local aux = (pto[i-1][2] + pto[i][1]) / 2; #local medio = (pto[i][2] + pto[i+1][1]) / 2; object{ grafico(x0 + (i * espaco),aux,pto[i][1],pto[i][2],medio, x0 + (i + 1) * espaco, N)} #end #end #local i = i + 1; #end } #end #include "eixos.inc" // Aqui está a cena, finalmente: union{ object{ eixos(3.00) } object{ chao translate < 0,0,-5 > texture{ tx_xadrez } } object{concatena4(0, 10, 100)} // object{ grafico(0, 0, -2, 2, 0, 4, 10) } } #include "camlight.inc" #declare centro_cena = < 0.00, 6.00, 2.00 >; #declare raio_cena = 10.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)