Computer Graphics Lezione 8: attributi per vertice Università dell’Insubria asdad asdsad fadf asdf asdf asdf asd asdfasdf asd fasdf asdasdf asd asdf asd asdf asd asdf asd Facoltà di Scienze MFN di Varese asdad asdsad fadf asdf asdf asdf asd asdfasdf asd fasdf asdasdf asd asdf asd asdf asd asdf asd Corso di Laurea in Informatica Anno Accademico 2006/07 asdad asdsad fadf asdf asdf asdf asd asdfasdf asd fasdf asdasdf asd asdf asd asdf asd asdf asd Marco Tarini Preambolo: • Le coordinate baricentriche Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Cosa è un segmento? V2 V1 con v1 , v 2 R 2 o R 3 o 4 R ... Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Cosa è un segmento? 0.0 v+1 + 1vv2 0.1 v 0.9 1 0.66 v1 + 0.33 v2 2 0.5 v1 + 0.5 v2 0.75 v1 + 0.25 v2 ≪ x è una interpolazione V2 V1 1 v1 + 0 v2 di v1 e v2 ≫ posso definirlo cosi': un segmento di vertici v1 e v2 é l'insieme di tutti i punti x esprimibili come x = a v1 + b v2 a e b scalari positivi con a +b=1 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Parentesi notazione interpolazione: V1 x x = a v1 + b v2 V2 a e b scalari positivi con a + b = 1 (quindi 0 ≤ a ≤ 1 e 0 ≤ b ≤ 1 ) estrapolazione: V1 V2 x x = a v1 + b v2 a e b scalari positivi con a + b = 1 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Cosa è un triangolo? V3 V2 V1 con v1 , v 2 , v 3 R 2 o R 3 o 4 R ... ≪ é l'insieme di tutti i punti x tali che... ≫ Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Cosa è un triangolo? V3 p V1 q V2 q = k1 v1 + k2 v2 k1 + k2 = 1 k1,k2 > 0 p = h1 v3 + h2 q h1 + h2 = 1 h1,h2 > 0 esercizio: sostituiamo e... Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Cosa è un triangolo? V3 V2 V1 un triangolo di vertici v1 v2 v3 é l'insieme di tutti i punti x esprimibili come x = a1 v1 + a2 v2 + a3 v3 a1 a2 a3 scalari positivi a1 + a2 + a3 = 1 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Per esempio... 0 v1 + 0 v2 + 1 v3 0.33 v1 + 0.33 v2 +0 0.33 v3v2 + 0 v3 v1 + 1 (il baricentro del triangolo) V 0.5v v+1 + 0.5vv2 + 0 v3 0.65 v +30.2 0.15 1 2 3 (punto in mezzo al lato v1 v2) V2 V1 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Ebbene... V3 V2 V1 dati a1 a2 a3 scalari tali positivi con a1 + a2 + a3 = 1 → x = a1 v1 + a2 v2 + a3 v3 é un punto del triangolo Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Ma anche... V3 V2 V1 dato un punto p nel triangolo → a1 a2 a3 tali che p = a1 v1 + a2 v2 + a3 v 3 e a1 a2 a3 sono positivi e a somma 1 esistono unici diciamo che a1 a2 a3 sono le coordinate baricentriche di p Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Le coordinate baricentriche • Concetto FONDAMENTALE V3 p V2 V1 p ha coordinate baricentriche (a1 a2 a3) sse p = a1 v1 + a2 v2 + a3 v3 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Le coordinate baricentriche Interpretazione fisica (storica) (buffa) p ha coordinate baricentriche (a1 a2 a3) sse é il baricentro di: V3 V1 a3 Kg a1 Kg p V2 a2 Kg Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Le coordinate baricentriche Interpretazione geometrica 1 V3 p k 1 V1 V2 h p = v1 + h ( v2-v1 ) + k ( v3-v1 ) Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Coordinate baricentriche: improtante proprietà R3 R2 f( v3 ) V3 p trasformazione affine f f(p) f( v2 ) V2 V1 p ha coord. baricentriche a,b,c nel triangolo v1 v2 v3 f( v1 ) f(p) ha coord. baricentriche a,b,c nel triangolo f(v1) f(v2) f(v3) Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Le coordinate baricentriche come rapporti fra aree • Quali sono le coord baricentriche di un punto p? V3 A1 A2 p V2 A3 V1 A1 a1 Atot p = a1 v1 + a2 v2 + a3 v3 A2 a2 Atot A3 a3 Atot Atot A1 A2 A3 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Preambolo: • Le coordinate baricentriche Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria associamo degli attributi ai vertici che mandiamo es: colore RGB rasterizer punti setup rasterizer triangoli setup rasterizer segmenti qui gli attributi possono subire varie compuatzioni computazioni per frammento setup Frammenti & attributi interpolati Vertici proiett & attributi computati computazioni per vertice Vertici & loro attributi Attributi nel pipeline qui gli attributi vengono interpolati pixel finali (nello screen-buffer) ogni frammento avrà una valore interpolato degli attributi per vertice Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Attributi nella rasterizzazione • Quindi il rasterizer deve fare DUE cose: 1 trovare i frammenti che compongono la primitiva • e.g. i frammenti interni al triangolo 2 interpolare gli attributi per questi frammenti • tramite le coordinate baricentriche • Il rasterizer produce frammenti CON attributi associati Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Attributi nella rasterizzazione • Idea: – lavoriamo su R2 R NOTA: vero solo per le trasformazioni affini. E' solo una approssimazione per la distorsione prospettica 3 R 2 f( v3 ) V3 p trasformazione affine f f(p) f( v2 ) V2 V1 p ha coord. baricentriche a,b,c nel triangolo v1 v2 v3 f( v1 ) f(p) ha coord. baricentriche a,b,c nel triangolo f(v1) f(v2) f(v3) Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Scan-line rasterizer & attributi • Otteniamo gli attributi per frammento interpolando gli attributi per vertice lungo segmenti (linearmente) • Equivalente ad usare le coordinate baricentriche del frammento come pesi Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Scan-line rasterizer & attributi • Interpoliamo gli attributi: – linearmente sui bordi – e in ogni scanline, tra gli estremi dello span v1 a1 p v2 a2 p interpolato fra a2 e a1 q q interpolato fra a0 e a1 f f interpolato fra p e q v0 a0 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Scan-line rasterizer & attributi • Lo stesso per tutti gli attributi v1 a1, b1, c1... p v2 a2, b2, c2... Ottimaizzatione: si puo' calcolare incrementalme. vediamo come → q f v0 a0, b0, c0... Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Scan-line rasterizer & attributi Primo frammento prodotto: ha come attributo a0 ogni volta che mi sposto 1 pixel a dx: aumento di una costante dx a2 a1 ogni volta che mi sposto 1 pixel in alto: aumento di una costante dy a0 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Scan-line rasterizer & attributi Primo frammento prodotto: ha come attributo a0 ogni volta che mi sposto 1 pixel a dx: aumento di una costante dx a2 8 passi a1 ogni volta che mi sposto 1 pixel in alto: aumento di una costante dy 9 dx + 8 dy = a1 - a0 a0 9 passi Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Scan-line rasterizer & attributi Primo frammento prodotto: ha come attributo a0 ogni volta che mi sposto 1 pixel a dx: aumento di una costante dx a2 11 passi a1 a0 1 passo ogni volta che mi sposto 1 pixel in alto: aumento di una costante dy 9 dx + 8 dy = a1 - a0 dx + 11 dy = a2 - a0 risolvo nella fase di SET-UP di quel triangolo Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Edge functions e attributi • Per i rastertizzatori basati su edge-functions: – useremo la regola delle aree: V3 A1 A2 p V2 A3 V1 A1 a1 Atot p = a1 v1 + a2 v2 + a3 v3 A2 a2 Atot A3 a3 Atot Atot A1 A2 A3 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria Parentesi: area di un triangolo • In R3 posso calcolarla con il prodotto esterno V3 e nel caso particolare di R2 ? proviamo... d1 A V1 d2 V2 il "diviso due" lo possimo ignorare. Tanto ci interessano solo i rapporti fra le aree A = | d1 x d2 | /2 = | (v3 – v1) x (v2 – v1 ) | /2 Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria FlashBack: Edge functions • La funzione il cui segno ci dice in quale semipiano siamo n v0=(x0, y0 ) SI v2 q NO v1=(x1, y1 ) p = (x0 , y0) n = ( - ( y1 -y0 ) , x1 -x0) f(q) = n‧q - n‧p totale: l'edge function per un lato è la coord baricentrica ralativa al vertice opposto (dopo aver diviso per la somma delle 3 edge functions) Marco Tarini ‧ Computer GraphIcs ‧ 2006/07 ‧ Università dell’Insubria