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

// MONUMENTO: Biblioteca Municipal de Campinas

#include "colors.inc"
#include "textures.inc"
#include "skies.inc"
#include "stones.inc"

//apagar os //speed

//sky_sphere { S_Cloud3 }
global_settings { assumed_gamma 0.4 }


background{ color Black }

light_source {
        < -1.00, 2.5, -3.00 >
        color rgb < 1.00, 1.00, 1.00 >
}

camera {
  location  < -8.0, 8, -8 >
  look_at   <  4.0, 3.0 , 4 >
}

//speedplane { y,0
//speed	pigment { color Green }
//speed}

#declare Concreto =
texture {
        pigment {

                granite
//speed                turbulence 0.9
                color_map {
//speed                        [0.0, rgb < 0.1,0.1,0.1 > ]
//speed                        [0.1, rgb < 0.4,0.4,0.5 > ]
                        [0.9, rgb < 0.3,0.34,0.37 > ]
                }
        }
}

#declare Cimento =
texture {
        pigment {
                granite
//speed                turbulence 1
                color_map {
//speed                        [0.0, rgb < 0.0,0.0,0.0 > ]
//speed                        [0.1, rgb < 0.7,0.7,0.7 > ]
                        [0.7, rgb < 0.6,0.6,0.6 > ]

                }
        }
//speed        finish { roughness 1
//speed                 phong 0.5 }
}


#declare pe=0.22;
#declare passo=4*pe;


#declare l_janela = 3*pe;
#declare p_janela = 0.1;

#declare l_janelal = l_janela;
#declare p_janelal = p_janela;

#declare a_bloco1 = 2.5*pe;
#declare l_bloco1 = l_janela-2*(pe/4);

#declare a_bloco2 = 2.6*pe;       // repete duas vezes por janela
#declare l_bloco2 = l_bloco1;

#declare a_bloco3 = 1.8*pe;
#declare l_bloco3 = l_janela;

#declare a_bloco4 = 1.8*pe;
#declare l_bloco4 = l_bloco1;  // deve ser mudado a fim de ganhar centralizacao

#declare a_bloco5 = 1.8*pe;
#declare l_bloco5 = l_bloco4;

#declare entre_blocos = 0.05;
#declare entre_janelas = 0.05;

#declare a_janela = a_bloco1 + 2*a_bloco2 + a_bloco3 + a_bloco4 + 7*entre_blocos;

#declare a_janelal = a_janela + a_bloco5 + entre_blocos;


#declare d_teto_janela = a_bloco5+entre_blocos;  //distancia do teto a janela
#declare p_coluna_maior = 0.3;
#declare p_coluna_menor = 0.2;
#declare d_teto_janelal = a_janelal-(a_janela + d_teto_janela);  //distancia do teto a janela lateral

#declare l_corte_teto = 0.1;           //largura da lateral
#declare a_corte_teto = 0.1;
#declare p_corte_teto = p_janela;

#declare p_teto = 1;
#declare a_teto = 0.5;
#declare l_teto = ((12*l_janela)-(2*l_corte_teto))/5;


//so um alias

#declare a_conect = a_teto/2;
#declare l_conect = l_corte_teto;
#declare p_conect = p_teto;


#declare l_coluna = 2*l_corte_teto + l_conect;

#declare modulo_frente = 12*l_janela + 2*l_corte_teto;


// TETO ///////////////////////////////////////////////////////

// FRontal
#declare teto_bloco =
difference {
        box { <0,0,0>
              <l_teto, a_teto, p_teto>
              texture { Concreto }
        }
        box { <0,0,0>
              <l_teto - 2*l_corte_teto, a_teto - a_corte_teto, p_teto>
              translate <l_corte_teto,-0.001,-p_corte_teto>
              texture { Concreto }
            }
}


#declare conector_teto =
        box { <0,0,0>
              <l_conect, a_conect, p_conect>
              texture { Concreto }
}


