OpenGL distingue fra 3 diversi tipi di luce:
Gli oggetti in presenza di fonti di luce non hanno il loro colore iniziale, ma questo cambierà in base ai raggi che li colpiranno. Un oggetto di colore rosso, ad esempio, se viene illuminato da una luce bianca sarà rosso, mentre se viene illuminato da una luce verde risulterà nero. Oltre ai colori dati dalle luci, possiamo assegnare ad ogni oggetto un colore di emissione che consente di creare, ad esempio, una lampadina accesa oppure un neon. Occorre dire che assegnare una luce di emissione ad un oggetto non lo rende una fonte di luce, ma viene colorato come se fosse illuminato dall’interno. Per altre informazioni sui raggi luminosi vi consiglio di leggere questo articolo, sempre su questo blog.
Per attivare l’illuminazione in OpenGL si utilizza la funzione glEnable(GL_LIGHTING) e per disattivarla si utilizza glDisable(). Abbiamo a disposizione otto luci ( GL_LIGHTX ) che è possibile gestire tramite la funzione glLightfv( luce, parametro, vettore ) per parametri vettoriali e glLightf( luce, parametro, valore ) per parametri non vettoriali. Ad esempio per ottenere un faretto alogeno dobbiamo utilizzare questo codice:
GLfloat cluce_ambiente[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat cluce_diffusa[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat cluce_speculare[] = { 0.7, 0.7, 0.7, 1.0 }; glLightfv(GL_LIGHT0, GL_AMBIENT, cluce_ambiente); glLightfv(GL_LIGHT0, GL_DIFFUSE, cluce_diffusa); glLightfv(GL_LIGHT0, GL_SPECULAR, cluce_speculare);
Da dire che la posizione della luce è influenzata dalla matrice di trasformazione corrente come le coordinate dei vertici degli oggetti, quindi occorre fare attenzione all’ordine. Comunque un oggetto può essere illuminato ed altri no utilizzando le funzioni di abilitazione e disabilitazione della luce nel momento di disegnare l’oggetto stesso.
Altra funzione importante è glLightModel(parametro, valore ) che consente di impostare l’intero comportamento delle luci ed in particolare abbiamo questi parametri:
Le caratteristiche del materiale vengono invece impostate tramite le funzioni glMaterialf(faccia, parametro, valore ) e glMaterialfv(faccia, parametro, vettore ). La faccia può essere quella anteriore ( GL_FRONT ), quella posteriore ( GL_BACK ) oppure entrambe ( GL_FRONT_AND_BACK ). I parametri possono essere:
L’ultima informazione da sapere per utilizzare le luci sono le normali a tutti i vertici dei nostri oggetti, calcolo che coinvolge anche un po’ di matematica e che tratteremo in una prossima lezione.
<< Lezione Precedente
Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…
MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→
In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…
In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…
Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…
Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→