Le componenti della luce :
Nel nostro progetto abbiamo inserito 3 luci:
  • Luce Base
  • Luce 1
  • Luce 2
Inoltre, é presente un laser che parte dal centro di proiezione e arriva al robot.
// luce globale, di base

 

GLfloat liht0_ambient[] = { 0.1f, 0.1f, 0.3f, 1.0f};
GLfloat light0_diffuse[] = { 0.6f, 0.6f, 1.0f, 1.0f};
GLfloat light0_position[] = { 0.5f, 0.5f, 1.0f, 0.0f};

 

 

 

 

 

Abilitazione Luci:

Per poter usufruire dell'illuminazione dobbiamo prima attivarla:
glEnable(GL_LIGHTING);

Inoltre dobbiamo attivare le luci che abbiamo intenzione di utilizzare:

glEnable(GL_LIGHT0);
glEnable(GL_LIGHT2);

Manipolare i parametri di illuminazione
Per modificare i parametri delle luci utilizziamo la famiglia di funzioni glLight*()

void glLight{if](GLenum light, GLenum pname, TYPE param);
void glLight{if]v(GLenum light, GLenum pname, TYPE *param);

light è l'identificativo della luce
pname è il parametro della da modificare;
param è il valore del parametro

La possibilità di modificare colore intensità e posizione della luce all'interno della scena permette di ricreare ogni tipo di illuminazione con un elevata fedeltà.

Il sistema di illuminazione di OpenGL mette a disposizione un numero limitato di fonti di luce che per la maggior parte delle implementazioni è uguale a 8, esse vengono identificate dall'etichetta GL_LIGHTi dove i è il numero della luce partendo da 0.

 

Posizionare la luce :

Per posizionare la luce utilizziamo il parametro GL_POSITION:
GLfloat position[] = {0.0, 3.0, 3.0, 0.0};
glLightfv(GL_LIGHT0, GL_POSITION, position);
L'ultimo valore dell'array è sostanzialmente un flag che serve a indicare ad OpenGL se si tratta di una positional light oppure di una directional light.
Una positional light è una luce che viene posta nelle vicinanze della scena e illumina in tutte le direzioni a meno che non gli venga applicato un cono di illuminazione (spotlight) e si ottiene impostando l'ultimo valore dell'array a 1.0.Una directional light è una luce che sta a una distanza virtualmente infinita dalla scena, l'esempio più lampante di directional light è il sole. La distanza infinita implica che i raggi della fonte di luce siano paralleli quando colpiscono gli oggetti della scena ottenendo così un effetto diverso da quello di una luce posizionata vicino i cui raggi non sono paralleli tra loro. Si ottiene settando il quarto valore dell'array a 0.0.
Quando utilizziamo una directional light gli altri valori dell'array non indicano più la posizione della fonte di luce bensì la direzione dalla quale la luce proviene.
I vettori da specificare devono contenere le componenti RGBA.