#declare teto_simples =
union {
        object { teto_bloco }
        object { conector_teto
                 translate <l_teto, (a_teto-a_conect)/2, 0>
               }
}


#declare teto_x_5 =
union {
        #declare Count=0;

        #while (Count < 5)
              object{ teto_simples translate x*Count*(l_teto+l_conect)}
              #declare Count=Count+1;

        #end
}



#declare coluna_funda =
box { <0,0,0>
      <l_corte_teto, a_janela+d_teto_janela+a_teto, p_coluna_maior>
      translate <0,0,-p_coluna_maior>    //??
      texture { Concreto }

}

#declare coluna_rasa =
box { <0,0,0>
      <l_corte_teto, a_janela+d_teto_janela+a_teto, p_coluna_menor>
      translate <0,0,-p_coluna_menor>    //??
      texture { Concreto }

}

#declare coluna=
union {
        object { coluna_funda }
        object { coluna_rasa
                 translate x*l_corte_teto
               }
        object { coluna_funda
                 translate x*(l_corte_teto + (l_conect))
               }
}


#declare colunabico=
difference {
       	object { coluna }
       	object { coluna_rasa
       		rotate y*-90
       		scale y*1.01
       		translate x*-(p_coluna_maior - p_coluna_menor)
       		translate z*-(p_coluna_maior-l_conect)
        }
}

#declare parede_simples =
union {
        object { teto_x_5
                translate <0, (a_janela + d_teto_janela), -p_teto>
               }
        box { <0,0,0>
              <12*l_janela, d_teto_janela, p_janela>
              texture { Concreto }
              translate <l_conect, a_janela, -p_janela>
            }
        translate z*p_janela
}


// parede e teto lateral sao diferntes do frontal e traseiro
#declare tetol_bloco =
union {
       box { <0,0,0>					//frente
             <l_teto+l_conect, a_conect, p_corte_teto>
             texture { Concreto }
 	     translate z*p_teto
             translate y*(a_teto-a_conect)
           }
        box { <0,0,0>                                   //Fundo
              <l_teto+2*l_conect, a_teto, p_corte_teto>
              texture { Concreto }

        }

        box { <0,0,0>                                   // teto
              <l_teto+2*l_corte_teto, a_corte_teto, p_teto>
              texture { Concreto }
              translate y*(a_teto-p_corte_teto)
            }
}


#declare tetol_simples =
union {
        object { tetol_bloco }
        object { conector_teto
                 translate <l_teto, (a_teto-a_conect), 0>
               }
        scale z*-1
        translate z*p_teto
}


#declare tetol_x_5 =
union {
        #declare Count=0;

        #while (Count < 5)
              object{ tetol_simples translate x*Count*(l_teto+l_conect)}
              #declare Count=Count+1;

        #end
}



#declare paredel_simples =
union {
        object { tetol_x_5
                translate <0, (a_janela + d_teto_janela), -p_teto>
               }
        box { <0,0,0>
              <12*l_janelal, d_teto_janelal, p_janelal>
              texture { Concreto }
              translate <l_conect, a_janelal, -p_janelal>
            }
        translate z*p_janela
}

//////////////////////////////////////////////////////////////////////////////////////////////
// Janela Frontal



#declare quadro_janela =
union {
        box { <0,0,0>
              <l_janela, a_janela, p_janela>
              pigment { color VLightGray }
//speed              finish { reflection 0.1 }
        }
        box { <0,0,-p_janela*0.75>
              <entre_janelas*2/3, a_janela, p_janela>
              pigment { color VLightGray }
//speed              finish { reflection 0.1 }
        }
        box { <l_janela,0,-p_janela*0.75>
              <(l_janela - entre_janelas*2/3), a_janela, p_janela>
              pigment { color VLightGray }
//speed              finish { reflection 0.1 }
        }
}


