Shading e smoothing Daniele Marini Corso Di Programmazione Grafica aa2005/2006.

Slides:



Advertisements
Presentazioni simili
Le forme dello spazio Caffè Scienza. Associazione formaScienza.
Advertisements

Attività di Laboratorio di
Geometria analitica dello spazio
Curve e Superfici Il mondo non è fatto di rette e poligoni.
Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.
. . Risultante e momento risultante di un insieme di vettori applicati
MODELLI LUCE.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Costruzione di Interfacce Lezione 7 Shading
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Condizionamento dei segnali di misura
G. Pugliese, corso di Fisica Generale
Il moto armonico Altro esempio interessante di moto è quello armonico caratterizzato dal fatto che l’accelerazione è proporzionale all’opposto della posizione:
coordinate utente e di finestra
INFORMATICA GRAFICA – SSD ING-INF/05 Sistemi di elaborazione delle informazioni a.a. 2007/2008 Esercitazione OpenGL.
Prof. Giovanni Raho A.A Usabilità Informatica Applicata CDL Scienze della Comunicazione scritta ed ipertestuale.
Architetture per la sintesi di immagini Daniele Marini Gennaio 2000.
INTERPOLAZIONE Si parla di processo di interpolazione quando, conoscendo una serie di dati, sperimentali o statistici, riguardo ad un evento, si vuole.
1 Modelli di Illuminazione Daniele Marini. 2 Obiettivo Visualizzare scene cercando di simulare al meglio la realtà Interazione luce-materiali –Modellare.
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
Smoothing Daniele Marini.
Modellare 1 Daniele Marini.
1 Effetti impressionistici Daniele Marini. 2 Tecniche discrete di manipolazione del frame buffer: –Texture mapping –Antialiasing –Compositing –Alpha blending.
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
Enrico Lo Gatto Cranfield University
Determinazione delle superfici visibili
Illuminamento e Shading
Curve e superfici parametriche
LA CIRCONFERENZA.
Modelli Globali: Ray Tracing
Daniele Marini, Maurizio Rossi
Texturing - Tessiture Daniele Marini.
Daniele Marini Con contributi di Maurizio Rossi
Le ombre proiettate Daniele Marini.
1 Scan conversione di poligoni Daniele Marini. 2 Test interno-esterno Scan conversione di un poligono = decidere se pixel interno Test di intersezione:
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Corso Di Programmazione Grafica
Enrico Lo Gatto Cranfield University
Programmazione grafica 1
Superfici nascoste Daniele Marini.
1 Visualizzazione scientifica Daniele Marini. 2 Visualizzazione scientifica Trovare un modo per rendere i risultati di un calcolo scientifico, o rilevati.
due parole sull’interpolazione
Modelli di Illuminazione
Intersezioni e distanze
Modelli di Illuminazione Modelli locali Daniele Marini Corso Di Programmazione Grafica aa2005/2006.
Intersezioni e distanze
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Trasformazioni in OGL Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2005/2006.
Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006.
Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.
Intersezioni e distanze Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Modelli di Illuminazione Modelli locali
Primitive OpenGL Corso di Programmazione Grafica e Laboratorio Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Controllare le proiezioni
La geometria analitica
26 maggio Co.Ge.A.P.S. “Ordini, Collegi ed Associazioni in primo piano nella certificazione dei percorsi formativi degli operatori sanitari” Napoli.
1 Smoothing Daniele Marini. 2 Calcoli sui vettori Vettore normale equazione del piano: ax+by+cz+d=0; si può anche scrivere come luogo: e p è un qualunque.
Data una carica puntiforme Q
Due parole sull’interpolazione Daniele Marini. Due problemi trovare una funzione incognita a partire da dati campione –che assuma nei punti campione il.
Campo Elettrico Definizione operativa di campo elettrico: Il vettore campo elettrico associato ad una determinata carica sorgente Q, posta in un.
Transcript della presentazione:

Shading e smoothing Daniele Marini Corso Di Programmazione Grafica aa2005/2006

Programmazione Grafica aa2005/20062 Scopo Raffigurare forme con superfici curve rappresentate come poliedri Il modello di illuminazione determina il valore di colore in punti significataivi (vertici per metodo di Gourad, punti intermedi per metodo di Phong) Si tratta di un problema di approssimazione o interpolazione Occorre stimare la curvatura in ogni punto, e il gradiente della curva approssimante

Programmazione Grafica aa2005/20063 Calcoli sui vettori Vettore normale equazione del piano: ax+by+cz+d=0; si può anche scrivere come luogo: e p è un qualunque punto nel piano; il vettore n è dato da:

