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

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

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

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

#declare tx_espelho = 
  texture{
    pigment{ color rgb < 1.00, 0.85, 0.30 > }
    finish{ diffuse 0.2 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 }
  }

#declare tx_vidro = 
  texture{
    pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 }
    finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }


#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > }
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }

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

// Partes da cena:

#macro Make_No(nVoltas,raio,espacamento)
  union{
  cylinder{<0,0,0> <+1,+2,0> 0.1 texture{tx_plastico}}
  sphere{<+1,+2,0> 0.1 texture{tx_plastico}}
  cylinder{<+1,+2,0> <+3,+1,-0.5> 0.1 texture{tx_plastico}}
  sphere{<+3,+1,-0.5>  0.1 texture{tx_plastico}}
  cylinder{<+3,+1,-0.5> <+2,-0.5,0> 0.1 texture{tx_plastico}}
  sphere{<+2,-0.5,0>0.1 texture{tx_plastico}}
  cylinder{<+2,-0.5,0>  <+1,+1,+0.5> 0.1 texture{tx_plastico}}
  sphere{<+1,+1,+0.5> 0.1 texture{tx_plastico}}
  cylinder{<+1,+1,+0.5>  <+3,+2,0> 0.1 texture{tx_plastico}}
  sphere{<+3,+2,0> 0.1 texture{tx_plastico}}
  cylinder{<+3,+2,0> <+4,0,0> 0.1 texture{tx_plastico}}
  sphere{<+4,0,0> 0.1 texture{tx_plastico}}
  cylinder{<+4,0,0> <0,0,0> 0.1 texture{tx_plastico}}
  sphere{<0,0,0> 0.1 texture{tx_plastico}}
  }
#end

#macro interp(t0,v0,t1,v1,tt)
  #local r = (tt-t0)/(t1-t0);
  #local s = 1-r;
  #local vv = s*v0+r*v1;
  vv
#end

#macro arco(t0,t1,a,b,c,d,tt)
  #local ab = interp(t0,a,t1,b,tt);
  #local bc = interp(t0,b,t1,c,tt);
  #local cd = interp(t0,c,t1,d,tt);
  #local abc = interp(t0,ab,t1,bc,tt);
  #local bcd = interp(t0,bc,t1,cd,tt);
  #local abcd = interp(t0,abc,t1,bcd,tt);
  abcd
#end

#macro curvas(t0,t1,a,b,c,d)
  #declare i=0;
  #while (i<t1)
    sphere{arco(t0,t1,a,b,c,d,i) 0.1 texture{tx_plastico}}
    #declare i=i+1;
  #end
#end

#include "eixos.inc"

// Aqui está a cena, finalmente:
//Make_No(0,0,0)
union{
curvas(0,100,<0,0,0>,<+1,+2,0>,<+3,+1,-0.5>,<+2,-0.5,0>)
curvas(0,100,<+2,-0.5,0>,<+1,+1,+0.5>,<+3,+2,0>,<+4,0,0>)
cylinder{<0,0,0> <+4,0,0> 0.1 texture{tx_plastico}}
sphere{<+4,0,0> 0.1 texture{tx_plastico}}
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 00 >;
#declare raio_cena = 7.0;
#declare dir_camera = < +20, +20, +20 >;
#declare dist_camera = 5*raio_cena;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)