// MC930 - Exemplo de main.pov para o trabalho final
// Last edited on 2000-12-14 09:07:40 by mc726

// MONUMENTO
#include "colors.inc"
#include "stones.inc"

#declare centro_do_monumento = < 0, 0, 1 >;

#declare pe_direito = 3;
#declare raio_panetone = 10.4;
#declare dist_ponte = 5;
#declare larg_ponte = 2;
#declare dist_panetones = 2*raio_panetone+dist_ponte;
#declare expessura_div = .25;
#declare larg_parapeito = 3;
#declare num_parapeitos = 20;
#declare ang_parapeito = 10;

#declare panetone =
   cylinder {
      <0,0,0>,
      <0,0,2*pe_direito>, 
      raio_panetone
   }

#declare divisoria =
   cylinder {
      <0,0,0>,
      <0,0,expessura_div>,
      raio_panetone+1
   }

#declare ponte =
   box {
	<0,0,0>,
	<dist_ponte,larg_ponte,expessura_div>
   }

#declare cat1 = raio_panetone+1+1.3*sin(radians(ang_parapeito))
         -expessura_div*cos(radians(ang_parapeito))/2;
#declare cat2 = larg_parapeito/2;


#declare corrimao =
   torus {
      sqrt(cat1*cat1+cat2*cat2)-.03,.05
      rotate x*90
   }

#declare corrimoes =
   difference {
      union {
         object {
            corrimao
            translate<-dist_panetones/2,0,pe_direito+1.3>
         }
         object {
            corrimao
            translate<dist_panetones/2,0,pe_direito+1.3>
         }
      }
      
      box {
	<-dist_panetones/2,-larg_ponte/2,0>,
	<dist_panetones/2,larg_ponte/2,pe_direito*2>
      }

      texture { pigment {color rgb <1,.5,0>}}
   }

#declare prof_coluna = .4;
#declare exp_coluna = .3;
#declare alt_incl = pe_direito-.8;
#declare ang_coluna = 20;

#declare coluna =
   union {
      box {
         <0,0,0>,
         <prof_coluna,exp_coluna,pe_direito>
      }
      intersection {
         box {
            <0,0,alt_incl>,
            <1.2,exp_coluna,pe_direito>
         }

         box {
            <0,-.1,alt_incl>,
            <5,exp_coluna+.1,pe_direito>
            rotate y*-ang_coluna
         }

      }
      translate <0,-exp_coluna/2,0>
   }

#declare colunas =
   union {
     #declare i = 0;
     #while (i < num_parapeitos)

     object {
        coluna
	translate<raio_panetone,0,0>
	rotate z*(360/num_parapeitos)*(i+.5)
	translate<-dist_panetones/2,0,0>
     }

     object {
        coluna
	translate<raio_panetone,0,0>
	rotate z*(360/num_parapeitos)*(i+.5)
	translate<dist_panetones/2,0,0>
     }

     object {
        coluna
	translate<raio_panetone,0,pe_direito>
	rotate z*((360/num_parapeitos)*(i+.5))
	translate<-dist_panetones/2,0,0>
     }
     object {
        coluna
	translate<raio_panetone,0,pe_direito>
	rotate z*((360/num_parapeitos)*(i+.5))
	translate<dist_panetones/2,0,0>
     }
     #declare i = i+1;
     #end

     texture {pigment { color rgb <.8,.8,.8> } }

   }

#declare parapeito =
   union {
      box {
         <-expessura_div,0,0>,
	 <0,larg_parapeito,1.5>
      }
      box {
         <-expessura_div,0,1.5>,
	 <.1,larg_parapeito,1.4>
      }
      translate<0,-larg_parapeito/2,0>
      rotate y*ang_parapeito
   }

#declare refletor =
   box { 
      <-expessura_div,0,0>,
      <0,larg_parapeito,-.8>
      translate<0,-larg_parapeito/2,0>
      rotate y*-ang_parapeito*2.5
   }

