Di robydx (del 13/05/2007 @ 10:50:33, in Direct3D10, linkato 1778 volte)
Passiamo ora ad un nuovo modello di illuminazione, il Phong , quello di default per le vecchie DirectX (con la differenza però che noi calcoliamo tutto nel pixel shader evitando i difetti dell'interpolazione lineare ed ottenendo una qualità molto più elevata).
Il modello di illuminazione phong riprende il modello lambertian inserendo però l'effetto speculare (il bagliore delle auto è un esempio di specular).
La luce speculare dipende sia dall'oggetto, attraverso le normali, sia dalla posizione dell' osservatore.
Float4 finalColor = A + MaterialDiffuseColor * D + MaterialSpecularColor * S;
D è la diffuse light, calcolata come nel precedente tutorial.
L è la direzione della luce
V è il vettore EyeDirection che si ottiene come direzione tra la posizione della telecamera e quella del vertice
R è il vettore riflessione
S è la specular light che si ottiene elevando a potenza il prodotto fattoriale tra R e V. L'esponziale è il valore scalare power, che definisce l'intensità.
A è la luce ambientale, ossia un incremento nel valore per simulare la presenza di luce diffusa
MaterialDiffuseColor e MaterialSpecularColor sono i colori che l'oggetto emetto a contatto con la luce diffuse e specular
La somma tra la luce ambientale, diffusa e speculare è la phong light, probabilmente il modello di illuminazione più diffuso.
Notare infine che in caso di più sorgenti luminose il valore D ed il valore S sono le somme dei medesimi valori calcolati singolarmente per ogni sorgente.