#declare quadro_janelal =
union   {
        box { <0,0,0>
              <l_janelal, a_janelal, p_janelal>
              pigment { color VLightGray }
//speed              finish { reflection 0.1 }
        }
        box { <0,0,-p_janela*0.75>
              <entre_janelas*2/3, a_janelal, p_janela>
              pigment { color VLightGray }
//speed              finish { reflection 0.1 }
        }
        box { <l_janela,0,-p_janela*0.75>
              <(l_janela - entre_janelas*2/3), a_janelal, p_janela>
              pigment { color VLightGray }
//speed              finish { reflection 0.1 }
        }
}


#declare quadro_bloco1 =
        box { <0,0,0>
              <l_bloco1, a_bloco1, p_janela/2>

        }

#declare quadro_bloco2 =
        box { <0,0,0>
              <l_bloco2, a_bloco2, p_janela/2>
              finish {reflection 0.3}
        }

#declare quadro_bloco3 =
        box { <0,0,0>
              <l_bloco3, a_bloco3, p_janela/2>

        }

#declare quadro_bloco4 =
        box { <0,0,0>
              <l_bloco4, a_bloco4, p_janela/2>

        }

#declare quadro_bloco5 =
        box { <0,0,0>
              <l_bloco5, a_bloco5, p_janela/2>

        }


#declare janela_vasada =
difference {
        object { quadro_janela }
        object { quadro_bloco1
                 scale <1, 1, 5>
                 translate <entre_janelas, entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco2
                 scale <1, 1, 5>
                 translate <entre_janelas, (a_bloco1 + 2*entre_blocos), -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco2
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + a_bloco2 + 3*entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco3
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + 4*entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco4
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + a_bloco3 + 5*entre_blocos, -0.1>
                 pigment { color Silver }
               }
}



#declare janela_vasadal =
difference {
        object { quadro_janelal }
        object { quadro_bloco1
                 scale <1, 1, 5>
                 translate <entre_janelas, entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco2
                 scale <1, 1, 5>
                 translate <entre_janelas, (a_bloco1 + 2*entre_blocos), -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco2
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + a_bloco2 + 3*entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco3
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + 4*entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco4
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + a_bloco3 + 5*entre_blocos, -0.1>
                 pigment { color Silver }
               }
        object { quadro_bloco5
                 scale <1, 1, 5>
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + a_bloco3 + a_bloco4 + 6*entre_blocos, -0.1>
                 pigment { color Silver }
               }
}



#declare janela =
union {
        object { janela_vasada }
        object { quadro_bloco1
                 pigment { color Blue }
                 translate <entre_janelas, entre_blocos, p_janela/3>
               }
        object { quadro_bloco2
                 translate <entre_janelas, a_bloco1 + 2*entre_blocos, p_janela/3>
                 pigment { rgbt <1,1,1,0.95>  }
               }
        object { quadro_bloco2
                 translate <entre_janelas, a_bloco1 + a_bloco2 + 3*entre_blocos, p_janela/3>
                 pigment { rgbt <1,1,1,0.95> }
               }
        object { quadro_bloco3
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + 4*entre_blocos, p_janela/3>
                 texture { Concreto }
               }
        object { quadro_bloco4
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + a_bloco3 + 5*entre_blocos, p_janela/3>
                 pigment { rgb <0.5, 0.5, 0.5> }
//speed                 finish { reflection 0.1 }
               }
}


