// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2020-09-30 19:57:13 by jstolfi // ====================================================================== // 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 } } // ====================================================================== // 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 } } #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 > } object { cano3 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 > } } #end #macro conexao(center_fir, center_sec, height) union{ object { cylinder{ center_fir, center_fir + < 0, 0, height >, 0.5 texture{ tx_cano } } } object { cylinder{ center_sec, center_sec + < 0, 0, height >, 0.5 texture{ tx_cano } } } object { cylinder{ center_fir + < 0, 0, height >, center_sec + < 0, 0, height >, 0.5 texture{ tx_cano } } } } #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 gera_tubulacoes(n, m) union { #declare canos = array[300]; #declare lin = 0; #declare index = 0; #while (lin < n) #declare col = 0; #while (col < m) #declare canos[index] = < 20*lin + 5.2, 20*col, 1.0 >; #declare canos[index + 1] = < 20*lin - 5.2, 20*col, 1.0 >; #declare canos[index + 2] = < 20*lin, 20*col + 5.2, 1.0 >; #declare index = index + 3; #declare col = col + 1; #end #declare lin = lin + 1; #end #declare tam = n*m*3; #declare curr_height = 20; #declare curr = 1; #while (curr < tam) object { conexao(canos[curr], canos[curr-1], curr_height) } #declare canos[curr] = canos[tam - 1]; #declare tam = tam - 1; #declare curr_height = curr_height + 1; #declare curr = curr + 1; #end } #end #include "eixos.inc" // Aqui est� a cena, finalmente: union{ object { gera_tanques(5, 5) } object { gera_tubulacoes(5, 5) } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 0.00 >; #declare raio_cena = 90.0; #declare dir_camera = < 1.00, 1.00, 0.50 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)