// Elisa Conversano ... prima lezione

/*
in questa lezione affronteremo i seguenti punti:
- ad includere i file .inc che costituiscono le librerie di Pov ray
- impostare una scena in Pov ray (camera, luci)
- disegnare alcuni oggetti
- deformare e trasformare gli oggetti
- dichiarare nuovi oggetti costruiti da noi
-
*/


//includo i file .inc che si trovano giā all'interno di Pov ray
#include "colors.inc" //colori
#include "textures.inc" //textures



// imposto il punto di vista
camera {
location <1,4,-3> //dove si trova
look_at <1.2,1.5,0> //dove guarda
angle 45 //angolo di visuale
}


// colloco le luci
light_source {
<30,100,-30> //posizione del punto luce
White //colore della luce
}

light_source {
<-50,100,-30> //posizione del punto luce
White //colore della luce
shadowless //elimino le ombre portate da questa luce per non creare confusione nell'immagine
}


// disegno gli assi cartesiani con tre coni x=rosso, y=verde, z=blu
//la sintassi del cono č cone{punto di partenza, raggio della prima base, punto finale, raggio della seconda base pigment {colore}}
cone {0,0.05,2*x,0 pigment {Red}}
cone {0,0.05,2*y,0 pigment {Green}}
cone {0,0.05,2*z,0 pigment {Blue}}


// disegno un piano di appoggio
//plane {normale, distanza dall'origine lungo la normale pigment{colore}}
plane {y,0 pigment {checker Orange White}} //lo coloro a quadri arancio e bianchi


// dichiaro l'aereo
#declare Aereo = //lo chiamo Aereo
union { //unisco insieme gli oggetti che andranno a costituire l'aereo
sphere {0,1 scale <1,0.3,0.2> } // la fusoliera č una sfera opportunamente scalata
sphere {0,1 scale <0.3,0.1,1.0> translate <-0.2,0,0> } // le ali sono un'unica sfera scalata e traslata lungo x
sphere {0,1 scale <0.2,0.1,0.5> translate <0.8,0,0> } // la coda č ancora una sfera, scalata e traslata fino alla fine della fusoliera
sphere {0,1 scale <0.2,0.3,0.03> translate <0.8,0.1,0> } // il timone

pigment {Grey} //lo coloro di grigio
scale 0.25 //lo scalo ancora in modo che sia proporzionato alla torre di controllo
}


// torre di controllo
//dichiaro la posizione della torre di controllo
#declare PosTorre = <0,1,2>; //posizione
sphere {PosTorre, 0.1 texture {Bronze_Metal}} //con questa sfera costruisco la cabina di controllo
cone {PosTorre, 0.1, PosTorre - 1*y, 0.05 pigment {Orange}} //con il cono disegno la torre


// traiettoria dell'aereo
//dichiaro la posizione iniziale dell'aereo
#declare Start = <3,1,1>;

//1° caso: l'aereo prosegue il volo
//dichiaro la prima traiettoria
//#declare Dir = -x;

//2° caso: l'aereo atterra
//dichiaro l'angolo di atterraggio
#declare Theta = 15;

//dichiaro la nuova traiettoria ruotata dell'angolo Theta
#declare Dir = vrotate(-x, Theta*z);


// richiamo l'oggetto Aereo che ho dichiarato in precedenza
object {Aereo
rotate Theta*z //lo ruoto di Theta attorno all'asse z
translate Start //lo traslo nella posizione di partenza
}


// disegno la traiettoria utilizzando il ciclo #while()
union { //apro l'unione
#local T=0.1; //dichiaro localmente il parametro T e lo faccio partire da 0.1 per non avere sferette interne all'aereo
#while(T<10) //faccio partire il ciclo: finchč T č minore di 10 eseguirā l'operazione descritta di seguito
#local P = Start+T*Dir; //dichiaro localmente P = posizione iniziale dell'aereo + parametro * traiettoria
sphere {P, 0.01 pigment {Cyan}} //visualizzo la traiettoria con delle sferette. Il centro di ogni sferetta č posizionato su P
#local T=T+0.03; // alla fine del ciclo T verrā incrementato di 0.03
#end //chiudo il ciclo
} //chiudo l'unione