Programmazione Grafica aa2005/20064 In generale possiamo partire da tre punti non allineati: p 0, p 1, p 2 con i quali determiniamo il piano (superfici approssimate con poliedri triangolarizzati). Le differenze p 2 - p 0 e p 1 - p 0 sono coplanari e il loro prodotto dà la normale: n = (p 2 - p 0 ) x (p 1 - p 0 ) L’ordine è rilevante

Programmazione Grafica aa2005/20065 Il calcolo del gradiente di superfici curve dipende da come la superficie è rappresentata (forma parametrica o forma implicita). Es. sfera - equazione implicita f(x,y,z): x 2 + y 2 + z 2 -1=0 In forma vettoriale: f(p): p.p -1 = 0 Il vettore gradiente è dato da:

Programmazione Grafica aa2005/20066 Se la sfera è rappresentata in forma parametrica il metodo di calcolo cambia: La normale si può ricavare dal piano tangente in p:

Programmazione Grafica aa2005/20067 Individuano due vettori tangenti il cui prodotto vettore determina la normale - poiché ci interessa solo la direzione si può dividere per cos(u) ottenendo un vettore unitario

Programmazione Grafica aa2005/20068 Quando calcolare le normali? L’architettura a pipe line dei sistemi di rendering prevede che la normale di una faccia sia nota a priori (viene elaborato un vertice per volta e non tutta l’informazione è disponibile) in generale è compito del programma applicativo calcolare la normale. OpenGL permette di associare a ogni vertice una normale (che dobbiamo calcolare noi nell’applicativo): glNormal3f(nx,ny,nz); glNormal3fv(pointer_to_normal);

Programmazione Grafica aa2005/20069 Shading di poligoni (flat shading) N, V ed L variano su ogni poligono se si assume osservatore distante e sorgente di luce distante ( in OGL si setta a falso il flag near_viewer ) V e L sono costanti anche N è quindi costante sull’intero poligono Il calcolo di shading viene fatto per l’intero poligono una sola volta

Programmazione Grafica aa2005/ OGL e flat shading glShadeModel(GL_FLAT); La normale che OGL utilizza è quella associata al primo vertice del poligono Per i triangle strip OGL usa la normale del terzo vertice per il primo triangolo, la normale del quarto per il secondo e così via Per altre primitive valgono regole simili (vedi manuali)

Programmazione Grafica aa2005/ Triangle strip

Programmazione Grafica aa2005/ Flat vs Smooth Flat shading Smooth shading

Programmazione Grafica aa2005/ Interpolazione essenziale nei problemi di animazione: –date due posizioni “chiave” relative al fotogramma al tempo t 0 e al tempo t 1 determinare le posizioni intermedie relative a ogni singolo fotogramma –occorre garantire regolarità nel movimento –le posizioni possono riguardare oggetti, fotocamera o altro

Programmazione Grafica aa2005/ Interpolazione Lineare Definisce un percorso rettilineo tra due punti in uno spazio n-dimensionale Una dimensione di interpolazione

Programmazione Grafica aa2005/ Interpolazione Lineare Data due punti P 1 e P 2 definisco una funzione nel parametro t  [0,1] P(t) = P 1 + t (P 2 – P 1 ) = (1-t)P 1 + t P 2 P1P1 P2P2 t=0 t=1 P(t)

Programmazione Grafica aa2005/ Interpolazione Lineare Nel piano, dati due punti (x 1,y 1 ) e (x 2, y 2 ) si vuole calcolare (x P, y P ) conoscendo il valore di x P x1x1 x2x2 xPxP y1y1 y2y2 y P = ? dy y 2 -y 1

Programmazione Grafica aa2005/ Interpolazione Lineare Si possono usare tecniche incrementali per accelerare il calcolo

Programmazione Grafica aa2005/ Interpolazione Bi-lineare Considero due dimensioni di interpolazione Utilizzato per esempio all’interno di griglie regolari (es. texture) Peso i punti con delle aree P3P3 P4P4 P1P1 P2P2 P A1A1 A3A3 A2A2 A4A4

Programmazione Grafica aa2005/ Interpolazione quadratica e cubica L’interpolazione lineare calcola i valori intermedi utilizzando l’equazione della retta (grado 1) passante per i due punti Possiamo considerare anche equazioni di grado più alto (secondo o terzo) per ottenere interpolazioni più precise, ma abbiamo bisogno di più punti

