// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2023-10-23 20:09:01 by stolfilocal // ====================================================================== // CORES E TEXTURAS background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_tanque_grande = texture{ pigment{ color rgb < 0.41, 0.41, 0.41 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_tanque_pequeno = texture{ pigment{ color rgb < 0.50, 0.50, 0.50 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_tanque_medio = texture{ pigment{ color rgb < 0.66, 0.66, 0.66 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_cano = texture{ pigment{ color rgb < 1, 1, 1 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_black = texture{ pigment{ color rgb < 0.8, 0.8, 0.8 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } // ====================================================================== // DESCRI��O DA CENA #declare raioBaseTanqueGrande = 5; #declare raioSuperiorTanqueGrande = 2; #declare raioBaseTanqueMedio = 4.5; #declare raioBaseTanquePequeno = 3; #declare raioSuperiorTanquePqueno = 1; // Partes do peao: #declare baseGrande = cylinder{ < 0, 0, 0.0 >, < 0, 0, 14.0 >, raioBaseTanqueGrande texture{ tx_tanque_grande } } #declare baseMedio = cylinder{ < 0, 0, 0.0 >, < 0, 0, 5.0 >, raioBaseTanqueMedio texture{ tx_tanque_medio } } #declare basePequeno = cylinder{ < 0, 0, 0.0 >, < 0, 0, 12.0 >, raioBaseTanquePequeno texture{ tx_tanque_pequeno } } #declare superiorGrande = cone{ < 0, 0, 14 >, raioBaseTanqueGrande, < 0, 0, 18 >, raioSuperiorTanqueGrande texture{ tx_tanque_grande} } #declare superiorMedio = sphere{ < 0, 0.0, 5 >, 4.3 texture{ tx_tanque_medio } } #declare superiorPequeno = cone{ < 0, 0, 12.0 >, raioBaseTanquePequeno, < 0, 0, 16.5 >, raioSuperiorTanquePqueno texture{ tx_tanque_pequeno} } #declare divisasPequeno = cylinder{ < 0, 0, 0.0 >, < 0, 0, 1.0 >, 3.3 texture{ tx_tanque_pequeno } } #declare cano1 = cylinder{ < 0, 0, 0.0 >, < 5.2, 0, 0.0 >, 0.5 texture{ tx_cano } } #declare cano2 = cylinder{ < 0, 0, 0.0 >, < -5.2, 0, 0.0 >, 0.5 texture{ tx_cano } } #declare cano3 = cylinder{ < 0, 0, 0.0 >, < 0, 5.2, 0.0 >, 0.5 texture{ tx_cano } } #declare cano4 = cylinder{ < 0, 0, 0.0 >, < 0, -5.2, 0.0 >, 0.5 texture{ tx_cano } } #macro tanqueGrande(i, j) union{ object { baseGrande translate < i, j, 0 > } object { superiorGrande translate < i, j, 0 > } object { cano1 translate < i, j, 1 > } object { cano2 translate < i, j, 1 > } } #end #macro tanqueMedio(i, j) union{ object { baseMedio translate < i, j, 0 > } object { superiorMedio translate < i, j, 0 > } object { cano1 translate < i, j, 1 > } object { cano2 translate < i, j, 1 > } object { cano3 translate < i, j, 1 > } } #end #macro tanquePequeno(i, j) union{ object { basePequeno translate < i, j, 0 > } object { superiorPequeno translate < i, j, 0 > } object { divisasPequeno translate < i, j, 3 > } object { divisasPequeno translate < i, j, 6 > } object { divisasPequeno translate < i, j, 9 > } object { cano1 translate < i, j, 1 > } object { cano2 translate < i, j, 1 > } object { cano3 translate < i, j, 1 > } object { cano4 translate < i, j, 1 > } } #end #macro gera_tanques(n, m) union { #declare lin = 0; #declare roleta1 = seed(123123); #while (lin < n) #declare col = 0; #while (col < m) #declare index = 3*rand(roleta1); #if (index > 1) #if (index > 2) object { tanquePequeno(20*lin, 20*col) } #else object { tanqueMedio(20*lin, 20*col) } #end #else object { tanqueGrande(20*lin, 20*col) } #end #declare col = col + 1; #end #declare lin = lin + 1; #end } #end #macro interpola1(t_curr, t0, v0, t1, v1) #local ss = (t_curr - t0)/(t1 - t0); #local vv = (1 - ss)*v0 + ss * v1; vv #end #macro testa_interpola_1(p0, p1, n, raio) union{ #declare k = 0; #while (k < n) #local centro = interpola1(k, 2, p0, 4, p1); object { sphere{ centro, raio texture{ tx_black } } } #declare k = k + 1; #end } #end #macro interpola3(t_curr, ta, tb, v0, v1, v2, v3) #local v01 = interpola1(t_curr, ta, v0, tb, v1); #local v12 = interpola1(t_curr, ta, v1, tb, v2); #local v23 = interpola1(t_curr, ta, v2, tb, v3); #local v012 = interpola1(t_curr, ta, v01, tb, v12); #local v123 = interpola1(t_curr, ta, v12, tb, v23); #local v0123 = interpola1(t_curr, ta, v012, tb, v123); v0123 #end #macro testa_interpola_3(p0, p1, p2, p3, n, raio) union{ #declare k = 0; #while (k < n) #local centro = interpola3(k, 0, n, p0, p1, p2, p3); object { sphere{ centro, raio texture{ tx_black } } } #declare k = k + 1; #end } #end #macro interpola_3_multi(t0, pn, n, p1, p2, pf) #declare k = int(t0); #local q0 = pn; #local qn = pf; #if (k > 0) #local q0 = (p2[k - 1] + p1[k]) / 2; #end #if (k < n - 1) #local qn = (p2[k] + p1[k + 1]) / 2; #end #local pt = interpola3(t0, k, k + 1, q0, p1[k], p2[k], qn); pt #end #include "bezpoly.inc" #macro testa_interpola_multi() #local n = 3; #local p1 = array[3]; #local p2 = array[3]; #local p1[0] = <0, 30, 20>; #local p1[1] = <10, 20, -5>; #local p1[2] = <20, 81, -12>; #local p2[0] = <-3, 10, 30>; #local p2[1] = <-41, 22, -10>; #local p2[2] = <-5, 40, -20>; #local pini = <0, 0, 0>; #local pfin = <7, 55, 30>; #local t0 = 0; #local raio = 1.0; union { object{ bezpoly_multi(n, pini, p1, p2, pfin, 0.9*raio) } #while (t0 < n) #local pt = interpola_3_multi(t0, pini, n, p1, p2, pfin); sphere{ pt, raio texture{ tx_black } } #local t0 = t0 + 0.01; #end } #end #include "eixos.inc" union{ object { testa_interpola_multi() } } #include "eixos.inc" // object{ eixos(90) } #declare cmin = < -40,-10,-25 >; #declare cmax = < +30,+80,+35 >; 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 = < 42.00, 20.00, 11.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)