Utente:Davi.trip/Sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Davi.trip (discussione | contributi)
Nessun oggetto della modifica
Davi.trip (discussione | contributi)
Nessun oggetto della modifica
Riga 40:
# Ombreggiatura di ciascun poligono, ''scan line'' per ''scan line'', tramite interpolazione lineare delle intensità ai vertici lungo ciascuno spigolo e in seguito tra gli spigoli lungo ciascuna ''scan line''.<ref name=":8" /> Ciò avviene in fase di rasterizzazione.<ref name=":10" />
 
Per calcolare l'intensità in <math>I_a</math>, <math>I_p</math> e <math>I_b</math>, conoscendo l'ordinata <math>y_s</math> di una ''scan line'' e le intensità ai vertici <math>I_1</math>, <math>I_2</math>, <math>I_3</math>, si possono usare le seguenti formule:<ref name=":8" />[[File:Gouraud-interpolation.png|miniatura|Interpolazione dell'intensità lungo gli spigoli di un poligono e le scan line|alt=]]<math display="block">I_a=I_1-(I_1-I_2)\frac{y_1-y_s}{y_1-y_2}</math>
 
<math display="block">I_aI_b=I_1-(I_1-I_2I_3)\frac{y_1-y_s}{y_1-y_2y_3}</math>
 
<math display="block">I_bI_p=I_1I_b-(I_1I_b-I_3I_a)\frac{y_1x_b-y_sx_p}{y_1x_b-y_3x_a}</math>
 
Usando le coordinate baricentriche, se in un triangolo un punto <math>A</math> che giace sullo spigolo i cui vertici sono <math>v_1</math> e <math>v_3</math>, posto a distanza <math>t</math> da <math>v_1</math>, è <math>A=tv_1+(1-t)v_3</math>, allora l'intensità di questo punto è <math>I_A=tS_1+(1-t)S_3</math>, dove <math>S_1</math> e <math>S_3</math> sono le intensità di <math>v_1</math> e <math>v_3</math>.<ref name=":14">{{Cita|Janke|pp. 307-311}}</ref><ref name=":15">{{Cita pubblicazione|autore=|titolo=Polygon Rendering Methods|rivista=|editore=Università di Tel Aviv|volume=|numero=|lingua=en|accesso=22 dicembre 2018|url=https://www.cs.tau.ac.il/~dcor/Graphics/pdf.slides/polygon-shading13.pdf}}</ref> Allo stesso modo, l'intensità di un punto <math>B</math> (sullo spigolo i cui vertici sono <math>v_2</math> e <math>v_3</math>, con distanza <math>d</math> da <math>v_2</math>), è <math>I_B=tS_2+(1-t)S_3</math>.<ref name=":10" /><ref name=":15" /> Le coordinate baricentriche possono servire per interpolare i tre vertici in modo da "ombreggiare" qualsiasi punto interno.<ref name=":14" /> Così, l'intensità <math>I</math> di un punto interno <math>P</math> giacente sul segmento della ''scan line'' i cui estremi sono i due punti <math>A</math> e <math>B</math> (le cui intensità sono state trovate con l'interpolazione), è <math>I_P=gI_A+(1-g)I_B</math>, dove <math>g</math> è la distanza da <math>A</math> lungo il segmento <math>AB</math>.<ref name=":10" /><ref name=":14" /><ref name=":15" />
 
<math>I_p=I_b-(I_b-I_a)\frac{x_b-x_p}{x_b-x_a}</math>[[File:Gouraud-interpolation.png|miniatura|Interpolazione dell'intensità lungo gli spigoli di un poligono e le scan line]]
=== Phong shading ===
Nel Phong shading, invece di interpolare le intensità di colore ottenute nei vertici, si interpolano le normali ottenute sui vertici di ciascun poligono per determinare la normale associata a ciascun pixel.<ref>{{Cita|Zingaretti|pp. 138-139}}</ref> L'equazione di illuminazione non è calcolata nei soli vertici, ma si calcola in tutti i pixel interni al triangolo usando, pixel per pixel, il vettore normale calcolato interpolando linearmente e rinormalizzando le normali nei vertici.<ref>{{Cita|Scateni|pp. 166-168}}</ref>[[File:Phong shading.svg|miniatura|alt=|Schema del Phong shading]]Gli step del Phong shading sono quindi:<ref>{{Cita pubblicazione|autore=|titolo=Illumination Models and Shading|rivista=|editore=Brandeis University|volume=|numero=|lingua=en|accesso=21 dicembre 2018|url=http://www.cs.brandeis.edu/~cs155/Lecture_16.pdf}}</ref><ref>{{Cita|Phong|p. 315}}</ref>
 
# Determinare la normale a ciascun vertice del poligono, che può essere approssimata con uno dei metodi descritti da Gouraud.
#In seguito, è necessario definire la normale alla superficie lungo gli spigoli e a un punto della superficie del poligono. La normale alla superficie, a un punto lungo lo spigolo, è il risultato di una interpolazione lineare delle normali ai due vertici di quello spigolo. LaSi determinazionepuò dideterminare una normale a un punto della superficie del poligono è raggiungibile alla stessa maniera del calcolo di shading a quel punto con la tecnica di Gouraud.
#Calcolare la normale alla superficie visibile, in un punto localizzato tra i due spigoli, tramite l'interpolazione lineare delle normali alle intersezioni di questi due spigoli con un piano di scansione (''scan plane'') passante attraverso il punto preso in considerazione.
# Concludere con la generazione di una normale interpolata <math>\mathrm{N}_p</math> per ogni pixel <math>p</math>, applicando infine il modello di illuminazione lungo ciascuna ''scan line'' per calcolare l'intensità di ciascun punto della superficie.<ref name=":12" />
Line 85 ⟶ 86:
 
*{{Cita libro|autore=James D. Foley|autore2=Andries van Dam|autore3=Steven K. Feiner|autore4=John F. Hughes|titolo=Computer Graphics. Principles and Practice. Second Edition in C|anno=1996|editore=Addison-Wesley Publishing Company, Inc.|lingua=en|cid=Foley|ISBN=9780201848403}}
*{{Cita libro|autore=Steven J. Janke|titolo=Mathematical Structures for Computer Graphics|data=14 novembre 2014|editore=John Wiley & Sons Inc.|lingua=en|cid=Janke|ISBN=9781118712191}}
*{{Cita libro|autore=John F. Hughes|autore2=Andries Van Dam|autore3=Morgan McGuire|autore4=David F. Sklar|autore5=James D. Foley|autore6=Steven K. Feiner|autore7=Kurt Akeley|titolo=Computer Graphics. Principles and Practice|edizione=3|data=28 febbraio 2009|editore=Addison-Wesley Professional|lingua=en|cid=Hughes|ISBN=9780321399526}}
*{{Cita libro|autore=Riccardo Scateni|autore2=Paolo Cignoni|autore3=Claudio Montani|autore4=Roberto Scopigno|titolo=Fondamenti di grafica tridimensionale interattiva|data=1° giugno 2005|editore=McGraw-Hill Education|lingua=italiano|ISBN=9788838662157|cid=Scateni}}