// ============================Variaveis========================================== #declare raio = 0.4; #declare tamanho_terminal = raio*2; #declare raio_terminal = raio / 2; // ============================CORES E TEXTURAS========================================== background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico = texture{ pigment{ color rgb < 0.80, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_espelho = texture{ pigment{ color rgb < 1.51, 0.50, 0.68 > } finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 } } #declare tx_vidro = texture{ pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 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 } // =======================Componentes da Cena============================================== #declare bolinha = sphere{ < 0,0,0 >, 0.60 } #declare bolota = sphere{ < 0,0,0 >, 1.50 } #declare bola = sphere{ < 0.00, 0.00, 0.00 >, raio texture{ tx_plastico } } #declare pino = cylinder{ < -2.00, +2.00, -1.00 >, < +2.00, -2.00, +1.00 >, 0.75 texture{ tx_fosca } } #declare furo = cylinder{ < 0, 0, 0 >, < 0, 3, 0 >, 0.15*raio texture{ tx_vidro } } #declare MyCone = cone { <1, -1, 0>, 1.0 // , center & radius of one end <1, 1, 0>, 0.25 // , center & radius of the other end } #declare caixa = box{<0,0,0>, <3,+3,3> texture {tx_espelho}} #declare caixa2 = box{<0,0,0>, <3,3,3> texture {tx_fosca}} #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } // ============================Macros========================================== #macro interpola1 (tx, t0, v0, t1, v1) #local ss = (tx - t0) / (t1 - t0); #local vv = (1 - ss) * v0 + ss * v1; vv #end #macro teste_interpola_1 (p0, p1, n, raio) union { #declare k = 0; #while (k <= n) #local canto = interpola1(k, 0, p0, n-1, p1); sphere { canto, raio texture { tx_espelho } } #declare k = k + 1; #end } #end #macro interpola3(tprincipal, ta, tb, v0, v1, v2, v3) #local v01 = interpola1(tprincipal, ta, v0, tb, v1); #local v12 = interpola1(tprincipal, ta, v1, tb, v2); #local v23 = interpola1(tprincipal, ta, v2, tb, v3); #local v012 = interpola1(tprincipal, ta, v01, tb, v12); #local v123 = interpola1(tprincipal, ta, v12, tb, v23); #local v0123 = interpola1(tprincipal, ta, v012, tb, v123); v123; #end #macro teste_interpola_3 (p0, p1, p2, p3, n, raio) union { #declare k = 0; #declare ta = 0; #declare tb = n - 1; #while (k <= n) #local canto = interpola3(k, ta, tb, p0, p1, p2, p3); sphere { canto, raio texture {tx_espelho} } #declare k = k + 1; #end } #end #macro interpola3_multi(tempo, pinicio, n, p1, p2, pfim) //Consideração: p1 e p2 - arrays de pontos //definir em que parte da curva estará #local k = int(tempo); //#debug concat("** k=", str(k,0,0), "\n") #if(k=0) #local q0 = pinicio; #local q1 = p1[0]; #local q2 = p2[0]; #local q3 = (p2[0] + p1[1])/2.0; #end #if(k=n) #local q0 = (p2[0] + p1[1])/2.0; #local q1 = p1[k]; #local q2 = p2[k]; #local q3 = pfim; #end #if((k0)) #local q0 = (p2[k-1] + p1[k])/2.0; #local q1 = p1[k]; #local q2 = p2[k]; #local q3 = (p2[k] + p1[k])/2.0; #end #if(k>n) #local k = n; #local q0 = (p2[0] + p1[1])/2.0; #local q1 = p1[k]; #local q2 = p2[k]; #local q3 = pfim; #end //#debug concat("!! k=", str(k,0,0), "\n") #local pt = interpola3(tempo, k, k+1, q0, q1, q2, q3); //#local pt = interpola3(k, ta, tb, p0, p1, p2, p3); //#local pt = <1,2,3>; pt #end #macro teste_interpola3_multi() //#debug concat("** k=oi", "\n") #local n = 3; #local p1 = array[n]; #local pinic = <6,6,6>; #local p1[0] = <0,0,0>; #local p1[1] = <-1,-1,-1>; #local p1[2] = <2,2,2>; #local p2 = array[n]; #local p2[0] = <3,3,3>; #local p2[1] = <-4,-4,-4>; #local p2[2] = <5,5,5>; #local pfim = <7,+7,7>; union { #declare k = 0; #while (k < 10*n) //#local canto = interpola3(k, ta, tb, p0, p1, p2, p3); #local canto = interpola3_multi(k/10,pinic , n, p1, p2, pfim); sphere { canto, raio texture {tx_espelho} } #declare k = k + 1; #end } #end #local org = array[6]; #local org[0] = 0; #local org[1] = 2; #local org[2] = 2; #local org[3] = 3; #local org[4] = 1; #local org[5] = 3; #local dest = array[6]; #local dest[0] = 2; #local dest[1] = 0; #local dest[2] = 1; #local dest[3] = 0; #local dest[4] = 3; #local dest[5] = 3; #macro gera_grafo(nv, ne, org, dst, D, na, nb) #local k = 0; #local pa = array[nv]; #while (k + , //p0 // <2, 2, 1>, //p1 // <1, 8, -3>, //p2 // <0,-3,-2.5> + <0, raio * 3/4 + raio / 2, 0> + <0, tamanho_terminal, 0> //p3 // 600, //n // raio/5 //raio //) //} //object { teste_interpola_1(<0, 0, 0>, <1, 2, 1>, 5, 0.2) } //object{ //teste_interpola3_multi() //} } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 1.00 >; #declare raio_cena = 10.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)