Programmazione Grafica aa2005/ Curve parametriche Quando interpolo tra due punti l’interpolazione lineare è sufficiente Quando ho più punti posso usare interpolazione lineare tra ogni coppia di punti successivi ma ottengo un percorso che presenta discontinuità di curvatura nei punti

Programmazione Grafica aa2005/ Curve parametriche Per risolvere il problema posso utilizzare una curva di grado stabilito che interpoli o approssimi i punti. La curva avrà equazione Esistono differenti schemi di costruzione della curva (Bezier, B-Spline, NURBS,etc)

Programmazione Grafica aa2005/ Smooth shading (interpolato) Interpolazione di Gouraud glShadeModel(GL_SMOOTH) Interpolazione di Phong

Programmazione Grafica aa2005/ Gouraud Le normali ai vertici di un poliedro vengono interpolate: Gouraud usa interpolazione bilineare per calcolare il colore dei pixel lungo i singoli poligoni, quindi: -prima calcola colore ai vertici -poi interpola colore

Programmazione Grafica aa2005/ Interpolazione bilineare descriviamo i lati in forma parametrica,  è il parametro interpoliamo lungo una linea di scansione

Programmazione Grafica aa2005/ Dipende dall’orientamento

Programmazione Grafica aa2005/ Phong Smoothing Basato sull’interpolazione delle normali il colore si calcola alla fine sul singolo pixel

Programmazione Grafica aa2005/ Gouraud vs. Phong shading hardware veloce continuo fino al I ordine effetti lucentezza limitati (migliorano se si aumenta la triangolazione) software lento continuo fino al II ordine si può applicare modello di Phong per lucentezza

Programmazione Grafica aa2005/ Sorgenti di luce in OGL glLightfv(source, parameter, pointer_to_array) glLightf(source, parameter, value) I parametri sono: Posizione (direzione) della sorgente Livelli di Ambiente Diffusa Speculare Associati alla sorgente

Programmazione Grafica aa2005/ GLFloat light0_pos[]={1.0, 2.0, 3.0, 1.0} Se si pone quarta componente a 0 la sorgente è all’infinito e definita come “direzione” GLFloat light0_dir[]={1.0, 2.0, 3.0, 0.0} GLFloat diffuse0[]={1.0, 0.0, 0.0, 1.0} GLFloat ambient0[]={1.0, 0.0, 0.0, 1.0} GLFloat specular0[]={1.0, 0.0, 0.0, 1.0} Sorgente bianca con componenti di tutti e tre i tipi:

Programmazione Grafica aa2005/ glEnable{GL_LIGHTING}; glEnable{GL_LIGHT0}; glLightfv(GL_LIGHT0, GL_POSITION, light0_pos); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse0); glLightfv(GL_LIGHT0, GL_SPECULAR, specular0); Se vogliamo comunque un contributo ambiente indipendente: GLFloat global_ambient[]={0.1, 0.1, 0.1, 1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient);

Programmazione Grafica aa2005/ Se vogliamo inserire un termine di attenuazione glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, a); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, b); glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, c); Si può convertire la sorgente da puntiforme a spot, specificando: direzione GL_SPOT_DIRECTION esponente GL_SPOT_EXPONENT angolo di soglia GL_SPOT_CUTOFF Si usa sempre la glLightf o glLightfv

Programmazione Grafica aa2005/ OGL assume sempre l’osservatore a distanza infinita, in modo da considerare costante la direzione del viewer da ogni punto della scena Per forzare l’osservatore a condizioni di distanza non infinita si usa la: glLightModel(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE)

Programmazione Grafica aa2005/ OGL non si preoccupa di fare shading delle facce nascoste; se si desidera vedere facce nascoste si può forzare con: glLightModel(GL_LIGHT_MODEL_TWO_SIDED,GL_TRUE)

Programmazione Grafica aa2005/ OGL e i materiali GLFloat diffuse1[]={1.0, 0.8, 0.0, 1.0} GLFloat ambient1[]={0.2, 0.2, 0.2, 1.0} GLFloat specular1[]={1.0, 1.0, 1.0, 1.0} glMaterialf(face, value) glMaterialfv(face, type, pointer_to_array) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient1); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse1); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular1);

Programmazione Grafica aa2005/ Con GL_FRONT e GL_BACK si specificano proprietà differenti per le facce frontali e nascoste L’esponente nella componente speculare si specifica con: GL_SHININESS OGL permette di definire oggetti con componente emissiva: GLFloat emission[]={0.0, 0.3, 0.3, 1.0}; glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission)