| |
|
Le componenti della luce : |
|
|
|
| Nel nostro progetto abbiamo inserito 3 luci: |
| |
 |
| 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.
|
|
|
|
|