// Last edited on 2023-12-30 10:46:06 by stolfi
#version 3.7; global_settings { assumed_gamma 2.2 }

#include "direcao_do_sol.inc"
#include "parametros.inc"

background{ color rgb < 0.75, 0.80, 0.85 > }

#declare tx_base  = 
  texture{
    pigment{ color rgb < 0.5, 0.30, 0.30 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_cinza  = 
  texture{
    pigment{ color rgb < 0.3, 0.30, 0.30 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_painel = 
  texture{
    pigment{ color rgb<1,0,0> }
    finish { ambient 1 diffuse 0 }
  } 


#macro solar1(posicaoInicial)
  box{ posicaoInicial, posicaoInicial + <0.5,3,9> texture{ tx_painel } }
#end

#macro painel1(posicaoInicial)
  union{
    box{ posicaoInicial, posicaoInicial + <2,5,12> texture{ tx_cinza } }
    object{ solar1(posicaoInicial + <-0.2,1,2>) }
  }
#end

#macro solar2(posicaoInicial)
  box{ posicaoInicial, posicaoInicial + <3,0.5,9> texture{ tx_painel } }
#end

#macro painel2(posicaoInicial)
  union{
    box{ posicaoInicial, posicaoInicial + <5,2,12> texture{ tx_cinza } }
    object{ solar2(posicaoInicial + <1,-0.2,2>) }
  }
#end

#macro base()
  union{
    box{ <0,0,0>, <25,25,4> texture{ tx_base } }
    box{ <3,3,4>, <22,22,8> texture{ tx_base } }
  }
#end

#macro templo()
  union{
    object{ painel1(<18,10,8>) rotate 9*y }
    object{ painel1(<18,10,8>) rotate 9*y translate <-26,0,0> scale <-1,1,1>}
    object{ painel2(<9,18,8>) rotate -9*x }
    object{ painel2(<9,18,8>) rotate -9*x translate <0,-25,0> scale <1,-1,1>}
    object{ painel2(<9,18,8>) rotate -9*x rotate -23*z translate <0,3,0>}
    object{ painel2(<9,18,8>) rotate -9*x rotate 15*z translate <0,-28,0> scale <1,-1,1>}
    object{ base() }
  }
#end

object{ templo() }
// object{ templo() translate < -12.5, -12.5, 0 >  rotate 90*z translate < 12.5, 12.5, 0 > }

#local dir_norte = < 0.0, cos(radians(lat)), sin(radians(lat)) >; 
#local dir_sol = direcao_do_sol(lat, lon, mes, hora);

#include "eixos.inc"
#local cmp_eixos = 30.0;
// object{ eixos(cmp_eixos) }

#declare cmin = <  -1.0,  -1.0,   0.0 >;
#declare cmax = < +26.0, +26.0, +18.0 >;
#declare centro_cena = (cmin + cmax)/2;

#include "gaiola.inc"
// object{ gaiola(cmin,cmax) }
object{ gaichao(cmin,cmax) }

#include "camsol.inc"
#declare raio_cena = 0.65*vlength(cmax-cmin);
#declare intens_luz = 1.20;
// #declare vista = 3;
camsol(centro_cena, raio_cena, vista, dir_norte, dir_sol, intens_luz)