// MC930 - Projeto Final
// Marilia Goulart Honorio - 971259

#include "colors.inc"
#declare s = 3; // janelas lateral
#declare r = 5; // janelas fechada
#declare n = 8; // andares
#declare i = 1; // indice

// MONUMENTO

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

//#declare baseVerde =
//  box{
//  }

#declare trianguloCentro =
  difference {
    box {
      < 0.1, 0.25, -0.2 >,
      < 0, 0, 0 >
      texture { pigment { White } }
    }
    box {
      < 0.15, 0.15, -0.165 >,
      < -0.15, -0.15, 0.165 >
      texture { pigment { White } }
      rotate < 45, 0, 0 >
      translate < 0.00, 0.25, -0.2 >
    }
  }

#declare trianguloCentroCompleto =
  union {
    object { trianguloCentro
             rotate < 45, 0, 0 >
           }
  }

#declare trianguloBranco =
  difference {
    box {
      <0.65,1.3,-0.05>,
      <0.6,1.1,0.1>
      texture { pigment { White } }
    }
    box {
      <0.1,0.25,-0.2>
      <0,0,0>
      texture { pigment { color rgbt < 1, 1, 1, 1> } }
      rotate <35,0,0>
      translate <0.56,1.1,-0.05>
    }
  }

#declare corte =
  box {
    < 0.15, 0.15, -0.165 >,
    < -0.15, -0.15, 0.165 >
    texture { pigment { White } }
    rotate < 45, 0, 0 >
    translate < 0.00, 0.25, -0.2 >
  }

#declare baseBranca =
  box {
    <0.9,1.3,0.15>,
    <-0.2,-1.2,0.25>
    texture { pigment { White } }
  }

#declare lajeDeBaixo =
  box {
    <0.8,1.2,-0.01>,
    <-0.1,-1.1,0.05>
    texture { pigment { White } }
  }

#declare andarDeBaixoCinza1 =
  box {
    <0.7,1.1,0.05>,
    <0.1,-0.9,0.15>
    texture { pigment { Gray } }
  }

#declare andarDeBaixoCinza2 =
  object {
    andarDeBaixoCinza1
    translate < 0, 0, -0.16>
  }

#declare triFrente =
  object { trianguloCentroCompleto
           rotate < 0, 0, -90 >
           translate < 0.76, -0.98, 0 >
         }

#declare triTras =
  object { trianguloCentroCompleto
           rotate < 0, 0, 90 >
           translate < -0.05, -1.07, 0 >
         }

#declare triEsquerda =
  object { trianguloCentroCompleto
           translate < 0, 1.17, 0 >
         }

#declare triDireita =
  object { trianguloCentroCompleto
           rotate < 0, 0, 180 >
           translate < 0.115, -1.07 , 0 >
         }

#declare monumento =
  union
  {
    object { baseBranca }

    object { lajeDeBaixo }
    object { andarDeBaixoCinza1 }
    object { andarDeBaixoCinza2 }

    #declare i = 0;
    #while (i < 3)
      object { triDireita
               translate <i*0.275,0,0>
             }
      #declare i = i + 1;
    #end

    #declare i = 0;
    #while (i < 3)
      object { triEsquerda
               translate <i*0.275,0,0>
             }
      #declare i = i + 1;
    #end

    #declare i = 0;
    #while (i < 8)
      object { triFrente
               translate <0,i*0.31,0>
             }
      #declare i = i + 1;
    #end

    #declare i = 0;
    #while (i < 8)
      object { triTras
               translate <0,i*0.31,0>
             }
      #declare i = i + 1;
    #end

      #declare i = 0;
      #while ( i <= n )
        // andar
        #declare j = 1;
        #declare k = 1;
        union{
          box{
            <0.2*s+0.1, 0.2*r+0.1, 0.2*i+0.15>,
            <0, 0, 0.2*i+0.35>
            texture { pigment { Gray } }
          }
          // janelas da fachada
          #while ( j <= r )
            box{
              <0.2*s+0.11, 0.2*j, 0.2*i+0.15>,
              <0.2*s+0.11, 0.2*j-0.1, 0.2*i+0.25>
              texture { pigment { Gray15 } }
            }
            #declare j = j + 1;
          #end

          // janelas da lateral
          #while ( k <= s )
            box{
              <0.2*k-0.1, 0.2*r+0.11, 0.2*i+0.15>,
              <0.2*k, 0.2*r+0.11, 0.2*i+0.25>
              texture { pigment { Gray15 } }
            }
            #declare k = k + 1;
          #end

        }
        #declare i = i + 1;
      #end
    }

// FUNDO

  sky_sphere {
    pigment {
      gradient y
      color_map {
        [0.000 0.002 color rgb <1.0, 0.2, 0.0>
                     color rgb <1.0, 0.2, 0.0>]
        [0.002 0.200 color rgb <0.4, 0.5, 0.9>
                     color rgb <0.4, 0.5, 0.9>]
//        [0.002 0.200 color rgb <0.8, 0.1, 0.0>
//                     color rgb <0.2, 0.2, 0.3>]
      }
      scale 2
      translate -1
    }
    pigment {
      bozo
      turbulence 0.65
      octaves 6
      omega 0.7
      lambda 2
      color_map {
          [0.0 0.1 color rgb <0.85, 0.85, 0.85>
                   color rgb <0.75, 0.75, 0.75>]
          [0.1 0.5 color rgb <0.75, 0.75, 0.75>
                   color rgbt <1, 1, 1, 1>]
          [0.5 1.0 color rgbt <1, 1, 1, 1>
                   color rgbt <1, 1, 1, 1>]
      }
      scale <0.2, 0.5, 0.2>
    }
    rotate -135*x
  }

//background { color rgb < 0.90, 0.92, 0.95 > }
//background { CloudArea }

// PAVIMENTO - piso verde em niveis

#declare pavimento =
  plane{ z, -1
    texture{
      pigment{ checker
          color Green
//        color rgb < 0.80, 0.90, 1.00 >,
//        color rgb < 0.20, 0.70, 1.00 >
      }
      finish{ diffuse 0.9 ambient 0.05 specular 0.3 roughness 0.1 }
    }
  }

// 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 raio_da_cena = 1.0;

///////////////////////////////////////////////////////////////
//Desenvolvimento:
//#declare centro_da_cena = < 0, 0, 0.3 >;
//#declare direcao_da_camera = vnormalize( < 3, 2, 0 > );
//#declare dist_da_camera = 3.0 * raio_da_cena




///////////////////////////////////////////////////////////////

//#declare centro_da_cena = centro_do_monumento;

///////////////////////////////////////////////////////////////
//Imagem Final:
#declare centro_da_cena = < 0, 0, 0.5>;
#declare direcao_da_camera = vnormalize( < 3, 2, 0 > );
#declare dist_da_camera = 3.5 * raio_da_cena;

#declare pos_da_camera = centro_da_cena + dist_da_camera * direcao_da_camera;

camera {
  location  pos_da_camera
//  right     <   0.00,  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 >
}

light_source {
  < -1, -1, 0.5>
  color rgb intens_da_luz * < 1, 1, 1 >
}