#declare janelal =
union {
        object { janela_vasadal }
        object { quadro_bloco1
                 pigment { color Blue }
                 translate <entre_janelas, entre_blocos, p_janela/3>
               }
        object { quadro_bloco2
                 translate <entre_janelas, a_bloco1 + 2*entre_blocos, p_janela/3>
                 pigment { rgbt <1,1,1,0.95>  }
               }
        object { quadro_bloco2
                 translate <entre_janelas, a_bloco1 + a_bloco2 + 3*entre_blocos, p_janela/3>
                 pigment { rgbt <1,1,1,0.95> }
               }
        object { quadro_bloco3
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + 4*entre_blocos, p_janela/3>
                 texture { Concreto }
               }
        object { quadro_bloco4
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + a_bloco3 + 5*entre_blocos, p_janela/3>
                 pigment { rgb <0.5, 0.5, 0.5> }
//speed                 finish { reflection 0.1 }
               }
        object { quadro_bloco5
                 translate <entre_janelas, a_bloco1 + 2*a_bloco2 + a_bloco3 + a_bloco4 + 6*entre_blocos, p_janela/3>
                 pigment { rgb <0.5, 0.5, 0.5> }
//speed                 finish { reflection 0.1 }
               }
}



#declare janela_x_12 =
union {
        #declare Count=0;

        #while (Count < 12)
              object{ janela translate x*Count*l_janela}
              #declare Count=Count+1;

        #end
}


#declare janelal_x_12 =
union {
        #declare Count=0;

        #while (Count < 12)
              object{ janelal translate x*Count*l_janela}
              #declare Count=Count+1;

        #end
}

#declare janelaesp_x_3 =
union {
        #declare Count=0;

        #while (Count < 3)
              object{ janela
              	      scale x*1.1	
                      translate x*Count*l_janela}
              #declare Count=Count+1;

        #end
}




#declare modulo_andar_fs=   //frontal superior
union {
        object { janela_x_12
           translate x*l_conect
        }
        object { parede_simples }
      }


#declare modulo_andar_fl=   // lateral superior
union {
        object { janelal_x_12
           translate x*l_conect
        }
        object { paredel_simples }
      }

#declare wallf =
union {
        // frente
        object { colunabico }
        object { modulo_andar_fs
                 translate x*(l_coluna-l_corte_teto)
               }
        object { colunabico
                 translate x*(l_coluna+12*l_janela)
               }
        object { modulo_andar_fs
                 translate x*(2*l_coluna+2*12*l_janela)
               }

}


#declare wallfundo=
union {
        // sentido horario lateral
        object { colunabico }
        object { modulo_andar_fs
                 translate x*(l_coluna-l_corte_teto)
               }
        object { coluna
                 translate x*(l_coluna+12*l_janela)
               }
        object { modulo_andar_fs
                 translate x*(2*l_coluna-l_corte_teto+12*l_janela)
               }
        object { coluna
                 translate x*(l_coluna+24*l_janela)
               }
        object { modulo_andar_fs
                 translate x*(2*l_coluna-l_corte_teto+2*12*l_janelal)
               }
        object { colunabico
                 translate x*(2*l_coluna+3*12*l_janela)
               }

}

#declare walll=
union {
        // sentido horario lateral
        object { colunabico }
        object { modulo_andar_fl
                 translate x*(l_coluna-l_corte_teto)
               }
        object { coluna
                 translate x*(l_coluna+12*l_janela)
               }
        object { modulo_andar_fl
                 translate x*(2*l_coluna-l_corte_teto+12*l_janela)
               }
        object { coluna
                 translate x*(l_coluna+24*l_janela)
               }
        object { modulo_andar_fl
                 translate x*(2*l_coluna-l_corte_teto+2*12*l_janelal)
               }
        object { colunabico
                 translate x*(2*l_coluna+3*12*l_janela)
               }
}



#declare paredes=
union {
        object { wallf }
        object { walll
                scale z*-1
                rotate y*-90
                translate z*-l_coluna
                translate x*p_coluna_maior
                }
        object { wallfundo
                 scale z*-1
                 translate z*(3*l_coluna + 3*12*l_janela-l_coluna)
                }
         object { walll
                 rotate y*-90
                 translate x*(3*l_coluna + 3*12*l_janela-l_coluna)
                 }
	// janelas menores da entrada

}


object { paredes }
//object { janelaesp_x_3 }