2011-02-22

Rendering di un carillon con POV-Ray - 3 - Aggiunta lamelle

Nel precedente post ho inserito il codice per realizzare il taburo con i dentini.
A questo punto un carillon ha bisogno delle lamelle che devono vibrare sollecitate dai dentini.





#default {
  finish { ambient 0.4 }
}
#include "colors.inc"
#include "textures.inc"
#include "metals.inc"
#include "functions.inc"
#include "transforms.inc"

global_settings { ambient_light <0.99,0.99,0.99> }

sky_sphere {
    pigment {
      gradient y
      color_map {
        [0 color rgb <0.6,0.3,0.5>]
        [1 color rgb <0.6,0.3,0.0>]
      }
      scale 2
      translate -1
    }
  }

camera {
    location <-2, 3.5, -5>
    look_at  <0, 2.4,  -2>

    aperture .2
    focal_point <0,0,0>
    angle 60
}

light_source {
 <200, 100, -100>
 color rgb <0.99,0.99,0.99>
 spotlight radius 450 falloff 180 point_at <0,0,3>
}
light_source {
 <-5, -5, -5>
 color rgb <0.99,0.99,0.99>
 spotlight radius 450 falloff 180 point_at <0,0,3>
}

#declare N_LAMELLE=36; // numero di lamelle che determina anche la larghezza del rullo
#declare RAGGIO_TAMBURO = 2;

// posizionamento dei denti che colpiscono le lamelle
#declare COLPI = array[5][2] {
        { 1, 0 },
        { 7, 1 },
        { 10, 2 },
        { 8, 3 },
        { 6, 4 }
}
#declare POSIZIONI=100; // intervallo di valori per determinare la posizione del dente nella circonferenza del tamburo
#declare GRADI_ROTAZIONE_TAMBURO = 0;
#declare GRADI_PER_POSIZIONE=360/POSIZIONI; // di quanto ruota ogni posizione
#declare N_COLPI=dimension_size(COLPI,1); // numero di denti definiti nell'array
#declare PRISMOTTO = object { prism { linear_sweep linear_spline -1, 1, 3, <-1,0>, <0,-0.3>, <1,0> } scale .1 }
#declare DENTE = object { PRISMOTTO rotate <0,180,0> } // dente che sporge dal tamburo
#declare SVASO = object { PRISMOTTO } // svaso che rientra nel tamburo

#declare SVASI = union { // tutti i denti definiti nell'array
        #declare NDX_COLPO=0;
        #while (NDX_COLPO < N_COLPI)
                #declare POSIZIONE=(COLPI[NDX_COLPO][1]);
                #declare GRADI_POSIZIONE=GRADI_PER_POSIZIONE*POSIZIONE;
                object { SVASO translate <0.2*(COLPI[NDX_COLPO][0]),RAGGIO_TAMBURO,0> rotate <GRADI_POSIZIONE-90,0,0>}
                #declare NDX_COLPO=NDX_COLPO+1;
        #end
}

#declare DENTI = union { // tutti gli svasi definiti nell'array
        #declare NDX_COLPO=0;
        #while (NDX_COLPO < N_COLPI)
                #declare POSIZIONE=(COLPI[NDX_COLPO][1]);
                #declare GRADI_POSIZIONE=GRADI_PER_POSIZIONE*POSIZIONE;
                object { DENTE translate <0.2*(COLPI[NDX_COLPO][0]),RAGGIO_TAMBURO,0> rotate <GRADI_POSIZIONE-90,0,0>}
                #declare NDX_COLPO=NDX_COLPO+1;
        #end
}

#declare LAMELLA = box { <0,-0.03,0>, <0.15,0,-2> translate <0,0,0 - RAGGIO_TAMBURO> }
#declare LAMELLE = union {
 #declare N_LAMELLA=1;
 #while (N_LAMELLA <= N_LAMELLE)
  object { LAMELLA translate <-0.10+N_LAMELLA*0.20,0,0> }
  #declare N_LAMELLA=N_LAMELLA+1;
 #end
 prism { -0.03, 0, 4, <0.05,-5>, <N_LAMELLE * 0.20,-5>, <N_LAMELLE * 0.20,-3>, <0.05,-4> }
 translate <0,0,-0.1>
}

#declare TAMBURO = union { // somma tra cilindro "svasato" e denti
        difference { // differenza tra cilindro e svasi
                cylinder { <0,0,0>, <N_LAMELLE * 0.20,0,0>, RAGGIO_TAMBURO }
                object { SVASI }
        }                                                                   
        object { DENTI }                                                    
        rotate <0 -  GRADI_ROTAZIONE_TAMBURO,0,0> 
}

#declare CARILLON = union {
 object { TAMBURO }
 object { LAMELLE }
 texture { T_Copper_5A }
}

object {
 CARILLON
 translate <-1,2,1.5>
 scale 1
}

Nessun commento:

Posta un commento