// Elisa Conversano ... prima lezione del seminario Pov-Ray a.a. 2010/2011

/*
in questa lezione affronteremo i seguenti argomenti:
- impostare una scena in Pov ray (camera, luci)
- includere i file .inc che costituiscono le librerie di Pov-Ray
- disegnare alcuni oggetti
- deformare e trasformare gli oggetti
- dichiarare nuovi oggetti costruiti da noi
- inserire commenti nel codice
- indentare il codice
- impostare la funzione while
- calcolare la distanza tra una due punti
*/


//includo i file .inc che si trovano già all'interno di Pov-Ray
#include "colors.inc"
#include "textures.inc"



// inserisco il punto di vista
camera {
location 0.8*<1,4,-3> //dove si trova
look_at 2*<0.55,0,1> //dove guarda
angle 60 //angolo di apertura della 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
}

background {DarkSlateBlue}

/*
// disegno gli assi cartesiani con tre coni. Per convenzione 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}}
// x,y,z z sono i versori lungo x, y e z
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 il piano di terra
//il piano è definito dall'espressione: plane {normale, distanza dall'origine lungo la normale pigment{colore}}
//plane {y,0 pigment {ForestGreen}}

//_____________________________________________________________________________________________________________________

// costruisco il primo oggetto

// dichiaro il satellite
#declare Satellite = //lo chiamo Satellite
union { //unisco insieme gli oggetti che andranno a costituire il satellite
sphere {0,0.3} // il corpo del satellite è una sferaa
cylinder {-z,z 0.05} // un cilindro supporta le ali
//box {<-1,0.5,-0.02> <1,-0.5,0.02> translate -z} //con due box costruisco le ali del satellite e le traslo
//box {<-1,0.5,-0.02> <1,-0.5,0.02> translate z}

//per costruire le ali si possono anche costruire due cubi nell'origine, più semplici da definire, scalandoli opportunamente in un secondo momento
box {<-1,-1,-1> <1,1,1> scale y*0.5 scale z*0.02 translate z}
box {<-1,-1,-1> <1,1,1> scale y*0.5 scale z*0.02 translate -z}

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


// radar
//dichiaro la posizione del radar
#declare A = <1,0,1>;
sphere {A, 0.05 pigment {Red}} //disegno il radar nella posizione A


//dichiaro la posizione del satellite
#declare P = <2,1,1>; // posizione
#declare Theta = 35; // angolo di rotazione 1
#declare Phi = -10; // angolo di rotazione 2
#declare Dir = vrotate(vrotate(-x, Theta*z), Phi*y); // traiettoria del satellite


//richiamo il satellite per costruirlo, lo ruoto nella giusta direzione e lo colloco nella posizione P
object {Satellite
texture {pigment {Grey} finish {Metal}} // al colore aggiungo una finitura metallica
rotate Theta*z rotate Phi*y translate P
}

// disegno una retta formata da sferette che va da A a P
#declare T = 0; //imposto il parametro ausiliario T che va da 0...
#while (T<1) //...a 1. Mentre il parametro T varia
sphere {(1-T)*A+T*P, 0.01 pigment {Black}} // il ciclo while disegna le sferette con il centro nella posizione (1-T)*A+T*P
#declare T = T+0.05; // il parametro T è ogni volta incrementato di 0.05
#end // con end chiudo il ciclo