Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.

Slides:



Advertisements
Presentazioni simili
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Advertisements

Ombre e riflessioni in tempo reale
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.
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 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Laboratorio di Linguaggi lezione IV: tipi definiti dallutente Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 1/40 Esercizio Rasterizzazione (risultato.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
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.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Lezione 7: rasterizzazione la fabbrica dei frammenti Università dellInsubria Facoltà di Scienze MFN - Varese Corso di Laurea.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione III: tipi base, espressioni, type-cast Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08.
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 Lezione.
Introduzione alla grafica digitale 2005,6,7,8,9,.. Matjaž Hmeljak.
Culling e Sorting Giancarlo Todone
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
Determinazione delle superfici visibili
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Effetti fotorealistici
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.
UNIVERSITÀ DEGLI STUDI DELLINSUBRIA Facoltà di Scienze matematiche, fisiche e naturali Corso di Laurea in SCIENZE DELLA COMUNICAZIONE Dott. Nicola AMATO.
Programmazione grafica 1
Superfici nascoste Daniele Marini.
1 Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Sistemi Multimediali II Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Dipartimento di Matematica
Transcript della presentazione:

Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione 9: davanti e dietro. rimozione delle superfici nascoste

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Rimozioni delle superfici nascoste Gli oggetti più vicini devono coprire quelli più lontani –gli oggetti lontani sono "occlusi" da quelli più vicini

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Rimozioni delle superfici nascoste Non e' occlusion culling –che puo' solo rimuovere interi triangoli occlusi (magari a gruppi) –che è solo una ottimizzazione Back-face culling non basta –esempio: superfici non back-facing, non totalmente occluse ma parzialemnte occluse

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Rimozioni delle superfici nascoste Soluzione 1: –dividere ogni triangolo parzialmente occluso in parte visibile e parte occlusa? facendo una operazione di clipping Come si trovano le coppie occluso/occlusore? Clipping di un triangolo e un altro? E dove, nel pipeline HW? SOLUZIONE IMPROPONIBILE

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Rimozioni delle superfici nascoste Soluzione 2: –disegnare solo poligoni interi, ma nell'ordine giusto (front-to-back) –noto come "algoritmo del pittore"

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) Data una scena (composta da primitive) –ordinare le primitive per profondità dalla più remota alla più vicina al punto di vista –mandarle tutte (in ordine) Scomodo! Poco efficente! Pensare al progetto che abbiamo fatto.

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice DOVE? x y z v0v0 v1v1 v2v2 v0v0 v1v1 v2v2 prima di mandare i triangoli. Fatto dalla CPU !

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) Data una scena (composta da primitive) –ordinare le primitive per profondità –mandarle tutte (in ordine) Sorting! Complessità pesudolineare col numero di primitive. in comp graph, peggio di lineare vuol dire MALE Una primitiva non ha una sola profondità! piuttosto ha una profondità max e una min

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) Ma va prima C o D? Ma poi, esiste sempre un "ordine giusto"? La primitiva A può essere disegnata per prima

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) La primitiva A può essere disegnata per prima Ma va prima C o D? Ma poi, esiste sempre un "ordine giusto"? – NO! intersezioni – NO! cicli di sovrapposizioni

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) Oneroso –sorting: (n log (n)) –e nella parte software! Mal adattato allo schema HW –deve lavorare in spazio occhio...ma prima della proiezione HW ?! –lavorare globalmente su tutta la scena prima di mandare la prima primitiva Scomodo all'atto pratico –le primitive sono già "ordinate" semanticamente (scene-graph) Test difficili –in acluni casi (quando gli intervalli min z e max z non sono disgiunti) Bisogna comunque fare clipping –in altri casi (intersezione, cicli)

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo del pittore (depth sorting) In pratica, viene usato solo quando e' facile ordinare preventivamente le primitive –in fase di preprocessing Esempio: terreno come campo di altezza

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Rimozioni delle superfici nascoste Soluzione 3: –rimuovere le superfici nascoste con un TEST PER FRAMMENTO –algoritmo dello "Z-buffer" o "Depth-buffer"

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo dello z-buffer Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Depth buffer computazioni per frammento profondità per ogni frammento RGB finale per ogni frammento

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo dello z-buffer Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Depth buffer computazioni per frammento Transform. Metti la z finale come attributo aggiuntivo Interpola la z (come tutti gli attributi) depth test Frammento con screen coordinates (x,y) e attributo interpolato z: if ( z <= DepthBuffer[x,y] ) { Scrivi frammento DepthBuffer[x,y] = z } else scarta (KILL) frammento

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo dello z-buffer Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice Depth buffer computazioni per frammento ho bisogno di precisione! almeno 16 bits

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo dello z-buffer: esempio = =

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo dello z-buffer: proprietà Non dipende dall'ordine delle primitive Funziona su tutto –anche su: Operazione per frammento –Viene svolto nelle "computazioni per frammento" Adatto all'implementazione HW

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a Algoritmo dello z-buffer: difettucci Consumo memoria –depth buffer = mezzo screen buffer Sia legge che scrive su dati condivisi –(l'implementatore HW deve fare attenzione) Problemi di aliasing sulla z –quando la precisione non e' sufficiente –ad esempio, se si renderizzano due superfici parallele molto vicine (problama dello "z-fighting") Male con le superfici semitrasparenti –come vedremo

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a In OpenGL Devo Abilitare il depth test: glEnable(GL_DEPTH_TEST); primitive qui pixels tutto il pipeline (proiezione, setup, rasterizzazione...) stato di OpenGL manipolazioni di stato (es. settare la matrice) Posso anche decidere le condizioni per passare il test: glDepthFunc( GL_LESS ) GL_NEVER GL_EQUAL GL_LEQUAL GL_GREATER GL_NOTEQUAL GL_LESS GL_GEQUAL GL_ALWAYS (dafault)

M a r c o T a r i n i C o m p u t e r G r a p h I c s / 0 7 U n i v e r s i t à d e l l I n s u b r i a In OpenGL e SDL Devo creare il depth buffer: SDL_Init(SDL_INIT_VIDEO); SDL_SetVideoMode(640, 480, 0, SDL_OPENGL); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); Quando cancello lo schermo, devo anche cancellare il depth buffer... glClear( GL_COLOR_BUFFER_BIT );... | GL_DEPTH_BUFFER_BIT