// Exemplo de arquivo de descricao de cena para POV-ray // Last edited on 2023-09-26 20:08:14 by stolfilocal background{ color rgb < 0.75, 0.75, 0.85 > } #declare MNMAX = 100; #declare arraysize = MNMAX*MNMAX*3; #declare tubos = array[arraysize] #declare theSeed = seed(42); #declare tx_tubo = 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_fosca_vermelha = texture{ pigment{ color rgb < 0.70, 0.10, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_fosca_verde = texture{ pigment{ color rgb < 0.10, 0.70, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_fosca_azul = texture{ pigment{ color rgb < 0.10, 0.10, 0.70 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_chao = texture{ pigment{ color rgb < 0.95, 0.75, 0.75 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tanque1 = union{ sphere{<0,0,0.9>, 0.4 texture{tx_fosca_verde}} sphere{<0,0,0.4>, 0.5 texture{tx_fosca_verde}} cylinder{<-0.7,0,0.4>, <0.7,0,0.4>, 0.1 texture{tx_tubo}} } #declare tanque2 = union{ cone{<0,0,0>, 0.8, <0,0,0.3>, 0.6 texture{tx_fosca_vermelha}} cylinder{<0,0,0.3>, <0,0,1.5>, 0.6 texture{tx_fosca_vermelha}} cylinder{<-0.7,0,0.4>, <0.7,0,0.4>, 0.1 texture{tx_tubo}} } #declare tanque3 = union{ cone{<0,0,0>,0.8 , <0,0,0.7>, 0.5 texture{tx_fosca_azul}} sphere{<0,0,0.7>, 0.5 texture{tx_fosca_azul}} cylinder{<-0.7,0,0.4>, <0.7,0,0.4>, 0.1 texture{tx_tubo}} } #macro gera_tanques (m, n) #declare ntubos = 2*m*n; // Professor! union{ #declare currentM = m; #while(currentM > 0) #declare currentN = n; #while(currentN > 0) #declare escolha = rand(theSeed); #if(escolha < 0.33) object{tanque1 translate } #end #if(escolha > 0.66) object{tanque2 translate } #end #if(escolha > 0.33 & escolha < 0.66) object{tanque3 translate } #end #declare tubos[((currentM-1)*n + (currentN-1))*2] = <(currentM*2)-0.7,currentN*2,0.4>; #declare tubos[(((currentM-1)*n + (currentN-1))*2) +1] = <(currentM*2)+0.7,currentN*2,0.4>; #declare currentN = currentN - 1; #end #declare currentM = currentM - 1; #end } #end #macro tubulacao(p,q) #local altura = 1 + 2*rand(theSeed); #local palto = ; #local qalto = ; union{ object{sphere{p,0.1} texture{tx_tubo}} object{sphere{q,0.1} texture{tx_tubo}} object{sphere{qalto,0.1} texture{tx_tubo}} object{sphere{palto,0.1} texture{tx_tubo}} object{cylinder{p, palto, 0.1} texture{tx_tubo}} object{cylinder{q, qalto, 0.1} texture{tx_tubo}} object{cylinder{palto, qalto, 0.1} texture{tx_tubo}} } #end #macro gera_tubulacoes() union{ #while(ntubos >= 2) // Professor #local i = int(ntubos*rand(theSeed)); #local j = int((ntubos-1)*rand(theSeed)); #if(j>=i) #local j = j+1; #end object{tubulacao(tubos[i],tubos[j])} #declare tubos[i] = tubos[ntubos-1]; #declare tubos[j] = tubos[ntubos-2]; #declare ntubos = ntubos-2; // Professor #end } #end object{box{<-100,-100,-1>,<100,100,0>} texture{tx_chao}} #declare nx = 7; #declare ny = 11; object{gera_tanques(nx,ny)} object{gera_tubulacoes()} #declare min_cena = < 2*(0-0.5), 2*(0-0.5), 0 >; #declare max_cena = < 2*(nx+1-0.5), 2*(ny+1-0.5), 3.5 >; #include "camlight.inc" #declare centro_cena = 0.5*(min_cena + max_cena); #declare raio_cena = 0.6*vlength(min_cena - max_cena); #declare dir_camera = < 10.00, 10.00, 6.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)