#declare teto =
   union {
     object {
	divisoria
	translate <-dist_panetones/2,0,2*pe_direito>
     }
     object {
	divisoria
	translate <dist_panetones/2,0,2*pe_direito>
     }
     object {
        ponte
        translate <-dist_ponte/2,-larg_ponte/2,2*pe_direito>
     }

     object {
        refletor
        rotate z*90
        translate <0,larg_ponte/2,2*pe_direito>
     }

     object {
        refletor
        rotate z*270
        translate <0,-larg_ponte/2,2*pe_direito>
     }


     #declare i = 1;
     #while (i < num_parapeitos)

     object {
        refletor
	translate<raio_panetone+1,0,2*pe_direito>
	rotate z*(360/num_parapeitos)*i
	translate<-dist_panetones/2,0,0>
     }

     object {
        refletor
	translate<raio_panetone+1,0,2*pe_direito>
	rotate z*((360/num_parapeitos)*i+180)
	translate<dist_panetones/2,0,0>
     }
     #declare i = i+1;
     #end


     texture {pigment { color rgb <.8,.8,.8> } }
   }

#declare divisorias =
   union {
     object {
	divisoria
	translate <-dist_panetones/2,0,pe_direito>
     }
     object {
	divisoria
	translate <dist_panetones/2,0,pe_direito>
     }
     object {
        ponte
        translate <-dist_ponte/2,-larg_ponte/2,pe_direito>
     }

     object {
        parapeito
        rotate z*90
        translate <0,larg_ponte/2,pe_direito>
     }

     object {
        parapeito
        rotate z*270
        translate <0,-larg_ponte/2,pe_direito>
     }

     #declare i = 1;
     #while (i < num_parapeitos)

     object {
        parapeito
	translate<raio_panetone+1,0,pe_direito>
	rotate z*(360/num_parapeitos)*i
	translate<-dist_panetones/2,0,0>
     }

     object {
        parapeito
	translate<raio_panetone+1,0,pe_direito>
	rotate z*((360/num_parapeitos)*i+180)
	translate<dist_panetones/2,0,0>
     }
     #declare i = i+1;
     #end

     texture {pigment { color rgb <.8,.8,.8> } }
   }

#declare panetones =
  union {
     object {
	panetone
	translate <-dist_panetones/2,0,0>
     }
     object {
	panetone
	translate <dist_panetones/2,0,0>
     }
    texture{ 
      pigment{ brick }
      rotate <90,0,0>
      scale .2
      //finish{ diffuse 0.05 ambient 0.05 reflection 0.90 }
    }
  }

#declare monumento =
	union {
  	   object {panetones}
	   object {divisorias}
	   object {corrimoes}
	   object {colunas}
	   object {teto}
	}
  
// PAVIMENTO

#declare pavimento = 
  plane{ z, -1
    texture{ 
      pigment{ color rgb <.8,.8,.8> }
      finish{ diffuse 0.9 ambient 0.05 specular 0.3 roughness 0.1 }
    }
  }

// FUNDO

background{ color rgb < 0.0, 0.75, 1.0 > }

// EIXOS

#declare eixos_cartesianos = 
  union {
    cylinder { <0,0,0>, <1,0,0>, 0.02 pigment { color rgb <1,0,0> } }
    cylinder { <0,0,0>, <0,1,0>, 0.02 pigment { color rgb <0,1,0> } }
    cylinder { <0,0,0>, <0,0,1>, 0.02 pigment { color rgb <0,0,1> } }
  }

object { eixos_cartesianos }
object { pavimento }
object { monumento } 

// CÂMARA

#declare centro_da_cena = centro_do_monumento;
#declare raio_da_cena = 12.0;
#declare direcao_da_camera = vnormalize( < 1, 2, .8 > );

#declare dist_da_camera = 6.0 * raio_da_cena;
#declare pos_da_camera = centro_da_cena + dist_da_camera * direcao_da_camera;
camera {
  location  pos_da_camera
  right     <  -0.64,  0.00,  0.00 >
  up        <   0.00,  0.48,  0.00 >
  sky       z
  look_at   centro_da_cena
}

// ILUMINAÇÃO 

#declare direcao_da_luz = vrotate(direcao_da_camera, < 10, 10, 10 >);
#declare intens_da_luz = 1.25;

light_source {
  20 * raio_da_cena * direcao_da_luz
  color rgb intens_da_luz * < 1, 1, 1 >
}