#include "retalho.inc" // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_tronco = texture{ pigment{ color rgb < 0.85, 0.50, 0.30 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_certo = texture{ pigment{ color rgb < 0.15, 0.40, 0.15 > } finish{ diffuse 0.9 ambient 0.8 } } #declare tx_erro = texture{ pigment{ color rgb < 0.60, 0.1, 0.1 >} finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } //=============================================== // Declaracoes #declare raio = 0.1; #declare rad = 0.1; #declare ponto = sphere { <0,0,0>,raio texture{tx_tronco} } //Macro interpola======================================================== #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); #local v0123 = interpola(t0, v012, t3, v123, tt); v0123 #end //Macro Grafico========================================================== #macro grafico (x0, y0, y1, y2, y3, x3, n) #local q = 0; #local num = (x3-x0)/n; union{ #while (q < n) #local xx = x0 + (q*num); #local yy = interpola4 (x0, y0, y1, y2, y3, x3, xx); object {ponto translate yy} #local q = q+1; #end } #end //======================================================================= #macro ponto_medio (v1, v2) #local p = (v2 + v1)/2; p #end //======================================================================= #macro retalho2 (p11, p12, p13, p14, p21, p22, p23, p24, p31, p32, p33, p34, q21, q22, q23, q24, q31, q32, q33, q34, q41, q42, q43, q44, rad,tx_erro,tx_certo) #local p41 = ponto_medio(p31, q21); #local p42 = ponto_medio(p32, q22); #local p43 = ponto_medio(p33, q23); #local p44 = ponto_medio(p34, q24); union{ retalho(p11, p12, p13, p14, p21, p22, p23, p24, p31, p32, p33, p34, p41, p42, p43, p44, rad,tx_erro,tx_certo ) retalho(p41, p42, p43, p44, q21, q22, q23, q24, q31, q32, q33, q34, q41, q42, q43, q44, rad,tx_tronco,tx_certo) } #end // ====================================================================== // DESCRIÇÃO DA CENA #include "eixos.inc" // Aqui está a cena, finalmente: union{ object { eixos(3.0) } object{retalho2 (<0,1,-3>, <0, 4, 1>, <0, 8, -2>, <0, 12, 2>, <4, 1, 2>, <4, 4, 0> , <4, 8, -1>, <4, 12, 2>, <5, 1, 3>, <6, 4, 2>, <5, 8, -3>, <4, 12, 3>, <8, 1, -2>, <8, 4, 1>, <8, 8, -1>, <8, 12, 4>, <9, 1, -2>, <9, 4, 1>, <9, 8, -1>, <9, 12, 4>, <10, 1, -2>, <10, 4, 1>, <10, 8, -1>, <10, 12, 4>, rad,tx_erro,tx_certo)} //object {grafico (0, 3, 5, -4, 10, 15, 20)} union{ object {grafico (0, ponto_medio(<3, 3, 6>, <4,-5,6>), <4,-5,6>, <-2, 0, 1>, ponto_medio(<-2, 0, 1>, <3, -2, 0>), 5, 1000)} object {grafico (5, ponto_medio(<-2, 0, 1>, <3, -2, 0>), <3, -2, 0>, <5, 1, -4>, ponto_medio(<5, 1, -4>, <-4, 1, 4>), 10, 1000)} object {grafico (10, ponto_medio(<5, 1, -4>, <-4, 1, 4>), <-4, 1, 4>, <1, 0, 8>, ponto_medio(<1, 0, 8>, <4, 1, 3>), 15, 1000)} object {grafico (15, ponto_medio(<1, 0, 8>, <4, 1, 3>), <4, 1, 3>, <3, 3, 6>, ponto_medio(<3, 3, 6>, <4,-5,6>), 20, 1000)} translate -3*x} } #include "camlight.inc" #declare centro_cena = < 0.00, 2.00, 0.00 >; #declare raio_cena = 20.0; #declare dir_camera = < 0.0, 5.0, 10.00 >; #declare dist_camera = 30.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)