// 2023-09-13 - 244899 #include "eixos.inc" // --------------------------- Texturas --------------------------- // #declare TxVertice2 = texture { pigment{ color rgb < 0.2, 0.9, 0.2 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare TxVertice3 = texture { pigment{ color rgb < 0.9, 0.9, 0.2 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare TxCorda = texture { pigment{ color rgb < 0.9, 0.9, 0.9 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare TxDebug = texture { pigment{ color rgb < 0.00, 1.00, 0.00 > filter 0.70 } finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 } } // --------------------------- Variaveis --------------------------- // #declare raio = 0.2; #declare tamanho_terminal = raio*2; #declare raio_terminal = raio / 2; // --------------------------- 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 { TxCorda } } #declare k = k + 1; #end } #end #macro interpola3 (tx, ta, tb, v0, v1, v2, v3) #local v01 = interpola1(tx, ta, v0, tb, v1); #local v12 = interpola1(tx, ta, v1, tb, v2); #local v23 = interpola1(tx, ta, v2, tb, v3); #local v012 = interpola1(tx, ta, v01, tb, v12); #local v123 = interpola1(tx, ta, v12, tb, v23); #local v0123 = interpola1(tx, ta, v012, tb, v123); v0123 #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 {TxCorda} } #declare k = k + 1; #end } #end #macro interpola3_multi(tx, pin, n, p1, p2, pfn) union { #declare } #end #include "bezpoly.inc" #macro teste_interpola3_multi(pin, n, p1, p2, pfn) union { #declare k = 0; #while (k <= n) // #local canto = interpola3_multi(k, pin, n, p1, p2, pfn) // sphere { canto, raio texture {TxCorda} } #declare k = k + 1; #end } #end #macro vertice_2 (p) union { #declare raio_cilindro = raio / 2; #declare tamanho_cilindro = raio * 4; cylinder { p, p + < tamanho_terminal, 0, 0> , raio_cilindro } sphere { p, raio } cylinder { p, p + < 0, tamanho_cilindro, 0> , raio_terminal } sphere { p + <0, tamanho_cilindro, 0>, raio } cylinder { p + <0, tamanho_cilindro, 0>, p + <0, tamanho_cilindro, 0> + <0, 0, tamanho_terminal> , raio_terminal } texture { TxVertice2 } } #end #macro vertice_3 (p) union { #declare raio_cilindro = raio * 3/2; #declare altura_cilindro = raio * 2; #declare altura_cone = raio * 3; cone { p, raio_cilindro p + <0, 0, altura_cone>, 0.01 } cylinder { p, p - < 0, 0, altura_cilindro> , raio_cilindro } sphere { p - <0, raio_cilindro / 2 + raio / 2, 0>, raio } sphere { p + <0, raio_cilindro / 2 + raio / 2, 0>, raio } sphere { p + <0, 0, altura_cone>, raio } cylinder { p + <0, 0, altura_cone>, p + <0, 0, altura_cone> + <0, 0, tamanho_terminal> , raio_terminal } cylinder { p + <0, raio_cilindro / 2 + raio / 2, 0>, p + <0, raio_cilindro / 2 + raio / 2, 0> + <0, tamanho_terminal, 0> , raio_terminal } cylinder { p - <0, raio_cilindro / 2 + raio / 2, 0>, p - <0, raio_cilindro / 2 + raio / 2, 0> - <0, tamanho_terminal, 0> , raio_terminal } texture { TxVertice3 } } #end // --------------------------- Cena --------------------------- // object { teste_interpola3_multi( <1,3,2> + , 600, 1, 2, <0,-3,-2.5> + <0, raio * 3/4 + raio / 2, 0> + <0, tamanho_terminal, 0>, ) } object { vertice_2(<1,3,2>) } object { vertice_3(<0,-3,-2.5>) } // --------------------------- Camera --------------------------- // #include "eixos.inc" // object{ eixos(5) } #declare cmin = < -2,-5,-3.5 >; #declare cmax = < +3,+5,+2.5 >; box{ cmin-0.1*z, texture{ pigment{ color rgb <0.80,0.70,0.60> } finish {diffuse 0.7 ambient 0.3 } } } #include "camlight.inc" #declare centro_cena = (cmin + cmax)/2; #declare raio_cena = 0.5*vlength(cmin - cmax); #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)