// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2021-12-09 07:58:32 by stolfi

// ======================================================================
// CORES E TEXTURAS

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

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

#declare tx_vermelho = 
  texture{
    pigment{ color rgb < 1.00, 0.10, 0.10 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }
  
#declare tx_azul = 
  texture{
    pigment{ color rgb < 0.10, 0.10, 1.00 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

// ======================================================================
// DESCRIÇÃO DA CENA 

// MACROS QUE CONSTITUEM OS OBJETOS DA CENA

#macro arvore(P, A, K)
  #local R_cilindro = K;
  
  #if(K = 0)
    union{
      cylinder{
        <0, 0, 0>,
        <A, 0, 0>,
        R_cilindro
        texture{ tx_verde }
      }
    
      sphere{
        <A, 0, 0>,
        R_cilindro/2
        texture{ tx_vermelho }
      }
      translate P
    }
    
  #else
    union{
      cylinder{
        <0, 0, 0>,
        <A, 0, 0>,
        R_cilindro
        texture{ tx_verde }
        translate P
      }
    
      object{ arvore(P + <A, 2,  0>, A/1.5, K - 1) }
      object{ arvore(P + <A, 0,  0>, A/1.5, K - 1) }
      object{ arvore(P + <A, -2, 0>, A/1.5, K - 1) }
    }
  #end

#end

  
#include "eixos.inc"
// object{ eixos(10) }

#declare K = 4;
#declare P = <0, 0, 0>;
#declare A = 30;


object{ arvore(P, A, K) }


#include "camlight.inc"
#declare centro_cena = < 40, 0, 0 >;
#declare raio_cena = 50;
#declare dir_camera = < 20, 30, 40 >;
#declare dist_camera = 5*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)