Dal punto di vista prettamente fisico la riflessione diffusa è quel fenomeno che avviene quando i fotoni della luce, che si diffondono in una certa area, colpiscono una superficie. Al momento dell’interazione con la superficie il fotone può cambiare lunghezza d’onda a seconda della natura del materiale ed acquistare quindi un nuovo colore. Per conoscere al meglio il fenomeno della riflessione diffusa dobbiamo conoscere almeno due proprietà importanti della superficie dell’oggetto:
Dal punto di vista della programmazione dobbiamo creare una struttura nella quale ci sia il campo diffuse_color di tipo RGB ed il campo kdr che va da 0 fino ad 1. Questa struttura poi va inserita nell’oggetto che si desidera rappresentare. Quando un raggio di luce colpisce l’oggetto dovremmo calcolare il punto d’intersezione, il raggio di luce incidente, il colore trasportato dal raggio ed il livello di ricorsione. Inserendo anche la riflessione diffusa dobbiamo moltiplicare il valore visto in precedenza con la struttura vista diffuse_color, quindi in pseudocodice avremmo:
RGB diffuse_reflection(0, 0, 0);
…
light_intensity = normal * ray.direction;
if (light_intensity > 0.0)
diffuse_reflection += light_intensity * obj.surface.diffuse_color;
…
color += diffuse_reflection * obj.surface.kdr;
…
Come prima operazione definiamo una variabile diffuse_reflection per memorizzare i risultati parziali del calcolo inizializzata a nero (0, 0, 0). Dopo aver calcolato l’intensità della luce che colpisce l’oggetto occorre moltiplicarla per l’intensità di colore diffuso dell’oggetto che poi andrà moltiplicato per il coefficente di riflessione del materiale, il tutto va aggiunto al colore base. Si nota che se il raggio non colpisce l’oggetto il colore diffuso sarà nero, giustamente, mentre non avrà variazioni se il colore di riflessione del materiale è bianco.
Poniamo che invece della solita luce bianca volessimo utilizzare una lampadina con il vetro colorato, in questo caso occorre definire una struttura con le informazioni che ci occorrono, in particolare dobbiamo avere: la posizione ed il colore della luce. Se prendiamo in esame l’esempio precedente dobbiamo solo moltiplicare il risultato ottenuto per il colore della luce, si otterranno così degli effetti molto interessanti perché la luce diffusa va a miscelarsi con quella della sorgente luminosa. Nel caso di una luce sorgente bianca il colore ottenuto non cambierà, mentre nel caso assurdo di una sorgente nera non vedremmo niente poiché la componente diffusa dell’oggetto verrebbe completamente azzerata.
In questo articolo abbiamo visto le basi fondamentali per implementare la riflessione diffusa sugli oggetti e renderli così più realistici, il tutto con dello pseudocodice che però rende bene l’idea sul come vada costruita la classe che definisce il nostro oggetto grafico. Inoltre ci siamo soffermati su come implementare delle fonti di luce colorate come quella dei proiettori dello spettacolo.
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→