Informatica Grafica - (III anno Laurea Triennale e I anno...

321
Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale del Corso di Laurea in Informatica) Donato D’Ambrosio Dipartimento di Matematica e Centro d’Eccellenza per il Calcolo ad Alte Prestazioni Cubo 22B, Università della Calabria, Rende 87036, Italy mailto: [email protected] homepage: http://www.mat.unical.it/~donato Anno Accademico 2011/12 D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 1 / 321

Transcript of Informatica Grafica - (III anno Laurea Triennale e I anno...

Page 1: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Informatica Grafica(III anno Laurea Triennale e I anno Laurea Magistrale del Corso di

Laurea in Informatica)

Donato D’Ambrosio

Dipartimento di Matematica e Centro d’Eccellenza per il Calcolo ad Alte PrestazioniCubo 22B, Università della Calabria, Rende 87036, Italy

mailto: [email protected]: http://www.mat.unical.it/~donato

Anno Accademico 2011/12

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 1 / 321

Page 2: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione

Introduzione al corso

Introduzione al corso

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 2 / 321

Page 3: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione

Introduzione

Il corso di Informatica Grafica prevede un totale di 5 crediti di cui 2di lezione frontale (24 ore) e d 3 di laboratorio (24 ore)Gli argomenti che saranno trattati nelle lezioni frontali in aula sonoi seguenti:

Programmazione grafica tridimensionale interattiva in OpenGLAlgoritmi fondamentali della Computer GraphicsArgomenti avanzati opzionali

La parte di laboratorio ha lo scopo di sperimentare le tecniche egli algoritmi studiati nella parte teorica

Nota: le lezioni di laboratorio si terranno nel Laboratoriod’Informatica del cubo 31BColoro i quali siano muniti di computer portatile potranno svolgerele esercitazioni sul proprio pc

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 3 / 321

Page 4: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Testi consigliati

Testi consigliati

R. Scateni, P. Cignoni, C. Montani, R. Scopigno. Fondamenti digrafica tridimensionale interattiva. McGraw-HillDave Shreiner, Mason Woo, Jackie Neider, Tom Davis. TheOpenGL Programming Guide - The Redbook, Liberamentescaricabile dal sitohttp://www.opengl.org/documentation/red_book/

Altro materiale reperibile in rete, proposto a tempo debito durantele lezioni di teoria

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 4 / 321

Page 5: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Ricevimento studenti

Ricevimento studenti

Il ricevimento studenti è fissato ogni venerdì alle ore 15:30 nellostudio del docente, Cubo 22B, c/o Centro d’Eccellenza per ilCalcolo ad Alte PrestazioniRicevimenti supplementari devono essere concordati col docente,anche via email

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 5 / 321

Page 6: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Modalità d’esame

Modalità d’esame

Una prova scritta, incentrata principalmente sugli aspettialgoritmici e sui concetti chiave della grafica 3D (ad esempio letrasformazioni); la prova scritta avrà la durata di un’ora e non saràconsentito l’uso di appunti di alcun genereUna prova di laboratorio in cui sarà richiesta la scrittura di una(semplice) applicazione in OpenGL; la prova di laboratorio avrà ladurata di due ore e sarà consentito l’uso di appunti e manualiUn progetto proposto dal docente da realizzare, da soli o ingruppo, a partire dalla seconda metà del corso; l’applicazionesviluppata dovrà essere accompagnata da un’adeguatadocumentazione (estratta ad esempio dai commenti con doxygen)e da una relazione scritta sul lavoro svolto

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 6 / 321

Page 7: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Programma del Corso

Programma del Corso (Programmazione in OpenGL)

Introduzione alla Computer GraphicsDefinizione di Computer GraphicsLe originiSistemi di grafica vettoriale e sistemi di grafica rasterSistemi hardware per la grafica rasterLibrerie graficheEsempi

Introduzione a OpenGLLa libreria grafica OpenGLCosa può fare OpenGLSintassi dei comandi OpenGLOpenGL come macchina a statiLibrerie supplementari di OpenGL: GLU e GLUTSchema di un’applicazione GLUTGestione degli eventi in un’applicazione GLUTCompilazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 7 / 321

Page 8: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Programma del Corso

Programma del Corso (Programmazione in OpenGL)

Stati e Primitive Grafiche di OpenGLColore di sfondo e di disegnoShadingIl sistema di coordinateIl volume visibileAspect ratioDisegno di punti, segmenti (linee) e poligoniPoligoni planari e non planariSpecificare i verticiDisegnare punti linee e poligoniCostrutti all’interno di glBegin() e glEnd()Gli stati di OpenGLDisegno di poligoni non convessiVettori normaliCalcolo delle normali per poligono e per vertice

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 8 / 321

Page 9: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Programma del Corso

Programma del Corso (Programmazione in OpenGL)

Trasformazioni geometriche in OpenGLComposizione della scena e trasformazioniCoordinate dell’osservatore (eye coordinates)Trasformazioni di viewing e di modelingLa dualità modelviewLa trasformazione di proiezioneLa matematica delle trasformazioniIl frustum

Modelli di colore in OpenGLI modelli RGB e HSVCome funziona il monitor: risoluzione e profondità di coloreUso dei colori in OpenGLModelli di illuminazione e materialiAggiungere la luce alla scenaDefinire il tipo di materialeSorgenti e luce direzionale

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 9 / 321

Page 10: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Programma del Corso

Programma del Corso (Argomenti opzionali)

Texture Mapping in OpenGLCaricamento e MappaturaMipmappingTexture coordinates generationobject linear mappingeye linear mappingsphere mappingcube mapping

Effetti speciali in OpenGLBlending, Antialiasing e Fog

Curve e superfici in OpenGLQuadric ObjectsCurve e superfici di Bézier e NURBSEvaluatorsCalcolo automatico delle Normali

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 10 / 321

Page 11: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione Programma del Corso

Programma del Corso (Algoritmi)

Algoritmi di rasterizzazione e clippingRasterizzazioneClippingL’approccio object-oriented vs image-orientedScan Conversion dei segmenti

L’algoritmo di scan conversion DDAL’algoritmo di BresenhamScan Conversion del cerchioScan Conversion dei poligoniFlood fillAlgoritmo Scan-line

ClippingAlgoritmo di Cohen-Sutherland

AntialiasingRimozione delle superfici nascoste

Approcci object-space e image-spaceEliminazione delle back faceL’algoritmo z-buffer

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 11 / 321

Page 12: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics

Introduzione alla Computer Graphics

Introduzione alla Computer Graphics

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 12 / 321

Page 13: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics

Cos’è e di cosa si occupa la Computer Graphics

La Computer Graphics è una branca estremamente vasta earticolata dell’InformaticaSi occupa dello sviluppo e dell’applicazione di tecniche dirappresentazione grafica delle informazioni atte a migliorarel’interazione tra uomo e macchinaOrmai da qualche decennio a questa parte, i calcolatori elettronicisono in grado di produrre grandi quantità di dati, ad esempiocome risultato dell’elaborazione di qualche modello di calcolonumerico; in questo caso, il risultato dell’elaborazione ègeneralmente di tipo numerico e un’opportuna rappresentazionegrafica può in molti casi facilitarne l’interpretazioneSi parla, in questi casi, di Visualizzazione Scientifica

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 13 / 321

Page 14: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics

Esempio di rappresentazione grafica di dati numerici

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 14 / 321

Page 15: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics

Origini della Computer Graphics

Le origini della Computer Graphics si possono far risalire ai primitentativi di utilizzare i tubi a raggi catodici (CRT - Cathode RayTube) come dispositivi di output graficoIl primo calcolatore dotato di un monitor CRT è stato realizzato nel1950 presso l’MIT (Massachusetts Institute of Technology)Un CRT è un dispositivo in grado di trasformare segnali elettrici inimmagini utilizzando campi elettrici per generare fasci di elettroniad alta velocità che, opportunamente indirizzati, colpiscono unoschermo rivestito di materiale fosforescente provocandol’emissione di luce

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 15 / 321

Page 16: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Dispositivi di grafica vettoriale

I primi dispositivi di output grafico entrati in commercio negli annisessanta, e rimasti in uso fino alla metà degli anni ottanta, eranobasati sul concetto di grafica vettorialeIl fascio di elettroni, che va a colpire il rivestimento fosforescentedel CRT, può muoversi direttamente da una posizione all’altra,secondo l’ordine arbitrario dei comandi di displayAnnullando l’intensità del fascio, questo può essere spostato inuna nuova posizione, senza modificare l’immagineA livello concettuale, questi sistemi grafici (bidimensionali)possono essere descritti con due funzioni fondamentali di drawing:

moveto(x, y); lineto(x, y);

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 16 / 321

Page 17: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Dispositivi di grafica raster

La tecnica vettoriale è rimasta in uso fino agli anni ottanta, quandohanno cominciato a diffondersi i sistemi di grafica raster, migliorisotto il profilo delle performace e della persistenza dell’immaginea videoNella grafica raster, ogni immagine è rappresentata tramite unamatrice di punti detti pixel (contrazione della locuzione inglesepicture element), ognuno dei quali corrisponde a una piccola areadell’immagineInizialmente i CRT furono adattati ai sistemi di grafica raster;tuttavia, la tecnologia LCD (Liquid Crystal Display) si è ormaiimposta come standard tecnologico e ha di fatto soppiantato latecnologia CRT

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 17 / 321

Page 18: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Dispositivi di grafica raster: pixmap, frame buffer erasterizzazione

In grafica raster l’elaborazione delle immagini è dunque basata sumatrici di pixel dette pixmap (da pixel map)La modellazione (cioè la definizione concettuale di ciò che si vuolerappresentare) avviene sempre in un contesto di grafica vettoriale,ma per produrre l’immagine finale (rendering) è necessaria unafase ulteriore detta rasterizzazione o scan conversion

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 18 / 321

Page 19: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Dispositivi di grafica raster: esempio di scanconversion

Come è facile intuire, la fase di scan conversion deve esseresufficientemente accurata al fine di ottenere matrici di pixel senzaproblemi di frastagliamento delle immagini

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 19 / 321

Page 20: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Dispositivi di grafica raster: algoritmi di rasterizzazione

Proprio per evitare problemi di questo tipo, esistono numerosialgoritmi di rasterizzazione che hanno il compito di produrrematrici di pixel il più possibile accurateUn fattore critico di tali algoritmi è l’efficienza computazionale; inrelazione alla complessità delle immagini che devono esseregenerate, taluni algoritmi risultano infatti troppo lenti perapplicazioni praticheGli algoritmi di scan conversion saranno oggetto di lezionisuccessive

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 20 / 321

Page 21: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Dispositivi di grafica raster: altri algoritmi

Nei moderni sistemi grafici, oltre agli algoritmi di rasterizzazionesono anche presenti algoritmi specifici per la rappresentazionegrafica di modelli 3DQuando si modellano oggetti 3D, questi sono infatti collocati nelcosì detto volume di vistaSe un oggetto non rientra completamente in tale volume,l’algoritmo che proietta l’oggetto sullo schermo deve tenerneconto (fase di clipping)Alcuni algoritmi di clipping e altri saranno oggetto di lezionisuccessive

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 21 / 321

Page 22: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Sistemi hardware di grafica raster

L’hardware dei sistemi di grafica raster può essere organizzatosecondo due diversi approcciNel primo, la gestione di tutte le funzioni grafiche è affidata allaCPUNel secondo, alla CPU è affiancato un display processor, chesolleva la CPU dall’elaborazione graficaUn’ulteriore differenza deriva dalla localizzazione del frame bufferche può essere localizzato nella memoria centrale del calcolatoreo (meglio) in una memoria dedicata del sottosistema graficoIn ogni caso, un controllore video scandisce periodicamente ilframe buffer (in particolare il color buffer) e lo mostra sul display auna frequenza prefissata (ad esempio 60 volte al secondo)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 22 / 321

Page 23: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Sistemi hardware di grafica raster

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 23 / 321

Page 24: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Grafica vettoriale e grafica raster

Sistemi hardware di grafica raster

Le attuali schede video prevedono display processors e memorielocali ad alte prestazioniViste le sempre crescenti capacità di elaborazione dei displayprocessors, questi ultimi vengono chiamati GPU (GraphicProcessor Unit)Benché la memoria del display processor sia ormai integrata nelleschede grafiche, queste ultime devono in ogni caso accedere allamemoria centrale dell’elaboratore dove risiedono le informazioniche devono essere utilizzate per la costruzione del frame bufferLa velocità d’accesso da parte della GPU alla memoria centrale ea quella locale, insieme alla larghezza di banda sono fattori criticiper le prestazioni di un sistema grafico

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 24 / 321

Page 25: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Librerie grafiche: OpenGL

Librerie grafiche e GPU

Le prestazioni di un sistema grafico possono dipenderesignificativamente anche dal tipo particolare di libreria graficautilizzataLe moderne GPU infatti implementano in hardware numeroseprimitive grafiche di alcune librerie specificheImplementare in hardware una primitiva grafica (ad esempio ildisegno di un segmento) vuol dire eseguire l’operazione in un solocolpo risparmiando numerosi cicli di GPU

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 25 / 321

Page 26: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Librerie grafiche: OpenGL

Librerie grafiche e GPU

Di conseguenza, maggiori sono le primitive della libreria graficaimplementate in hardware, tanto più conveniente è utilizzarequella libreriaTra l’altro, lo sviluppo tecnologico delle GPU si sta orientando siaverso esasperazioni sempre più spinte dell’architettura di calcolo,sia verso l’implementazione di nuove primitive in hardwareAttualmente la quasi totalità delle schede grafiche supporta lelibrerie OpenGL e Direct3D

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 26 / 321

Page 27: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Librerie grafiche: OpenGL

Librerie grafiche e GPU: Direct3D

Direct3D è un’API Microsoft per lo sviluppo di applicazionigrafiche 2D e 3DNumerose schede grafiche (es. AMD/ATI e nVIDIA) supportanoDirect3DA scapito della portabilità, è rilasciata solo per piattaformeWindowsÈ una libreria a basso livello

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 27 / 321

Page 28: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Librerie grafiche: OpenGL

Librerie grafiche e GPU: OpenGL

OpenGL (Open Graphic Library) è una libreria portabile per losviluppo di applicazioni grafiche interattive 2D e 3DÈ stata rilasciata per la prima volta nel 1992 come versione apertadella libreria GL (Graphic Library) della Silicon Graphics che fino aquel momento deteneva lo stato dell’arte tecnologico nel campodella Computer GraphicsAttualmente OpenGL è disponibile per diversi sistemi operativi, tracui:

Windows e Mac OS XLinux e Unix (all flowers)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 28 / 321

Page 29: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Librerie grafiche: OpenGL

OpenGL (http://www.opengl.org/)

Un consorzio indipendente, l’OpenGL Architecture Review Board,definisce le specifiche della libreriaFanno parte del consorzio numerose aziende interessate allosviluppo della computer graphics, tra cui:

3DLabs, AppleAMD, DELLIBM, IntelnVIDIA, SGIOracle

Ogni cambiamento apportato alla libreria deve essere approvatodall’ARB affichè possa far parte della release successiva

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 29 / 321

Page 30: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Librerie grafiche: OpenGL

OpenGL (http://www.opengl.org/)

L’ultima versione di OpenGL è la 4Non tutte le case costruttrici si sono adeguate all’ultima versionedello standard e implementano versioni precedenti nei propridriversTra i suoi punti di forza possiamo elencare i seguenti:

Standardizzazione, stabilità, affidabilità e portabilitàLanguage bindings per C/C++ Fortran, Ada, Python, Perl e JavaMaggiore semplicità d’utilizzo rispetto a Direct3DDocumentazione:

Red Book(http://www.opengl.org/documentation/red_book_1.0/)Blue Book (http://www.rush3d.com/reference/opengl-bluebook-1.0/)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 30 / 321

Page 31: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Esempi applicativi

Alcuni software basati su OpenGL

Figura: Unreal(http://www.unrealtournament.com)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 31 / 321

Page 32: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Esempi applicativi

Alcuni software basati su OpenGL

Figura: Blender (http://www.blender.org)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 32 / 321

Page 33: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Esempi applicativi

Alcuni software basati su OpenGL

Figura: Chimera (www.cgl.ucsf.edu/chimera)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 33 / 321

Page 34: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione alla Computer Graphics Esempi applicativi

Alcuni software basati su OpenGL

Figura: VTK-Visualization Toolkit (http://www.vtk.org/)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 34 / 321

Page 35: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

Introduzione a OpenGL

Introduzione a OpenGL

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 35 / 321

Page 36: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

Le librerie grafiche

Il progresso dei dispositivi hardware di output grafico hadeterminato, in modo del tutto naturale, un’evoluzione delleapplicazioni software e ha portato alla realizzazione di libreriegrafiche di alto livello, indipendenti da qualsiasi periferica graficadi input e output e con una portabilità simile a quella dei linguaggidi programmazione di alto livello (quali FORTRAN o C)Il modello concettuale alla base delle prime librerie grafiche(bidimensionali) realizzate è quello ora definito modello penplotter, con chiaro riferimento all’omonimo dispositivo output

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 36 / 321

Page 37: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

Le librerie grafiche

Un pen plotter produce immagini muovendo una penna lungo duedirezioni sulla carta; la penna può essere alzata e abbassatacome richiesto per creare l’immagine desiderataDiverse librerie grafiche, come ad esempio il PostScript, creanoimmagini in modo simile al processo di disegnare una figura su unpezzo di carta: l’utente ha a disposizione una superficiebidimensionale, e vi muove sopra una pennaQuesti sistemi grafici possono essere descritti con due funzioni didrawing:

moveto(x, y); lineto(x, y);

Aggiungendo la possibilità di cambiare penna per variare il coloree lo spessore delle linee, si ha un sistema grafico semplice macompleto

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 37 / 321

Page 38: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

Le librerie grafiche

Il modello pen plotter bidimensionale (tipico dei primi sistemihardware vettoriali) non si estende bene ai sistemi grafici 3D; adesempio, se vogliamo usare un modello pen plotter per produrreun’immagine di un oggetto tridimensionale su una superficiebidimensionale, è necessario proiettare sulla superficie punti dellospazio tridimensionalePer questo, è preferibile utilizzare un’interfaccia software chepermetta di lavorare nel dominio (3D) del problema (Modeling) edi utilizzare il computer la produzione dell’immagine finale(Rendering)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 38 / 321

Page 39: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

La libreria grafica OpenGL

OpenGL è un’interfaccia software per hardware graficoNell’ultima versione (la 4.0) OpenGL consiste di più di 250comandi (oltre 200 nel core di OpenGL; oltre 50 nella OpenGLUtility Library)Poiché uno degli obbiettivi del progetto era quello di garantirel’indipendenza dalla particolare piattaforma hardware/software,OpenGL non contiene comandi per la creazione/gestione difinestre, né per la gestione dell’input da tastiera o mouse

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 39 / 321

Page 40: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

La libreria grafica OpenGL

Allo stesso modo, OpenGL non prevede funzioni per ladescrizione di modelli 3DCon OpenGL è possibile però realizzare modelli complessi apartire di un piccolo insieme di primitive geometricheIn realtà, alcune funzioni ad alto livello sono contenute nellaOpenGL Utility Library (ad esempio le quadratiche o le curve esuperfici NURBS).GLU è ormai parte integrante di ogni implementazione di OpenGL

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 40 / 321

Page 41: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

Cosa può fare OpenGL

Costruire forme 2D e 3D anche molto complesse a partire daprimitive geometriche semplici come punti linee e poligoniDisporre oggetti nel piano 2D o nello spazio 3DScegliere un punto da cui osservare la scenaCalcolare il colore degli oggetti come risultato dell’effetto dicondizioni di illuminazione, dell’applicazione di texture,dell’assegnazione esplicita da parte del programmatoreRasterizzazione, cioè conversione della rappresentazionematematica degli oggetti in pixel sullo schermo

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 41 / 321

Page 42: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL

Un esempio preliminare (cfr. Red Book)

#include <whateverYouNeed . h>

void main ( ) {In i t ia l i zeAWindowPlease ( ) ;

g lC lea rCo lo r ( 0 . 0 , 0 .0 , 0 .0 , 0 .0 ) ;g lC lea r (GL_COLOR_BUFFER_BIT) ;g l C o l o r 3 f ( 1 . 0 , 1 .0 , 1 .0 ) ;glOrtho2D ( 0 . 0 , 1 .0 , 0 .0 , 1 .0 ) ;g lBegin (GL_POLYGON) ;

g lVe r tex2 f (0 .25 , 0 .25) ;g lVe r tex2 f (0 .75 , 0 .25) ;g lVe r tex2 f (0 .75 , 0 .75) ;g lVe r tex2 f (0 .25 , 0 .75) ;

glEnd ( ) ;g lF lush ( ) ;UpdateTheWindowAndCheckForEvents ( ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 42 / 321

Page 43: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Sintassi dei comandi

Sintassi dei comandi OpenGL

I comandi OpenGL iniziano con il prefisso gl e continuano con ilnome specifico del comando utilizzando l’iniziale maiuscola perogni parola. Ad esempio:

glClearColor()

Le costanti sono in maiuscolo, iniziano con il prefisso GL_ eusano il carattere underscore per separare le diverse parole. Adesempio:

GL_COLOR_BUFFER_BIT

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 43 / 321

Page 44: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Sintassi dei comandi

Sintassi dei comandi OpenGL

I comandi OpenGL possono terminare con dei suffissi del tipo 3f,3fv e altri. Ad esempio:

glColor3f(1.0,0.0,0.0);glVertex3f(0.25,0.25,0.25);

In particolare, il numero 3 indica che il comando accetta 3argomenti, mentre la lettera f indica che gli argomenti sono di tipofloat (32 bit).Se negli esempi precedenti fosse stata presente anche la lettera vle funzioni avrebbero accettato un array di 3 elementi di tipo float:

GLfloat color_array[]={1.0,0.0,0.0};glColor3fv(color_array);

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 44 / 321

Page 45: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Sintassi dei comandi

Sintassi dei comandi OpenGL

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 45 / 321

Page 46: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Sintassi dei comandi

Sintassi dei comandi OpenGL

Nell’ultima colonna della tabella precedente sono riportati i tipiOpenGL, utili per ragioni di compatibilità con implementazioni diOpenGL non scritte in linguaggio CL’uso dei tipi OpenGL garantisce uniformità di comportamentodell’applicazione rispetto all’implementazione OpenGLRitornando alle istruzioni OpenGL, i due comandi seguenti sonoequivalenti eccetto per il fatto che il primo specifica le coordinatecome numeri interi, il secondo come float a 32 bit:

glVertex2i(1,3); glVertex2f(1.0,3.0);

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 46 / 321

Page 47: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL La macchina a stati

OpenGL come macchina a stati

OpenGL è una macchina a statiAd esempio, il colore corrente (cioè attualmente in uso) è unavariabile di stato: una volta settato, gli oggetti sono disegnati conquel colore fino a quando esso non viene modificatoAltre variabili di stato determinano il tipo di proiezione corrente(ortogonale o prospettica), la posizione e le caratteristiche delleluci e dei materiali o la presenza della nebbia nella scenaLe funzioni glEnable() e glDisable() sono utilizzate per abilitare edisabilitare alcune variabili di stato e quindi alcune funzionalità diOpenGL (es. la nebbia)Per default, la maggior parte sono disattivati, come ad esempio leluci o la nebbia

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 47 / 321

Page 48: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL La macchina a stati

Gli stati di OpenGL: interrogazione stati complessi

glIsEnabled() è utile per interrogare gli stati OpenGL del tipo on/offOpenGL, tuttavia, gestisce stati più complessi: ad esempio,l’istruzione glColor3f() setta 3 valori RGB del più articolato statoGL_CURRENT_COLOR; per questo esistono 5 ulteriori funzioni

void glGetBooleanv(GLenum pname, GLboolean *params)void glGetIntegerv(GLenum pname, GLinteger *params)void glGetFloatv(GLenum pname, GLfloat *params)void glGetDoublev(GLenum pname, GLdouble *params)void glGetPointerv(GLenum pname, GLvoid **params)

Ad esempio lo stato del colore può essere ottenuto come segue:

GLf loa t co lo rv [ 4 ] ;g lGetF loa tv (GL_CURRENT_COLOR, co lo rv ) ;g l C o lo r 3 f ( co lo rv [ 0 ] / 2 , co lo rv [ 1 ] / 2 , co lo rv [ 2 ] / 2 ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 48 / 321

Page 49: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL La macchina a stati

Gli stati di OpenGL: gruppi di attributi

OpenGL implementa i gruppi di attributi, che raggruppano variabilidi stato che hanno a che fare con gli stessi oggettiPer esempio, l’attributo GL_LINE_BIT consiste di 5 variabili distato: (1) lo spessore della line, (2) lo stato di attivazione diGL_LINE_STIPPLE, (3) il pattern della linea, (4) il line stipplerepeat counter e (5) lo stato di attivazione di GL_LINE_SMOOTHLe funzioni void glPushAttrib(GLbitfield mask) e void glPopAttrib()permettono di salvare e riattivare gruppi di attributi in un colpo soloDalla versione 1.1 di OpenGL esiste anche un altro stack diattributi accessibile tramite le funzioni glPushClientAttrib() eglPopClientAttrib()Esistono 20 gruppi di attributi e 2 gruppi di attributi client; perdettagli si veda OpenGL Programming Guide IV edition

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 49 / 321

Page 50: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Librerie supplementari di OpenGL

OpenGL fornisce un potente insieme di comandi di rendering abasso livello, e tutti gli oggetti (modelli) ad alto livello devonoessere costruiti sulla base di queste primitiveInoltre, i programmi OpenGL si devono appoggiare ai sistemi afinestre dei differenti sistemi operativiPer fortuna esistono delle librerie esterne al nocciolo principale diOpenGL che permettono di semplificare notevolmente leoperazioni di disegno e di gestione dell’interfaccia grafica

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 50 / 321

Page 51: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

La libreria GLU

La libreria GLU (OpenGL Utitlity Library) contiene circa 50funzioni, costruite sulla base delle primitive OpenGL, checonsentono di semplificare alcune operazioni come l’orientazionedel punto di vista della scena, la tassellazione di oggetti complessitramite poligoni e il rendering di superficiLe funzioni della libreria GLU iniziano col suffisso glu e seguono leconvenzioni dei comandi OpenGL

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 51 / 321

Page 52: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

La librerie per le GUI

Per ogni sistema a finestre è stata sviluppata una libreria specificabasata su OpenGL per la creazione e gestione di interfaccegrafiche utente e per la gestione dell’I/O: GLX (X Window), WGL(Windows), PGL (IBM OS/2) e AGL (Mac OS/MAC OS X)L’uso di queste librerie è ovviamente orientato al particolaresistema operativo e pregiudica la portabilità del softwareQueste librerie sono inoltre abbastanza complesse egeneralmente sono utilizzate per applicazioni avanzate

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 52 / 321

Page 53: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

La libreria GLUT

La libreria GLUT (OpenGL Ultitlity Toolkit) è un toolkitindipendente dal sistema a finestreImplementazioni della GLUT esistono per X Window, MicrosoftWindows e Carbon/Cocoa, il che rende praticamente portabile al100% un’applicazione OpenGL con GUI basata su GLUTPurtroppo non offre tutte le possibilità delle API native dei windowsystems (es. non supporta i menu delle finestre, ma solo i menucontestuali)GLUT è molto semplice da usare ed è ottima per utilizzi didatticiI comandi GLUT iniziano col suffisso glut e seguono leconvenzioni dei comandi OpenGLLink: http://www.xmission.com/~nate/glut.html

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 53 / 321

Page 54: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Include Files

Un’applicazione OpenGL deve almeno includere l’header file gl.h.La libreria GLU è utilizzata nella stragrande maggioranza dellaapplicazioni OpenGL e richiede il file glu.h header file. Così ogniprogramma OpenGL di solito inizia con:#include <GL/gl.h>#include <GL/glu.h>

NOTA: Microsoft Windows richiede anche l’inclusione del filewindows.h prima di gl.h e glu.h#include <windows.h>

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 54 / 321

Page 55: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Include Files

L’header glext.h contiene estensioni di singole case produttrici (es.nVidia) che non fanno ancora parte di gl.h ma che generalmentestanno per essere standardizzate dall’OpenGL ArchitectureReview BoardGeneralmente i file glext.h sono disponibili sui web sites deiproduttori hardware o sul sito web di OpenGLhttp://www.opengl.org/

Il file glext generalmente si include con gli apici e non con leparentesi acute:#include “glext.h”

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 55 / 321

Page 56: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Include Files

Se si usano le librerie per la GUI accennate sopra è necessarioincludere l’header; ad esempio, nel caso di GLX si ha:#include <X11/Xlib.h>#include <GL/glx.h>

Nel caso di WGL (Windows) basta includere:#include <windows.h>

Nel caso si utilizzi la libreria GLUT:#include <GL/glut.h>

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 56 / 321

Page 57: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

Il programma principale è il classico main:

i n t main ( i n t argc , char ∗∗argv ) {/∗

i s t r u z i o n i∗ /return 0;

}

All’interno del main devono essere chiamate alcune funzioni GLUT perl’inizializzazione della libreria, l’apertura della finestra, il ciclo deglieventi da tastiera e mouse e altro

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 57 / 321

Page 58: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

glutInit(int *argc, char **argv) inizializza la libreria GLUT e deve esserechiamata per prima

i n t main ( i n t argc , char ∗∗argv ) {g l u t I n i t ( argc , argv ) ;/∗

i s t r u z i o n i∗ /return 0;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 58 / 321

Page 59: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

glutInitDisplayMode(unsigned int mode) specifica se utilizzare il modoRGBA o il modo color-index; si può inoltre specificare se la finestra èsingle o double buffered e se sono attivi il depth buffer, ecc.

i n t main ( i n t argc , char ∗∗argv ) {g l u t I n i t ( argc , argv ) ;g l u t I n i tD i sp layMode ( GLUT_DOUBLE | GLUT_RGB ) ;/∗

i s t r u z i o n i∗ /return 0;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 59 / 321

Page 60: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

La libreria GLUT

glutInitWindowPosition(int x, int y) specifica la posizione in pixeldell’angolo in alto a sinistra della finestra rispetto al sistema dicoordinate del window systemglutInitWindowSize(int width, int height) specifica le dimensioni, inpixels, della finestraint glutCreateWindow(char *string) crea una finestra con uncontesto OpenGL; l’argomento è la caption della finestra

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 60 / 321

Page 61: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

i n t main ( i n t ∗argc , char ∗∗argv ) {g l u t I n i t ( argc , argv ) ;g l u t I n i tD i sp layMode (GLUT_DOUBLE, GLUT_RGB) ;g l u t I n i tW indowPos i t i on (10 , 20) ;g lu t In i tWindowSize (800 , 480) ;glutCreateWindow ( "An OpenGL window " ) ;/∗

i s t r u z i o n i∗ /return 0;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 61 / 321

Page 62: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

glutDisplayFunc(void (*func)(void)) definisce una event callbackfunctionOgni volta che GLUT determina che il contenuto della finestradeve essere ridisegnato, viene eseguita la callback functionregistrara in glutDisplayFunc()Pertanto è necessario richiamare tutte le funzioni per il ridisegnodella scena nella display callback function

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 62 / 321

Page 63: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

Nota che la funzione glutPostRedisplay(void) può forzare in ognimomento l’esecuzione della display callback functionglutReshapeFunc(void (*func)(int w, int h)) indica quale azionedeve essere eseguita quando la finestra viene ridimensionataglutMainLoop() mostra tutte le finestre create, inizia il processod’ascolto degli eventi, e attiva le display callback functions

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 63 / 321

Page 64: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

#include <GL/ g l u t . h>void d i sp lay ( ) { /∗ i s t r u z i o n i ∗ / } ;void reshape ( i n t w, i n t h ) { /∗ i s t r u z i o n i ∗ / } ;

i n t main ( i n t ∗argc , char ∗∗argv ) {g l u t I n i t ( argc , argv ) ;g l u t I n i tD i sp layMode (GLUT_DOUBLE, GLUT_RGB) ;g l u t I n i tW indowPos i t i on (10 , 20) ;g lu t In i tWindowSize (800 , 480) ;glutCreateWindow ( "An OpenGL window " ) ;glutReshapeFunc ( reshape ) ;g lu tD isp layFunc ( d i sp lay ) ;glutMainLoop ( ) ;return 0;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 64 / 321

Page 65: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Schema di un’applicazione GLUT

glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)) eglutMouseFunc(void (*func)(int button, int state, int x, int y))determinano l’esecuzione di una funzione ogni volta che un tastodella tastiera o del mouse viene premuto o rilasciatoglutMotionFunc(void (*func)(int x, int y)) registra una funzione darichiamare quando il mouse si muove e un tasto ècontemporaneamente premuto

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 65 / 321

Page 66: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Installazione

Il supporto a OpenGL (gl e glu) è offerto dai drivers della schedavideo

In Windows è sufficiente installare Microsoft Visual C++, checontiene gli headers necessariIn Linux è generalmente sufficiente installare alcuni pacchetti dellaparticolare distribuzione (nota che i pacchetti possono variare aseconda della distribuzione e della particolare versione)

GLUT necessita di un’installazione separata sia delle libreriedinamiche che degli header

Per Windows trovate il file glut-3.7.6-bin.zip nei materiali di questalezione, con le istruzioni per una corretta installazionePer Linux trovate il file glut-3.7.6-src.zip con i sorgenti daricompilare (c’è anche il progetto vc++); più semplice è individuareil pacchetto della vostra distribuzione e installare quello

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 66 / 321

Page 67: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Esempio di programma GLUT

Verificate il successo della fase d’installazione eseguendo ilseguente programma che mostra la versione di OpenGL installatasulla vostra macchina e altre informazioni

OpenGLVersion.chello.c

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 67 / 321

Page 68: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Compilazione

Un programma OpenGL necessita il linkaggio in fase dicompilazione di alcune librerieIl programma hello.c utilizza chiamate a funzioni gl e glut ed èsufficiente pertanto linkare le librerie relative a OpenGL e GLUT:

cc hello.c -o hello -lGL -lglut

Se nel programma fossero state presenti chiamate a funzioni GLUallora:

cc hello.c -o hello -lGL -lGLU -lglut

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 68 / 321

Page 69: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Processi in background di un’applicazione GLUT

glutIdleFunc(void (*func)(void)) specifica una funzione che vieneeseguita mentre nessun altro evento deve essere soddisfattoPassare NULL come argomento implica la disattivazione delprocesso in backgroundLa Idle Function può essere utilizzata per l’esecuzione diprocedure di calcolo forzando se necessario il redisplay tramite lafunzione glutPostRedisplay

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 69 / 321

Page 70: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Esempio di programma GLUT con eventi e IdleFunction

Vedi file allegato:double.c

Compilazionecc double.c -o double -lGL -lglut

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 70 / 321

Page 71: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Introduzione a OpenGL Le librerie GLU e GLUT

Materiale di riferimento sul Web

The OpenGL Utility Toolkit (GLUT) Programming Interface APIVersion 3 (il pdf nei materiali di questa lezione):http://www.opengl.org/resources/libraries/glut/spec3/spec3.html

GLUT Tutorialhttp://www.lighthouse3d.com/opengl/glut/

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 71 / 321

Page 72: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL

I fondamenti di OpenGL

I fondamenti di OpenGL

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 72 / 321

Page 73: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La viewport: glViewPort

La vieport è l’area dellafinestra che contiene l’outputgraficoLa funzioneglViewPort(0,0,w,h) riserval’intera area client dellafinestra come area per l’outputgrafico: l’angolo in basso asinistra coincide con il punto(0,0), quello in alto a destracon il punto (w,h);w e h sono infatti il numero dicolonne e di linee dellafinestra in pixel

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 73 / 321

Page 74: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Sistema di riferimento e osservatore

La vieport mostra il rendering della modellazione geometrica chein OpenGL è sempre riferita al seguente sistema di coordinatecartesiano ortogonale

L’osservatore è posto nell’origine, è orientato come l’asse y (nelsenso che il vettore normale n all’osservatore è parallelo all’assey ) e guarda verso le zeta negative

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 74 / 321

Page 75: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Sistema di riferimento e osservatore

Le impostazioni iniziali relative all’osservatore implicano che tuttigli oggetti modellati sulle z positive non risultino visibiliLa trasformazione di viewing consente di ridefinire il punto di vistadell’osservatore posizionandolo in un qualsiasi punto dello spazio3D e specificando la direzione di vistaGeneralmente, la trasformazione di viewing è la prima a esseredefinita in un’applicazione OpenGL subito dopo la trasformazionedi proiezione, descritta di seguito

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 75 / 321

Page 76: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Sistema di riferimento e osservatore

La funzione gluLookAt permette di definire esplicitamente il puntodi vista dell’osservatorevoid gluLookAt ( GLdouble eyex , GLdouble eyey , GLdouble eyez ,

GLdouble centerx , GLdouble centery , GLdouble centerz ,GLdouble upx , GLdouble upy , GLdouble upz )

eyex, eyey, eyez specificano il punto d’applicazionecenterx, centery, centerz specificano il punto verso cui si guardaupx, upy, upz specificano la direzione dell’up vector

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 76 / 321

Page 77: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Le trasformazioni di proiezione

Le trasformazioni di proiezione definiscono forma e dimensionedel volume di vista (ortogonale o prospettico) e il tipo di proiezionedelle primitive geometricheIl volume di vista ortogonale è parallelepipoidale e da luogoproiezioni per raggi perpendicolari al primo piano di clippingIl volume di vista prospettico è a forma di tronco di piramide e daluogo a proiezioni per raggi che convergono verso un punto difuga che idealmente è rappresentato dalla punta della piramideLa modalità di proiezione di attiva con la chiamata a

glMatr ixMode (GL_PROJECTION) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 77 / 321

Page 78: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista ortogonale: glOrtho

La funzione glOrtho (glOrtho2D) definisce la porzione di spazio(piano) visibile e il sistema di coordinate cartesiano al suo interno

GLvoid g lOr tho ( GLdouble l e f t , GLdouble r i g h t , GLdoublebottom , GLdouble top , GLdouble zNearClip , GLdoublezFarCl ip )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 78 / 321

Page 79: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista ortogonale: proiezione

La proiezione della geometria contenuta nel volume di vistaortogonale avviene per linee ortogonali al primo piano di clipping

Figura: Esempio di proiezione sul primo piano di clipping nel caso divolume di vista ortogonale (vista in sezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 79 / 321

Page 80: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista ortogonale: proiezione sulla viewport

Il volume di vista definito da glOrtho viene proiettato sullaviewport; pertanto, se il volume di vista è un cubo e la viewport unquadrato, tutto funziona alla perfezione e le proporzioni sonomantenuteSe, al contrario, la viewport non è un quadrato, la proiezioneproduce una distorsione

Figura: Esempio di proiezione sul primo piano di clipping nel caso divolume di vista ortogonale (vista in sezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 80 / 321

Page 81: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista ortogonale: proiezione sulla viewport

Per evitare problemi di distorsione è opportuno preservare leproporzioni del volume di vista rispetto alla viewport

g lV iewpor t (0 , 0 , w, h ) ;aspec t_ ra t i o = ( GLf loa t )w / ( GLf loa t ) h ;i f ( aspec t_ ra t i o <= 1) / / w <= h

glOr tho (−100,100 ,−100/ aspec t_ ra t io ,100 / aspec t_ ra t io,1 ,−1) ;

elseglOr tho (−100∗aspec t_ ra t io ,100∗ aspec t_ ra t io

,−100 ,100 ,1 ,−1) ;

Esempio:GLRect.c

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 81 / 321

Page 82: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista prospettico: glFrustum

Il volume di vista è un tronco di piramide, detto frustum

void glFrustum ( GLdouble l e f t , GLdouble r i g h t , GLdoublebottom , GLdouble top , GLdouble near , GLdouble f a r )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 82 / 321

Page 83: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista prospettico: proiezione

Quando si usa un volume di vista prospettico, gli oggetti che sonopiù lontani dal punto di vista dell’osservatore risultano più piccolirispetto a quelli che sono più viciniInfatti, la proiezione della geometria contenuta nel volume di vistaprospettico avviene per linee convergenti al punto di fuoco

Figura: Esempio di proiezione sul primo piano di clipping nel caso divolume di vista ortogonale (vista in sezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 83 / 321

Page 84: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista prospettico: gluPerspective

Benché sia concettualmente abbastanza semplice dacomprendere, glFrustum può risultare antiintuitivo da usare; pertale motivo la libreria GLU fornisce la funzione alternativagluPerspective per la definizione del frustum

void g luPerspec t i ve ( GLdouble fovy , GLdouble aspect ,GLdouble zNear , GLdouble zFar )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 84 / 321

Page 85: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Il volume di vista prospettico: gluPerspective

fovy ∈ [0.0,180.0] è l’angolo di vista che giace nel piano x − zaspect è l’aspect ratio del frustum, (width / height); è buona normaimpostarlo allo stesso aspect ratio della viewport per evitaredistorsioni sulla viewportnear e far sono le distanza dai piani di clipping

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 85 / 321

Page 86: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Le trasformazioni di modeling

Una volta definiti il punto e il volume di vista è possibile occuparsidella modellazione geometrica al fine di definire i modelli checompongono la scenaIn molti casi, la definizione di un modello può risultare semplificatase viene effettuata intorno all’origine del sistema di coordinate; ilmodello può successivamente essere collocato in un qualsiasipunto dello spazio 3D attraverso opportune trasformazioni(traslazioni, rotazioni, trasformazioni di scala)Le trasformazioni di modeling consentono di posizionare nellospazio, ruotare e deformare primitive geometriche o, più ingenerale, modelli 3D

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 86 / 321

Page 87: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Le trasformazioni di modeling

Nota che l’ordine con cui sono applicate le trasformazioni dimodeling non è commutativo; infatti, in generale, se si applicaprima una rotazione e poi una traslazione il risultato è diversorispetto a quello che si ottiene applicando prima la traslazione epoi la rotazioneIl motivo per cui gli effetti delle trasformazioni sono differenti èdovuto al fatto che ogni trasformazione è eseguita rispetto allatrasformazione precedente

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 87 / 321

Page 88: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni

La matematica che sottende alle trasformazioni di modeling(traslazioni, rotazioni e trasformazioni di scala) è basata sulcalcolo matricialeApplicare una trasformazione a un vertice equivale, infatti, amoltiplicare una matrice che descrive la trasformazione, M per ilvettore che descrive il vertice, v : MvInnanzitutto, il vertice è trasformato in una matrice 4x1 dove iprimi 3 valori sono le coordinate x , y e z dei vertici; il quartovalore, detto coordinata w , è necessario per riportare il problemain termini di coordinate omogeeVedremo che questo è necessario per ricondurre le trasformazionifondamentali al prodotto di una matrice (4x4) per un vertice (4x1)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 88 / 321

Page 89: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni: traslazione

Matrice di traslazione

T =

1 0 0 X0 1 0 y0 0 1 z0 0 0 1

Esempio: traslazione di una unità lungo l’asse z del verticevT = (1,0,0,1)

Tz =

1 0 0 00 1 0 00 0 1 10 0 0 1

risulta: v ′ = TzvT = (1,0,1,1)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 89 / 321

Page 90: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni: rotazioni intornoagli assi x e y

Rotazione intorno all’asse x

Rx =

1 0 0 00 cosα − sinα 00 sinα cosα 00 0 0 1

Rotazione intorno all’asse y

Ry =

cosα 0 sinα 0

0 1 0 0− sinα 0 cosα 0

0 0 0 1

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 90 / 321

Page 91: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni: rotazioni intornoall’asse z e scaling

Rotazione intorno all’asse z

Rz =

cosα − sinα 0 0sinα cosα 0 0

0 0 1 00 0 0 1

Trasformazione di scala (Scaling)

S =

x 0 0 00 y 0 00 0 z 00 0 0 1

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 91 / 321

Page 92: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni: ordined’applicazione

La condizione nella quale non è definita alcuna trasformazione dimodeling equivale ad avere la matrice identità, I, come matrice ditrasformazione correnteOgni volta che il programmatore definisce una trasformazione, M,questa viene moltiplicata a destra per la matrice di trasformazionecorrente; se M è la prima trasformazione definita dall’utente, allorala matrice di trasformazione corrente diventa IMLa modellazione che segue la definizione delle trasformazioni, adesempio la definizione di un vertice v , risulterà trasformata poichév è moltiplicato a destra per la matrice di trasformazione corrente:IMv

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 92 / 321

Page 93: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni: ordined’applicazione

Si noti quindi che, poiché le trasformazioni geometriche siottengano tramite prodotti su matrici, l’ordine d’applicazione allageometria è l’opposto di quello di definizione; ad esempio, sedefiniamo nell’ordine le trasformazioni:

S: trasformazione di scalingT : trasformazione di traslazioneR: trasformazione di rotazione

al vertice v , il vertice trasformato, v ′, risulterà da:

v → Rv → T (Rv)→ S(T (Rv)) = v ′

In altri termini, sarà applicata prima la rotazione R, al vertice cosìottenuto la traslazione T e, infine, la trasformazione S

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 93 / 321

Page 94: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La matematica delle trasformazioni: ordined’applicazione

Un modo alternativo per interpretare l’effetto delle trasformazioni èquello di considerare un sistema di coordinate locali solidale almodello; così, l’ordine di applicazione della trasformazioni apparecome nell’ordine naturale in cui sono definite nel codice sorgente

Figura: Esempio trasformazioni di modeling con sistema di riferimentolocale: prima è definita la traslazione T, quindi la rotazione R

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 94 / 321

Page 95: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Trasformazioni di modeling in OpenGL:glLoadMatrix{fd}() e glMultMatrix{fd}()

Se si vuole specificare esplicitamente una matrice ditrasformazione e impostarla come trasformazione corrente si usala funzione

void glLoadMatr ix { fd } ( const TYPE ∗M) ;

Allo stesso modo, si usa la funzione glMultMatrix per moltiplicarela matrice corrente per la matrice passata come argomento

void g l Mu l tMa t r i x { fd } ( const TYPE ∗M) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 95 / 321

Page 96: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Trasformazioni di modeling in OpenGL:glLoadMatrix{fd}() e glMultMatrix{fd}()

Si noti che l’argomento per entrambi i comandi glLoadMatrix eglMultMatrix è un vettore di 16 valori (m1,m2, ...,m16) chespecifica una matrice M come segue:

M =

m1 m5 m9 m13m2 m6 m10 m14m3 m7 m11 m15m4 m8 m12 m16

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 96 / 321

Page 97: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Trasformazioni di modeling in OpenGL: glTranslate{fd}

La funzione glTranslate definisce una matrice di traslazione e lamoltiplica per la matrice di modeling corrente

void g lT rans la ted ( GLdouble x , GLdouble y , GLdouble z )void g l T r a n s l a t e f ( GLf loa t x , GLf loa t y , GLf loa t z )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 97 / 321

Page 98: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Trasformazioni di modeling in OpenGL: glRotate{fd}

La funzione glRotate definisce una matrice di rotazione e lamoltiplica per la matrice di modeling corrente

void glRotated ( GLdouble angle , GLdouble x , GLdouble y ,GLdouble z )

void g l Ro t a t e f ( GLf loa t angle , GLf loa t x , GLf loa t y ,GLf loa t z )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 98 / 321

Page 99: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Trasformazioni di modeling in OpenGL: glScale{fd}

La funzione glScale definisce una matrice di scaling e la moltiplicaper la matrice di modeling corrente

void glScaled ( GLdouble x , GLdouble y , GLdouble z )void g lSca le f ( GLf loa t x , GLf loa t y , GLf loa t z )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 99 / 321

Page 100: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Trasformazioni di modeling in OpenGL: Nate Robins’tutorial

Nate Robins ha sviluppato un tutorial per osservare l’effetto delleverie trasformazioni

http://www.xmission.com/~nate/tutors.html

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 100 / 321

Page 101: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La dualità modelview

La distinzione tra trasformazione di viewing e modeling èpuramente formaleSi consideri una trasformazione di traslazione di 10 unità lungol’asse z negativo; ebbene, questa è del tutto equivalente a unatrasformazione di viewing di 10 unità lungo l’asse z positivo

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 101 / 321

Page 102: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La dualità modelview

OpenGL non distingue tra trasformzione di viewing e di modeling;la modalità modelview di OpenGL gestisce le trasformazioni diviewing e modelingIn modalità modelview, per una questione di comodità, è possibilespecificare esplicitamente sia trasformazioni di viewing che dimodeling anche se OpenGL le gestisce internamente come ununico tipo di trasformazione (di modeling)Per attivare la modalità modelview OpenGL ricorre alla funzioneglMatrixMode

glMatr ixMode (GL_MODELVIEW) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 102 / 321

Page 103: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Caricare la matrice indentità: glLoadIdentity()

In definitiva, in OpenGL ogni primitiva geometrica è sottopostaalle seguenti trasformazioni

modelviewProjectionViewport

Le trasformazioni di modelview e di proiezione sono gestiteattraverso matrici ed è opportuno resettarle quando necessario,per esempio all’inizio dell’esecuzione dell’applicazione o quandosi vuole annullare l’effetto di trasformazioni precedentila funzione glLoadIdentity rimpiazza la matrice corrente (dimodelview o di proiezione) con la matrice identità (nessunatrasformazione applicata)void g l L o a d I d e n t i t y ( ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 103 / 321

Page 104: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La pila di matrici OpenGL

Ricaricare la matrice identità per resettare la matrice di modelviewpuò risultare oneroso dal punto di vista computazionale e talvoltascomodo per il programmatore (che magari deve riapplicarealcune trasformazioni precedentemente definite)OpenGL fornisce un meccanismo alternativo: la pila di matriciLa pila può essere adoperata sia in modalità modelview cheprojection; i comandi per manipolare la pila sono glPushMatrix perinserire la matrice di trasformazione corrente nella pila eglPopMatrix per recuperare l’ultima matrice inserita

void glPushMatr ix ( void ) ;void glPopMatr ix ( void ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 104 / 321

Page 105: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

La pila di matrici OpenGL

Lo stack di matrici di modelview contiene almeno 32 matriciPoiché alcune implementazioni di OpenGL supportano più di 32matrici nello stack di modelview, può essere necessariocontrollarne la dimensione massima attraverso la funzione

g lGe t In tegerv (GL_MAX_MODELVIEW_STACK_DEPTH, GLint ∗params )

Lo stack delle matrici di proiezione contiene 2 matriciPoiché alcune implementazioni di OpenGL supportano più di 2matrici nello stack di proiezione, può essere necessariocontrollarne la dimensione massima attraverso la funzione

g lGe t In tegerv (GL_MAX_PROJECTION_STACK_DEPTH, GLint ∗params )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 105 / 321

Page 106: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Analisi del sorgente planet.c

s t a t i c i n t year = 0 , day = 0;/∗ missing ∗ /

i n t main ( i n t argc , char∗∗ argv ) {g l u t I n i t (& argc , argv ) ;g l u t I n i tD i sp layMode (GLUT_DOUBLE | GLUT_RGB) ;g lu t In i tWindowSize (500 , 500) ;g l u t I n i tW indowPos i t i on (100 , 100) ;glutCreateWindow ( argv [ 0 ] ) ;i n i t ( ) ;g lu tD isp layFunc ( d i sp lay ) ;glutReshapeFunc ( reshape ) ;glutKeyboardFunc ( keyboard ) ;glutMainLoop ( ) ;return 0;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 106 / 321

Page 107: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Analisi del sorgente planet.c

void i n i t ( void ) {g lC lea rCo lo r ( 0 . 0 , 0 .0 , 0 .0 , 0 .0 ) ;glShadeModel (GL_FLAT) ;

}

void keyboard ( unsigned char key , i n t x , i n t y ) {switch ( key ) {

case ’ d ’ :day = ( day + 10) % 360;g lu tPos tRed isp lay ( ) ;break ;

case ’ y ’ :/∗ a l t r o ∗ /

}}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 107 / 321

Page 108: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Analisi del sorgente planet.c

void reshape ( i n t w, i n t h ){

g lV iewpor t (0 , 0 , ( GLsize i ) w, ( GLsize i ) h ) ;glMatr ixMode (GL_PROJECTION) ;g l L o a d I d e n t i t y ( ) ;g luPerspec t i ve (60 .0 , ( GLf loa t ) w / ( GLf loa t ) h , 1 .0 , 20 .0) ;glMatr ixMode (GL_MODELVIEW) ;g l L o a d I d e n t i t y ( ) ;gluLookAt ( 0 . 0 , 0 .0 , 5 .0 , 0 .0 , 0 .0 , 0 .0 , 0 .0 , 1 .0 , 0 .0 ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 108 / 321

Page 109: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Analisi del sorgente planet.c

void d i sp lay ( void ){

g lC lea r (GL_COLOR_BUFFER_BIT) ;g l C o l o r 3 f ( 1 . 0 , 1 .0 , 1 .0 ) ;

g lPushMatr ix ( ) ;g lutWireSphere ( 1 . 0 , 20 , 16) ; /∗ draw sun ∗ /g l Ro t a t e f ( ( GLf loa t ) year , 0 .0 , 1 .0 , 0 .0 ) ;g l T r a n s l a t e f ( 2 . 0 , 0 .0 , 0 .0 ) ;g l Ro t a t e f ( ( GLf loa t ) day , 0 .0 , 1 .0 , 0 .0 ) ;g lutWireSphere ( 0 . 2 , 10 , 8) ; /∗ draw smal le r p lane t ∗ /

glPopMatr ix ( ) ;g lutSwapBuf fers ( ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 109 / 321

Page 110: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Le trasformazioni

Analisi del sorgente planet.c

Figura: Screenshot del programma planet

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 110 / 321

Page 111: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Rimozione delle superfici nascoste

Rimozione delle superfici nascoste

Se nell’esempio precedente si prova a sostituire le chiamate aglutWireSphere con chiamate a glutSolidSphere provvedendo adassegnare alle diverse sfere colori differenti, si noterà che non èpossibile in alcun modo simulare l’effetto eclissi per cui le sfereche ruotano dietro (più in profondità rispetto) ad altre sferecontinuano a essere visibiliQuando si modellano scene attraverso poligoni ombreggiati glioggetti nascosti da altri oggetti non devono evidentemente essererenderizzatiL’eliminazione di oggetti (o di parti di oggetti) solidi che sonooscurati da altri oggetti è chiamata hidden-surface removal

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 111 / 321

Page 112: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Rimozione delle superfici nascoste

Rimozione delle superfici nascoste

Il modo più semplice per rimuovere le superfici nascoste è usare ildepth buffer, noto anche come z-buffer, che è uno dei buffer delframe bufferIl depth buffer è utilizzato per associare a ogni pixel dell’immaginenel color buffer la distanza dal primo piano di clippingInizialmente, il depth buffer è inizializzato usando la più grandedistanza possibile (la distanza dall’ultimo piano di clipping)Prima che ogni pixel sia effettivamente settato nel color buffer sieffettua un controllo con la distanza associata: se il nuovo valoredi profondità è minore allora il relativo colore sostituisce quelloattualmente impostato per il pixel; in caso contrario non accadenulla

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 112 / 321

Page 113: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Rimozione delle superfici nascoste

Rimozione delle superfici nascoste

Il depth buffering deve essere attivato attraverso il comandoglEnable(GL_DEPTH_TEST)Inoltre, prima di modellare la scena è necessario resettare il depthbuffer attraverso il comandoglClear(GL_DEPTH_BUFFER_BIT)Infine, è necessario specificare la modalità di rimozione dellesuperfici nascosta a GLUT attraverso il comandoglutInitDisplayMode (GLUT_DEPTH | . . . )

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 113 / 321

Page 114: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Rimozione delle superfici nascoste

Screenshot del programma planet2

Figura: Screenshot del programma planet2 con controllo di profondità attivato

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 114 / 321

Page 115: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Il colore: la natura ondulatoria della luce

Il colore è una lunghezza d’onda di luce visibile all’occhio umanoLa luce visibile di una sorgente è in realtà una miscela di differentitipi di luce, ognuna caratterizzata dalla propria lunghezza d’ondaLa lunghezza d’onda della luce è misurata come distanza tra duepicchi successivi dell’onda di luce

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 115 / 321

Page 116: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Il colore: la natura ondulatoria della luce

La luce visibile varia tra 390 (violetto) e 720 nanometri (rosso);questo range è detto spettro visibile e contiene i coloridell’arcobalenoLa luce ultravioletta è quella luce caratterizzata da lunghezzad’onda inferiore a 390 nanometri; la luce infrarossa è quella lucecaratterizzata da lunghezza d’onda maggiore di 720 nanometriPer quanto riguarda i rimanenti colori, essi sono combinazioni avarie intesità dei colori dello spettro visibileIn particolare, il colore nero rappresenta l’assenza di luce, mentreil bianco è la combinazione di tutti i colori dello spettro allamassima intensità

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 116 / 321

Page 117: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Il colore: la natura particellare della luce

Se si pensa alla luce nella sua natura particellare anzichéondulatoria, essa è costituita da piccolissime particelle, i fotoniQuando i fotoni incidono sulla superficie di un oggetto, una parteviene generalmente riflessa e una parte trattenutaL’occhio umano viene colpito dai fotoni riflessi (si tratta di miliardidi fotoni) che sono messi a fuoco sulla retinaLa retina contiene miliardi di cellule (i coni) che, eccitate dai fotoni,trasmettono segnali elettrici al cervello che li interpreta comeinformazioni di luce e colore

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 117 / 321

Page 118: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Il colore: la natura particellare della luce

Maggiore è il numero di fotoni che colpisce la retina, più intensarisulta l’eccitazione dei coni e, di conseguenza, la percezionedella luminositàIn realtà esistono tre differenti tipologie di cellule coni, ognunaparticolarmente sensibile a una ben precisa lunghezza d’onda:

Una reagisce principalmente alla luce rossa (red cones)Una reagisce principalmente alla luce verde (green cones)Una reagisce principalmente alla luce blu (blue cones)

Una luce caratterizzata da una lunghezza d’onda prossima alrosso eccita principalmente i coni rossi e il cervello percepirà ilcolore rosso; una combinazione di differenti lunghezze d’ondaprodurrà l’eccitazione di più tipologie di coni e il cervello percepiràuna miscela dei tre colori fondamentali

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 118 / 321

Page 119: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Il colore: il modello RGB

Visto come funziona l’occhio umano e come il cervello interpretale informazioni da esso trasmesso, risulta ovvio comprendere ilmodo in cui i calcolatori elettronici producono le immaginiOgni monitor è progettato per produrre tre tipi di luce Rossa,Green e Blu (modello RGB) con diverse intensità

Il cannone a elettroni di un CRT produce l’eccitazione dei fosforiposizionati sul retro del pannello video: ogni punto dello schermo(pixel) è composto da tre fosfori differenti, ognuno dei quali produceluce rossa, verde o blu, con differenti intensitàSimilmente, i cristalli liquidi di un LCD sono progettati in modo dariprodurre i colori fondamentali attraverso l’attivazione di segnalielettrici nella matrice posta sul retro del pannello

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 119 / 321

Page 120: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Il colore: il modello RGB

OpenGL adotta il modello di colore RGB a 24 bitLa profondità di colore a 24bit consente di maneggiare 256intensità per ognuno dei tre colori fondamentaliPer motivi di performance, tuttavia, le schede grafiche supportanola modalità a 32bit di cui 24bit sono usati per i colori fondamentali,mentre i rimanenti 8 per il canale alpha (che vedremo in seguito)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 120 / 321

Page 121: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Uso dei colori in OpenGL

Poiché tutti i colorivisibili sonospecificati da ternedi tre valori RGB,possiamorappresentarli tuttiattraverso il cosìdetto RGBcolorspace

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 121 / 321

Page 122: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Uso dei colori in OpenGL

Figura: Screenshot del programma ccube.c (nei materiali della lezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 122 / 321

Page 123: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Colore di sfondo

OpenGL prevede una funzione per la definizione e l’applicazionedel colore di sfondo

g lC learCo lo r (R, G, B, A)g lC lea r (GL_COLOR_BUFFER_BIT)

In alternativa sarebbe possibile disegnare un rettangolo che copral’intera area di disegnoQuesta seconda soluzione pone alcuni problemi:

è meno efficientepuò creare problemi in caso di applicazioni 3D

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 123 / 321

Page 124: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Impostazione del colore di disegno

La funzione che setta il colore di disegno è glColor* (o, in formavettoriale, glColor*v); Ad esempio:

g l C o l o r 3 f ( 0 . 0 , 0 .0 , 0 .0 ) /∗ nero ∗ /g l C o l o r 3 f ( 1 . 0 , 0 .0 , 0 .0 ) /∗ rosso ∗ /g l C o l o r 3 f ( 0 . 0 , 1 .0 , 0 .0 ) /∗ verde ∗ /g l C o l o r 3 f ( 1 . 0 , 1 .0 , 0 .0 ) /∗ g i a l l o ∗ /g l C o l o r 3 f ( 0 . 0 , 0 .0 , 1 .0 ) /∗ blu ∗ /g l C o l o r 3 f ( 1 . 0 , 0 .0 , 1 .0 ) /∗ magenta ∗ /g l C o l o r 3 f ( 0 . 0 , 1 .0 , 1 .0 ) /∗ ciano ∗ /g l C o l o r 3 f ( 1 . 0 , 1 .0 , 1 .0 ) /∗ bianco ∗ /

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 124 / 321

Page 125: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Il colore

Impostazione del colore di disegno: shading

Primitive di un solo coloresono dette FLAT Shaded;primitive con colori chesfumano gradualmente sonodette SMOOTH ShadedLa chiamata alla funzioneglShadeModel(GL_SMOOTH)attiva lo smooth shading,quella aglShadeModel(GL_FLAT), ilflat shading; ad esempio:

Figura: Esempio di flat esmooth shading

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 125 / 321

Page 126: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Modellazione di punti, segmenti e poligoni

Un punto è rappresentato da un insieme, chiamato vertice, dinumeri floating-pointUn vertice è definito da una tripla (x,y,z), anche se è possibiledefinire vertici 2D

Generalmente un punto ha la dimensione di un pixel, ma la suagrandezza può essere variata attraverso opportune funzioniOpenGL

Esempio:POINTS.C

Un segmento è rappresentato da una coppia di verticiGeneralmente un segmento ha lo spessore di un pixel, ma puòessere variato

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 126 / 321

Page 127: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Modellazione di punti, segmenti e poligoni

I poligoni sono aree chiuse delimitate da segmentiUn poligono è determinato dai vertici dei segmenti che lodefinisconoOpenGL impone alcune restrizioni sui poligoni

I lati non possono intersecarsi (poligoni semplici)Devono essere convessi

Poligoni non validi possono comunque essere rappresentatiattraverso più poligoni validi

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 127 / 321

Page 128: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Poligoni planari e non planari

Il triangolo è sempre un poligono planare visto che per tre punti (ivertici del triangolo) passa un solo piano mentre tutti gli altripoligoni (rettangoli, esagoni, ecc.) possono essere non planariLa non planarità dei poligoni può creare alcuni problemi nel casodi applicazioni 3D con rotazioni, scaling, ecc. e produrre poligoninon validi, come nella figura sotto, che possono creare problemiagli algoritmi di rasterizzazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 128 / 321

Page 129: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Rettangoli

Poiché i rettangoli sono molto comuni in applicazioni grafiche,OpenGL fornisce una funzione per il loro disegno:

glRect ∗ ( x1 , y1 , x2 , y2 )

Esiste anche la versione vettoriale glRect*v.Il rettangolo viene sempre disegnato sul piano z = 0 ma puòessere successivamente ruotato, traslato e scalato

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 129 / 321

Page 130: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Specificare i vertici

In OpenGL ogni oggetto geometrico è, in definitiva, definito daisuoi verticiLa funzione glVertex* definisce un vertice; ad esempio

glVer tex2s (2 ,4 ) ;g lVer tex3d ( 0 . 0 , 0 .0 , 3.1415926535898) ;g lVe r tex3 f ( 1 . 0 , 7 .1 , 10.23) ;

Esiste anche la forma vettoriale glVertex*v, più efficiente sualcune macchine

GLf loa t f v [ 3 ] = { 5 . 0 , 6 .2 , 8 . 9 } ;g lVe r tex3 fv ( f v ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 130 / 321

Page 131: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Il blocco glBegin() - glEnd()

Per disegnare linee o poligoni a partire dai vertici è necessariodefinire questi ultimi all’interno delle chiamate a glBegin() eglEnd(); l’argomento di glBegin() definisce il tipo di oggetto che sivuole disegnare

glBegin (GL_POLYGON) ;g l C o l o r 3 f ( 1 . 0 , 0 .0 , 0 .0 ) ;g lVe r tex2 f ( 0 . 0 , 0 .0 ) ;g lVe r tex2 f ( 0 . 0 , 3 .0 ) ;g lVe r tex2 f ( 4 . 0 , 3 .0 ) ;g lVe r tex2 f ( 6 . 0 , 1 .5 ) ;g lVe r tex2 f ( 4 . 0 , 0 .0 ) ;

glEnd ( ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 131 / 321

Page 132: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Argomenti di glBegin()

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 132 / 321

Page 133: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Proprietà dei vertici

All’interno di glBegin() eglEnd() è possibile specificareulteriori informazioni:

Colore del verticeVettore normaleCoordinata di textureOgni combinazione delleprecedentialtro

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 133 / 321

Page 134: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Costrutti all’interno di glBegin() e glEnd()

/ / . . .GLint c i r c l e _ p o i n t s = 100;g lBegin (GL_LINE_LOOP) ;

for ( i = 0 ; i < c i r c l e _ p o i n t s ; i ++) {angle = 2∗M_PI∗ i / c i r c l e _ p o i n t s ;g lVe r tex2 f ( cos ( angle ) , s in ( angle ) ) ;

}glEnd ( ) ;/ / . . .

Nota che esistono alternative più efficienti per l’esempioprecedente

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 134 / 321

Page 135: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Punti, segmenti e poligoni: dimensione dei punti

Di default, un punto è disegnato come singolo pixel sullo schermo,una linea è disegnata continua e un poligono è disegnato pienoLa funzione glPointSize(GLfloat size) setta la dimensione in pixelper i punti; il valore di default è ovviamente 1Così, la chiamata a glPointSize(2.1) indica che i punti devonoessere disegnati usando 2.1 pixel in orizzontale e 2.1 in verticale

Se non è attivo l’antialiasing il valore 2.1 viene arrotondato al valorepiù vicino (2), per un totale di 4 pixel per puntoSe è attivo l’antialiasing l’arrotondamento non avviene e il valore èutilizzato per l’algoritmo di smoothing (che vedremo in seguito)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 135 / 321

Page 136: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Punti, segmenti e poligoni: dimensione e pattern deisegmenti

Come per i punti, anche per le linee è possibile specificare unospessore diverso da 1.0 (valore di dafault) attraverso l’istruzioneglLineWidth(GLfloat width)È inoltre possibile specificare anche un pattern per ottenere lineea puntini, tratteggiate, ecc., attraverso la funzioneglLineStipple(GLint factor, GLushort pattern)Il line stippling deve inoltre essere attivato tramiteglEnable(GL_LINE_STIPPLE)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 136 / 321

Page 137: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Punti, segmenti e poligoni: dimensione e pattern deisegmenti

Nella funzione glLineStipple(GLint factor, GLushort pattern):pattern è una sequenza di 16 bit (punti) dove 0 vuol dire acceso, 1spento; in genere è dato in forma esadecimalefactor è un fattore di stretching del pattern

Ad esempio, il seguente codice attiva la modalità di stippling conpattern 0xAAAA e factor 1g l L i n e S t i p p l e (1 , 0xAAAA) ;glEnable ( GL_LINE_STIPPLE ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 137 / 321

Page 138: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Esempio

Vedi allegatolines.c

Compilazionecc line.c -o triangle -lGL -lglut

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 138 / 321

Page 139: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Punti, segmenti e poligoni: poligoni

I poligoni sono generalmente disegnati pieni, ma è ovviamentepossibile modificare le impostazioni di defaultUn poligono ha 2 facce (front e back) che possono esseredisegnati sia nello stesso modo che in modo differente (peresempio il back può essere disegnato come linee)Per default, entrambe le facce sono disegnate nello stesso modo

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 139 / 321

Page 140: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Punti, segmenti e poligoni: poligoni

void glPolygonMode(GLenum face, GLenum mode) specifica ilmodo di disegno per la parte front e back del poligono

face può essere GL_FRONT, GL_BACK oGL_FRONT_AND_BACKmode può essere GL_POINT, GL_LINE o GL_FILL

Per esempio, il seguente codice specifica il modo fill per il front e ilmodo line (detto anche wirefame) per il back

glPolygonMode (GL_FRONT, GL_FILL ) ;glPolygonMode (GL_BACK, GL_LINE ) ;

Per convenzione la parte front del poligono è quella per la quale lasequenza dei vertici che la definiscono sono in senso anti-orario(counterclockwise)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 140 / 321

Page 141: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Punti, segmenti e poligoni: poligoni

La funzione glFrontFace(GLenum mode) consente di cambiare laconvenzione: mode può essere GL_CCW (counterclockwise) oGL_CW (clockwise)È opportuno costruire superfici orientabili (es. una sfera o un toro)con poligoni che abbiano la stessa orientazione; così, nel caso diuna sfera, ad esempio, è possibile istruire OpenGL in modo chenon disegni la parte back dei poligoni oppure, se il punto di vista èall’interno della sfera, si può istruire OpenGL in modo che nondisegni la parte frontLa funzione void glCullFace(GLenum mode) determina la facciadei poligoni che devono essere ignorati in fase di disegno; modepuò essere GL_FRONT, GL_BACK o GL_FRONT_AND_BACKNota che la funzione di culling deve essere attivata tramite lachiamata glEnable(GL_CULL_FACE);

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 141 / 321

Page 142: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

I fondamenti di OpenGL Modellazione geometrica

Esempio

Vedi allegatoTriangle.c

Compilazionecc Triangle.c -o Triangle -lGL -lglut

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 142 / 321

Page 143: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione

Illuminazione

Illuminazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 143 / 321

Page 144: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione

L’uso dei colori puro e semplice, come nell’esempio sotto, rendedifficile realizzare modelli realistici

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 144 / 321

Page 145: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione

Ciò che manca all’esempio precedente è un modello diilluminazioneCiò che rende realistico un modello 3D è infatti in gran parte ilmodo in cui la luce incide sul modello stessoOpenGL prevede tre differenti tipi di luci che possono essereaggiunte alla scena:

La luce ambiente (ambient light)La luce diffusa (diffuse light)La luce speculare (specular light)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 145 / 321

Page 146: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione: Ambient Light

Caratteristiche della luce ambienteNon proviene da alcuna direzioneHa una sorgente, ma i raggi sono riflessi sulla scena e diventanoa-direzionaliGli oggetti risultano illuminati nello stesso modoindipendentemente dall’orientazione delle facce (poligoni) nellospazio

La scena precedente può essere considerata come illuminata daluce ambiente, benché non sia stato definito alcun modello diilluminazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 146 / 321

Page 147: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione: Diffuse Light

Caratteristiche della luce diffusaProviene da una direzione specificaÈ riflessa in ogni direzioneIl livello di luminosità dipende dall’angolo di incidenza sullasuperficieIl massimo di luminosità si ottiene quando la luce incideperpendicolarmente

La luce diffusa è fondamentale per conferire realismo alla scenanelle applicazioni grafiche

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 147 / 321

Page 148: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione: Specular Light

Caratteristiche della luce speculareProviene da una direzione specificaÈ riflessa in modo speculareIl livello di luminosità dipende dall’angolo di incidenza sullasuperficieIl massimo di luminosità si ottiene quando la luce incideperpendicolarmente

Una forte luce speculare tende a generare un riflesso sullasuperficie su cui incide (specular highlight)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 148 / 321

Page 149: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione: le componenti delle sorgenti

In generale, un modello d’illuminazione risulta dalla combinazionedi piu tipi di luciIn tal senso una luce in una scena è detta essere definita dalle trecomponenti

AmbientDiffuseSpecular

Come per la definizione del colore, ogni componente della luce èdefinita da una quadrupla RGBA, in cui, tuttavia, la componente Aè ignorata

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 149 / 321

Page 150: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Modelli d’illuminazione: esempi

Esempio: laser rossoType R G B A

Ambient 0.05 0.00 0.00 1.00Diffuse 0.10 0.00 0.00 1.00

Specular 0.99 0.00 0.00 1.00

Un altro esempioType R G B A

Ambient 0.20 0.20 0.20 1.00Diffuse 0.70 0.70 0.70 1.00

Specular 0.20 0.20 0.20 1.00

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 150 / 321

Page 151: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Materiali

Come abbiamo avuto modo di osservare in precedenza, glioggetti del mondo reale non hanno di per se un colore, ma neassumono uno in relazione alle proprie caratteristiche fisiche(come riflettono la luce) e al tipo di luce che li illuminaTuttavia, per convenzione, si definisce colore naturale di unoggetto il colore che l’oggetto assume quando è illuminato da unaluce bianca, cioè una luce per cui (R,G,B,A) = (1, 1, 1, 1)Quando si utilizzano le luci non è più necessario specificareesplicitamente il colore degli oggetti nella scena, ma piuttosto ilcomportamento dell’oggetto rispetto alla luce; in altri termini,quello che si fa è specificare le caratteristiche del materiale di cuiè composto l’oggetto

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 151 / 321

Page 152: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Materiali

In particolare è necessario definire le caratteristiche di riflessionedella luce (sia di tipo ambient che diffuse che specular)Ad esempio, invece di dire che un poligono è rosso, diciamo che ilpoligono è composto da un materiale che riflette prevalentementeluce rossa (quindi anche nel caso sia colpito da una luce biancache contiene una componente di luce rossa)Un materiale può, ad esempio, essere molto luminoso e rifletterebene la luce, oppure assorbire tutta la luce speculare

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 152 / 321

Page 153: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Effetti della luce ambiente

Supponiamo di avere una sorgente di luce definita dalla terna(trascuriamo la componente A)LA = (R,G,B) = (0.5,0.5,0.5)

Se la luce LA illumina un oggetto con la proprietà di riflettere laluce ambiente (componente di colore del materiale)RA = (0.5,1.0,0.5), allora, il colore risultante sarà:C = LARA = (0.25,0.5,0.25)

Così, la componente di colore del materiale determina lapercentuale di luce che viene riflessa e che è quindi visibile

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 153 / 321

Page 154: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Effetti della luce diffusa e speculare

Le luci diffuse e speculari sono direzionali e il livello massimo diilluminazione si ha quando la luce incide perpendicolarmente sullasuperficie: la luminosità dipende quindi dall’angolo d’incidenzaOpenGL calcola l’angolo d’incidenza grazie ai vettori normali; ilvettore normale può essere calcolato sfruttando la definizione diprodotto vettoriale

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 154 / 321

Page 155: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Sorgenti di luce: calcolo delle normali

Prodotto vettorialeDati due vettori in a e b, il prodotto vettoriale è il vettore ortogonale siaad a che a b tale che

a× b = n|a||b| sin θ

Calcolo del prodotto vettoriale in forma matriciale

a× b = det

i j ka1 a2 a3b1 b2 b3

=

= (a2b3 − a3b2)i + (a3b1 − a1b3)j + (a1b2 − a2b1)k

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 155 / 321

Page 156: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Sorgenti di luce: calcolo delle normali

Esempio: calcolo della normale da tre vertici

Siano v1 = (1,1,0); v2 = (2,1,0) e v3 = (1,3,0) tre vertici nellospazio, alloraa = v2 − v1 = (1,0,0) e b = v3 − v1 = (0,2,0), da cui

a× b = det

i j k1 0 00 2 0

=

002

da cui si ottiene

n =a× b|a× b|

= (0,0,1)T

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 156 / 321

Page 157: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Sorgenti di luce: le normali

La funzione glNormal permette di definire il vettore normale

void glNormal3 { b s i d f } (TYPE nx , TYPE ny , TYPE nz ) ;void glNormal3 { b s i d f } v ( const TYPE ∗v ) ;

Le successive chiamate a glVertex impostano il vertice con lanormale precedentemente definita

glBegin (GL_POLYGON) ;glNormal3fv ( n0 ) ;g lVe r tex3 fv ( v0 ) ;g lVe r tex3 fv ( v1 ) ;g lVe r tex3 fv ( v2 ) ;g lVe r tex3 fv ( v3 ) ;

glEnd ( ) ;

g lBegin (GL_POLYGON) ;glNormal3fv ( n0 ) ; g lVe r tex3 fv ( v0 ) ;g lNormal3fv ( n1 ) ; g lVe r tex3 fv ( v1 ) ;g lNormal3fv ( n2 ) ; g lVe r tex3 fv ( v2 ) ;g lNormal3fv ( n3 ) ; g lVe r tex3 fv ( v3 ) ;g lNormal3fv ( n4 ) ; g lVe r tex3 fv ( v4 ) ;

glEnd ( ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 157 / 321

Page 158: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Sorgenti di luce: le normali

OpenGL permette di specificare unvettore normale per ogni poligono oper ogni verticeNell’esempio al lato osserviamo unasfera in cui lo shading è effettuatosenza tener conto delle normali (inalto), tenendo conto di una normaleper poligono (al centro) e tenendoconto di una normale per ognivertice (in basso)È possibile calcolare le normali aivertici mediando (componente percomponente) le normali ai poligoni

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 158 / 321

Page 159: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Modelli d’illuminazione e materiali

Sorgenti di luce: le normali

Dato un poligono (es. un triangolo) nello spazio, esistono duevettori perpendicolari che puntano in direzione opposta: perconvenzione, il vettore normale è quello che punta verso l’esternoed è applicato alla parte frontIl vettore normale rimane di modulo unitario se si applicanotrasformazioni di rotazione o traslazione; negli altri casi è possibileusare le funzioni

glEnable (GL_NORMALIZE) / / funz ione generaleglEnable (GL_RESCALE_NORMAL) /∗ funz ione s p e c i f i c a per l e

operaz ion i d i sca l i ng uni forme ( uguale su x , y e z ) ∗ /

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 159 / 321

Page 160: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Aggiungere la luce alla scena

In OpenGL, la chiamata alla funzione glEnable(GL_LIGHTING)abilita l’uso delle luci e dei materiali per il calcolo del colore deivertici della scenaSuccessivamente è necessario specificare il modello diilluminazione attraverso la funzione glLightModel oppure definireuna (o più) sorgenti d’illuminazione attraverso la funzione glLightIl seguente esempio definisce l’intensità e il colore di un modellod’illuminazione con la sola componente ambiente

GLf loa t ambientL ight [ ] = { 1 . 0 , 1 .0 , 1 .0 , 1 . 0 } ;g lL igh tMode l f v (GL_LIGHT_MODEL_AMBIENT, ambientL ight ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 160 / 321

Page 161: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Un esempio di illuminazione

GLf loa t ambientL ight [ ] = { 1.0 f, 1.0 f , 1.0 f , 1.0 f } ;

GLf loa t ambientL ight [ ] = { 0.5 f, 0.5 f , 0.5 f , 1.0 f } ;

GLf loa t ambientL ight [ ] = { 0.25f , 0.25 f , 0.25 f , 1.0 f } ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 161 / 321

Page 162: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Sorgenti di luce

Per aggiungere realismo alla scena è necessario aggiungere unasorgente di luceOltre all’intensità e al colore, le sorgenti di luce hanno le seguentiproprietà:

Hanno un punto di applicazione nello spazioQuesto può essere infinitamente lontano dalla scena (es. il sole)In prossimità della scena (es. una lampada da scrivania)

Hanno una direzione di illuminazione che può:Illuminare in una direzione particolareIlluminare in ogni direzione

OpenGL supporta almeno 8 differenti sorgenti di luce(GL_LIGHT0, . . . , GL_LIGHT7), posizionabili ovunque nella scena

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 162 / 321

Page 163: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Sorgenti di luce

La funzione glLightfv setta il tipo di luce; ad esempio:

GLf loa t ambientL ight [ ] = { 0.3 f , 0.3 f , 0.3 f , 1.0 f } ;g l L i g h t f v (GL_LIGHT0 ,GL_AMBIENT, ambientL ight ) ;

specifica che la GL_LIGHT0 ha una componente ambient definitadal vettore ambientLightAllo stesso modo è possibile aggiungere una componente diffusaalla sorgente con una chiamata supplementare a glLightfv

GLf loa t d i f f u s e L i g h t [ ] = { 0.7 f , 0.7 f , 0.7 f , 1.0 f } ;g l L i g h t f v (GL_LIGHT0 , GL_DIFFUSE, d i f f u s e L i g h t ) ;

La sorgente deve essere attivata tramite la chiamata aglEnable(GL_LIGHT0)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 163 / 321

Page 164: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Definire il tipo di materiale: glMaterial

Una volta definiti i modelli o le sorgenti d’illuminazione, ènecessario specificare le proprietà dei materialiEsistono due modi per definire le proprietà di riflessione deimaterialiIl primo utilizza la funzione glMaterial, che deve essere chiamataprima della specificazione dei poligoni; ad esempio

GLf loa t gray [ ] = {0 .75 , 0.75 , 0.75 , 1 . 0 } ;g l M a t e r i a l f v (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, gray ) ;drawTr iangle ( ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 164 / 321

Page 165: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Definire il tipo di materiale: color traking

Il secondo metodo, detto color traking, consente di utilizzareglColor al posto di glMaterial.Per abilitare il color traking si utilizza la chiamata alle funzioni:

glEnabe (GL_COLOR_MATERIAL) ;g l C o l o r M a t e r i a l (GL_FRONT, GL_AMBIENT_AND_DIFFUSE) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 165 / 321

Page 166: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Settaggio di una sorgente di luce (SetupRc)

/ / L i gh t values and coord ina tesGLf loa t ambientL ight [ ] = { 0.3 f , 0.3 f , 0.3 f , 1.0 f } ;GLf loa t d i f f u s e L i g h t [ ] = { 0.7 f , 0.7 f , 0.7 f , 1.0 f } ;

/ / Enable l i g h t i n gglEnable (GL_LIGHTING) ;

/ / Setup and enable l i g h t 0g l L i g h t f v (GL_LIGHT0 ,GL_AMBIENT, ambientL ight ) ;g l L i g h t f v (GL_LIGHT0 , GL_DIFFUSE, d i f f u s e L i g h t ) ;g lEnable (GL_LIGHT0) ;

/ / Enable co lo r t r a c k i n gglEnable (GL_COLOR_MATERIAL) ;/ / Set Ma te r i a l p r o p e r t i e s to f o l l o w g lCo lo r valuesg l C o l o r M a t e r i a l (GL_FRONT, GL_AMBIENT_AND_DIFFUSE) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 166 / 321

Page 167: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Settaggio di una sorgente di luce (ChangeSize)

È ovviamente necessario specificare la locazione della sorgente;a tal scopo, si fa riferimento ancora alla funzione glLightfv

GLf loa t l i gh tPos [ ] = { −50. f , 50.0 f , 100.0 f , 1.0 f } ;g l L i g h t f v (GL_LIGHT0 , GL_POSITION , l i gh tPos ) ;

L’ultima componente di lightPos definisce se la luce è postaall’infinito lungo la direzione specificata dalle prime 3 componentio è esattamente in quel punto

0.0 indica una sorgente infinitamente lontana1.0 indica una sorgente vicina, nella posizione specificata dai primitre valori dell’array.

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 167 / 321

Page 168: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Un altro esempio di illuminazione

Figura: ScreenShot del programma LitJet.c (progetto jetlight (light source) neimateriali della lezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 168 / 321

Page 169: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

La componente speculare

La luce ambiente e la luce diffusa sono sufficienti a descrivereoggetti opachi (che non riflettono luce)Questo, però, non è il caso di un jet con pareti metalliche cheinvece riflettono la luceAggiungere una componente speculare a una sorgente di luce èmolto semplice

Si definisce un array con l’intesità e il colore della componentespeculareSi abilita la componente tramite glLightfv

GLf loa t specu la rL igh t [ ] = { 0.2 f , 0.2 f , 0.2 f , 1.0 f } ;g l L i g h t f v (GL_LIGHT0 ,GL_SPECULAR, specu la rL igh t ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 169 / 321

Page 170: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

La componente speculare

Infine, è possibile controllare le dimensioni dello specular highlightcon glMaterial (l’ultimo parametro può variare tra 1 e 128 edetermina la dimensione dell’highlight - 128 indica un highlightpiccolo, 1 un highlight molto grande)

GLf loa t h igh_sh in iness [ ] = { 1.0 } ;g l M a t e r i a l f v (GL_FRONT, GL_SHININESS , h igh_sh in iness ) ;

/ / oppure è p o s s i b i l e cons iderare l a va r i an te cong l M a t e r i a l i

GLint low_shin iness = 128;g l M a t e r i a l i (GL_FRONT, GL_SHININESS , low_shin iness ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 170 / 321

Page 171: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Spot light

Le spot light sono luci direzionali come quelle generate da unalampada da scrivania che emettono un cono di luceUna spot light è semplicemente una sorgente di luce direzionalealla quale è applicato un angolo di cut off; ad esempio:/ / . . .g l L i g h t f v (GL_LIGHT0 ,GL_SPECULAR, specular ) ;g l L i g h t f v (GL_LIGHT0 , GL_POSITION , l i gh tPos ) ;/ / spot d i r e c t i o n i s (0 ,0 ,−1) by d e f a u l tg l L i g h t f v (GL_LIGHT0 ,GL_SPOT_DIRECTION, spo tD i r ) ;

/ / Cut o f f angle i s 50 degreesg l L i g h t f (GL_LIGHT0 ,GL_SPOT_CUTOFF,50 .0 f ) ;

/ / Enable t h i s l i g h t i n p a r t i c u l a rglEnable (GL_LIGHT0) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 171 / 321

Page 172: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Esempio di spot light

Figura: Screenshot del programma spot (nei materiali della lezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 172 / 321

Page 173: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Illuminazione Aggiungere la luce alla scena

Emission

Specificando un colore per GL_EMISSION è possibile far apparireun oggetto emettere luce di quel colore

GLf loa t mat_emission [ ] = { 0 . 3 , 0 .2 , 0 .2 , 0 . 0 } ;g l M a t e r i a l f v (GL_FRONT, GL_EMISSION, mat_emission ) ;

Gli oggetti appaiono leggermente incandescenti per cui è utile persimulare luci accese come lampade o lampioniSi noti, tuttavia, che un oggetto con la proprietà di emissione nonemette luce; se si desidera ottenere l’effettiva emissione di luce ènecessario definire una sorgente di luce nella stessa posizionedell’oggetto dotato di emisssività

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 173 / 321

Page 174: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali

Effetti Speciali

Effetti Speciali

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 174 / 321

Page 175: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali

Effetti Speciali

Nella lezione precedente abbiamo visto come l’applicazione delleluci alla scena può produrre un effetto molto più realistico rispettoa quello che si ottiene impostando direttamente il colore delmaterialeTuttavia, le luci da sole non sono sufficienti a modellare altrecaratteristiche del mondo reale, come ad esempio le trasparenzeo la nebbia

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 175 / 321

Page 176: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Blending

Abbiamo visto che OpenGL conserva le informazioni di colore nelcolor buffer e (se è attivato lo z-buffer) quelle di profondità neldepth bufferSe lo z-buffer è attivo un vertice può rimpiazzare un verticeprecedentemente salvato nel color buffer in base al valore di zQuesto non succede più se è attivata, con una chiamata aglEnable(GL_BLEND), la modalità di blending per la simulazionedelle trasparenze

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 176 / 321

Page 177: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Blending

Quando è attivo il blending, il nuovo colore è mescolato con ilcolore attualmente presente nel color bufferIl colore attualmente presente nel color buffer è chiamatodestination color ed è della forma (R,G,B,A)Il colore entrante (che sostituisce o si combina col destinationcolor) è chiamato source color ed è anch’esso della forma(R,G,B,A).

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 177 / 321

Page 178: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Blending

Come il destination e source color siano combinati quando è attivoil blending dipende da una funzione, detta equazione di blendingSiano

Cf il colore finale dopo il blendingCs il source colorCd il destination colorS il fattore di blending per il source colorD il fattore di blending per il destination color

allora

Cf = (Cs ∗ S) + (Cd ∗ D)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 178 / 321

Page 179: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Blending

I fattori di blending S e D sono settati attraverso la funzioneglBlendFunc(GLenum S, GLenum D)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 179 / 321

Page 180: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Blending

Un esempio abbastanza comune di blending è il seguente

glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ;

Supponiamo di avere il colore rosso già salvato nel color buffer,Cd=(1,0,0,0), e un colore sorgente Cs=(0,0,1,0.5); essendo S=0.5e D=1-0.5=0.5, si ha

Cf = (Cs ∗ S) + (Cd ∗ D) =

= (0,0,0.5,0) + (0.5,0,0,0.5) = (0.5,0,0.5,0)

Esempio: alpha.c nei materiali della lezione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 180 / 321

Page 181: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Equazioni di Blending

L’equazione Cf = (Cs ∗ S) + (Cd ∗ D) è quella di default, maOpenGL ne fornisce delle altreÈ possibile cambiare funzione attraversoglBlendEquation(GLenum mode) dove mode può essere

GL_FUNC_ADD (Cf = (Cs ∗ S) + (Cd ∗ D))GL_FUNC_SUBTRACT (Cf = (Cs ∗ S)− (Cd ∗ D))GL_FUNC_REVERSE_SUBTRACT (Cf = (Cd ∗ S)− (Cs ∗ D))GL_MIN (min(Cs,Cd))GL_MAX (max(Cs,Cd))

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 181 / 321

Page 182: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Blending

Blending

Il blending può essere utilizzato anche per l’effetto di riflessione diun oggetto su una superficie

Figura: ScreenShot del programma reflection.c (nei materiali della lezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 182 / 321

Page 183: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Fog

Fog

Un altro effetto speciale supportato da OpenGL è la nebbiaL’effetto nebbia è sempre basato sul blending: OpenGL mescola ilcolore assegnato alla nebbia con la geometria della scena comeultima operazione di renderingLa quantità di colore di nebbia mescolato con la geometria varia infunzione della distanza tra la camera e la geometria stessaQuesto semplice trucco da l’impressione della presenza dellanebbia nella scena che, tra l’altro, può rendere maggiormentepercepibile la profondità

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 183 / 321

Page 184: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Fog

Fog

Attivare e disattivare l’effetto nebbia è semplice e si fa con le soliteglEnable(GL_FOG) e glDisable(GL_FOG)Ovviamente l’effetto nebbia può essere parametrizzato attraversole funzioni

void glFogi(GLenum pname, GLint param);void glFogf(GLenum pname, GLfloat param);void glFogiv(GLenum pname, GLint* param);void glFogfv(GLenum pname, GLfloat* param);

Ad esempio

GLf loa t fog_co lo r [ ] = { 0 . 1 , 0 .1 , 0 .1 , 1 . 0 } ;g lFogfv (GL_FOG_COLOR, fog_co lo r ) ;

Nota che se il fog_color differisce dal colore di sfondo l’effettonebbia risulta poco naturale

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 184 / 321

Page 185: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Fog

Fog

Le seguenti funzioni permettono di specificare il range di distanzarispetto alla posizione della camera per l’applicazione dell’effetto

g lFogf (GL_FOG_START, 5 .0 ) ;g lFogf (GL_FOG_END, 35.0) ;

La transizione tra START e END è controllata da un’equazione difog; ad esempio

g lFog i (GL_FOG_MODE, GL_LINEAR) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 185 / 321

Page 186: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Fog

Fog

L’equazione di fog calcola un valore f ∈ [0,1], detto fattore di fog,in relazione al range [Sart, End]. In altri termini

f : [Sart ,End ]→ [0,1]

I fog mode supportati sono i seguenti

GL_LINEAR (f = (end − c)/(end − start))GL_EXP (f = exp(−d ∗ c))GL_EXP2

(f = exp((−d ∗ c))2

)dove

c è la distanza del punto dalla camerad è il fattore di fog che si imposta con la funzioneglFogf(GL_FOG_DENSITY, 0.5);

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 186 / 321

Page 187: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Fog

Fog

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 187 / 321

Page 188: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Effetti Speciali Fog

Fog

Figura: ScreenShot del programma reflection_and_fog.c (nei materiali dellalezione)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 188 / 321

Page 189: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display Lists

Display Lists

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 189 / 321

Page 190: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display Lists

Una display list, letteralmente elenco di visualizzazione, è unmodo per definire e memorizzare una sequenza di comandiOpenGL che possono essere richiamati in qualsiasi momentoÉ possibile mischiare liberamente l’uso delle display list con laspecificazione di comandi in immediate mode all’interno di unprogramma (gli esempi di programmazione che abbiamo visto finoa ora hanno usato la modalità immediata)Le display list possono migliorare le prestazioni dell’applicazionepoiché memorizzano solo i comandi OpenGL, ad esempio lechiamate a glColor* e a glVertex*, in modo che quando sonoinvocate non vengono eseguite le istruzioni che sono statenecessarie per determinarne i parametri

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 190 / 321

Page 191: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: modellare un triciclo con le display list

Si consideri il problema di modellare un triciclo in cui le due ruoteposteriori hanno le stesse dimensioni ma in posizioni differentimentre la ruota anteriore è più grande ed è anche in unaposizione diversaUn modo efficace per modellare le ruote del triciclo sarebbe quellodi conservare la geometria di una ruota in una diaplay list edeseguire la lista tre volteOvviamente si dovrà impostare la matrice di modelviewcorrettamente ogni volta prima di eseguire la lista per calcolaredimensione e posizione delle ruote

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 191 / 321

Page 192: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: modellare un toro con le display list

Si supponga di voler disegnare un toro e osservarlo da diverseangolazioni: il modo più efficiente è memorizzare il toro in unadisplay list per poi eseguirla (dopo aver cambiato la matrice dimodelview) ogni volta che si desidera modificare la vista

Figura: ScreenShot del programma torus.c

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 192 / 321

Page 193: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: sorgente del programma torus.c

/ / . . .GLuint theTorus ;

/∗ Draw a to rus ∗ /s t a t i c void t o rus ( i n t numc , i n t numt ){

i n t i , j , k ;double s , t , x , y , z , twopi ;twopi = 2 ∗ ( double ) M_PI ;for ( i = 0 ; i < numc ; i ++) {

g lBegin (GL_QUAD_STRIP) ;for ( j = 0 ; j <= numt ; j ++) {

for ( k = 1 ; k >= 0; k−−) {s = ( i + k ) % numc + 0 . 5 ;t = j % numt ;

/ / . . .

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 193 / 321

Page 194: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: sorgente del programma torus.c

/ / . . .

x = (1+.1∗ cos ( s∗ twopi / numc) ) ∗cos ( t ∗ twopi / numt ) ;y = (1+.1∗ cos ( s∗ twopi / numc) ) ∗ s in ( t ∗ twopi / numt ) ;z = .1 ∗ s in ( s ∗ twopi / numc) ;g lVe r tex3 f ( x , y , z ) ;

}}

glEnd ( ) ;}

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 194 / 321

Page 195: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: sorgente del programma torus.c

/∗ Create d i sp lay l i s t w i th Torus and i n i t i a l i z e s ta te ∗ /s t a t i c void i n i t ( void ){

theTorus = g lGenLis ts ( 1 ) ;g lNewList ( theTorus , GL_COMPILE) ;

to rus (8 , 25) ;g lEndL is t ( ) ;/ / . . .

}/∗ Clear window and draw to rus ∗ /void d i sp lay ( void ){

g lC lea r (GL_COLOR_BUFFER_BIT) ;g l C o l o r 3 f ( 1 . 0 , 1 .0 , 1 .0 ) ;g l C a l l L i s t ( theTorus ) ;g lF lush ( ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 195 / 321

Page 196: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: sorgente del programma torus.c

La funzione init() crea una lista; si noti che la funzione chemodella il toro è racchiuso tra glNewList() e glEndList()L’argomento theTorus per glNewList() è un indice intero generatoda glGenLists() che identifica in modo univoco la display listLa funzione display() semplicemente cancella lo schermo echiama glCallList() per eseguire i comandi nell’elenco divisualizzazioneSe avessimo operato in immediate mode display() avrebbe dovutorieseguire la funzione torus (8 , 25) per ridefinire i comandiOpenGL necessari per rappresentare il toro

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 196 / 321

Page 197: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Considerazioni e vincoli nell’uso delle display list

Una display list contiene solo comandi OpenGL/GLU, glCallList()compreso (display list innestate)I parametri dei comandi OpenGL vengono copiati nella display listinsieme ai comandi stessi quando la display list viene creata

Tutti i calcoli trigonometrici necessari per creare il toro sono eseguitisolo la prima volta per definire i parametri dei comandi OpenGL

I parametri, una volata inseriti in una display list, non possonoessere cambiati; inoltre, non è possibile aggiungere o rimuoverecomandi da una display listIn altri termini, le display list non possono essere modificate; èpossibile comunque eliminare l’intera display list e crearne unanuova

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 197 / 321

Page 198: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display Lists: comandi principali

GLuint glGenLists(GLsizei range);Allocates range number of contiguous, previously unallocateddisplay-list indices. The integer returned is the index that marks thebeginning of a contiguous block of empty display-list indices. Thereturned indices are all marked as empty and used, so subsequentcalls to glGenLists() don’t return these indices until they’re deleted.Zero is returned if the requested number of indices isn’t available,or if range is zero.

void glCallList(GLuint list);This routine executes the display list specified by list. Thecommands in the display list are executed in the order they weresaved, just as if they were issued without using a display list. If listhasn’t been defined, nothing happens.

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 198 / 321

Page 199: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display Lists: comandi principali

void glNewList (GLuint list, GLenum mode);Specifies the start of a display list. OpenGL routines that are calledsubsequently (until glEndList() is called to end the display list) arestored in a display list, except for a few restricted OpenGL routinesthat can’t be stored. (Those restricted routines are executedimmediately, during the creation of the display list.) list is a nonzeropositive integer that uniquely identifies the display list. The possiblevalues for mode are GL_COMPILE andGL_COMPILE_AND_EXECUTE. Use GL_COMPILE if you don’twant the OpenGL commands executed as they’re placed in thedisplay list; to cause the commands to be executed immediately aswell as placed in the display list for later use, specifyGL_COMPILE_AND_EXECUTE.

void glEndList (void);Marks the end of a display list.

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 199 / 321

Page 200: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display Lists: comandi principali

GLboolean glIsList (GLuint list);Returns GL_TRUE if list is already used for a display list andGL_FALSE otherwise.

void glDeleteLists (GLuint list, GLsizei range);Deletes range display lists, starting at the index specified by list. Anattempt to delete a list that has never been created is ignored.

Eliminazione di una display listUna display list può essere eliminata esplicitamente con la funzioneglDeleteLists() oppure implicitamente ridefinendone un’altra con con lostesso indice

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 200 / 321

Page 201: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display list multiple

OpenGL fornisce un meccanismo efficiente per eseguire diplay list insuccessione: si mettano gli indici in un array e si chiama glCallLists()

Rappresentazione di una superficie topografica

Ogni riga della matrice dei punti quotati, rappresentata attraverso unatriangle strip, può essere compilata in una display list indipendente; ledisplay list così create possono essere eseguite in un solo colpoattraverso la funzione glCallLists()

Rappresentazione di un font

È possibile far in modo che ogni indice corrisponda al valore ASCII diun carattere utilizzando glListBase() per specificare l’indice iniziale(quello corrispondente alla prima lettera, ad es. la A) prima dichiamare glCallLists()

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 201 / 321

Page 202: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Display Lists: comandi principali

void glListBase (GLunint base);Specifies the offset that’s added to the display-list indices inglCallLists() to obtain the final display list indices. The defaultdisplay list base is 0.

void glCallLists (GLsizei n, GLenum type, const GLvoid *lists);Executes n display lists. The indices of the lists to be executed arecomputed by adding the offset indicated by the current display listbase (specified with glListBase()) to the signed integer values inthe array pointed to by lists.The type parameter indicates the data type of the values in lists. Itcan be set to GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, orGL_FLOAT.

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 202 / 321

Page 203: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Esempio: sorgente del programma stroke.c

void i n i t S t r o k e d F o n t ( void ) {GLuint base = glGenLis ts (128) ;g lL i s tBase ( base ) ;g lNewList ( base+ ’A ’ , GL_COMPILE) ; drawLet ter ( Adata ) ;

g lEndL is t ( ) ;/ / . . .glNewList ( base+ ’Z ’ , GL_COMPILE) ; drawLet ter ( Zdata ) ;

g lEndL is t ( ) ;g lNewList ( base+ ’ ’ , GL_COMPILE) ; /∗ space charac te r ∗ /

g l T r a n s l a t e f ( 8 . 0 , 0 .0 , 0 .0 ) ; g lEndL is t ( ) ;}

void p r i n t S t r o k e d S t r i n g ( GLbyte ∗s ) {GLint len = s t r l e n ( s ) ;g l C a l l L i s t s ( len , GL_BYTE, s ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 203 / 321

Page 204: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Display Lists

Ripristinare le variabili di stato

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 204 / 321

Page 205: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Textures

Textures

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 205 / 321

Page 206: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture Mapping

OpenGL consente di mappare un’immagine, detta texture, su primitivegeometriche

Immagini e oggetti geometrici seguono due pipeline separate che siuniscono poi nella fase di rasterizzazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 206 / 321

Page 207: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Applicare le texture

Applicare una texture consiste in:

Specificare la texture

Leggere o generare l’immagine1

Assegnare l’immagine alla texture memory

Specificare i parametri della texture

Filtering, wrapping

Assegnare le coordinate di texture ai vertici

1OpenGL non è in grado di leggere i formati immagine tipo PNG, JPEG,GIF o TGA; Il file immagine deve essere letto e decodificato per ottenerel’informazione colore

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 207 / 321

Page 208: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Caricamento della texture

Gli elementi di una texture sono detti texel (e non pixel)La modalità di texture si abilita/disabilita conglEnable(GL_TEXTURE_2D)glDisable(GL_TEXTURE_2D)(nota che OpenGL supporta anche texture 1D e 3D)Il primo passo è leggere il file che contiene la textureSuccessivamente si deve caricare in memoria la texture,attraverso la funzioneglTexImage2D(glTexImage1D e glTexImage3D per texture 1D e 3D)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 208 / 321

Page 209: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Caricamento della texture (glTexImage2D)

void glTexImage2D (GLenum ta rge t ,GLint l eve l ,GLint i n t e r n a l f o r m a t ,GLsize i width ,GLsize i height ,GLint border ,GLenum format ,GLenum type ,const GLvoid ∗ p i x e l s

) ;

target deve essere GL_TEXTURE_2D (o GL_TEXTURE_1D oGL_TEXTURE_3D se si usano texture a 1 o 3 dimesioni)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 209 / 321

Page 210: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Caricamento della texture (glTexImage2D)

level specifica il livello di dettaglio (LOD) della texture; per orausiamo il valore 0 (no mippapping)internalformat è il numero di componenti di colore (1-4) dei texel;per ora usiamo GL_RGB, cioè 3width e height sono le dimensioni della texture in pixel; devonoessere della forma 2m (o 2m + 2 in caso border valga 1); se ledimensioni non sono potenza di due usare la funzione voidgluScaleImageborder specifica lo spessore del bordo della texture e può essere0 (nessun bordo) o 1; per ora usiamo 0format specifica il formato dei pixel (es. GL_BGR_EXT,GL_BGRA_EXT, GL_LUMINANCE)type specifica il tipo di dato del pixel; per ora usiamoGL_UNSIGNED_BYTEpixels è il puntatore all’immagine in memoria

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 210 / 321

Page 211: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Caricamento della texture (glTexImage2D)

#include " tga . h " / / per ca r i ca re l a t e x t u r e i n formato tga/ / . . .GLubyte ∗pBytes ;GLint iWidth , iHe igh t , iComponents ;GLenum eFormat ;/ / . . ./ / Load t e x t u r epBytes = gltLoadTGA ( " Stone . tga " , &iWidth , &iHe igh t , &

iComponents , &eFormat ) ;glTexImage2D (GL_TEXTURE_2D, 0 , iComponents , iWidth , iHe igh t , 0 ,

eFormat , GL_UNSIGNED_BYTE, pBytes ) ;f r ee ( pBytes ) ;/ / . . .glEnable (GL_TEXTURE_2D)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 211 / 321

Page 212: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mappatura della texture

Una volta caricata la texture in memoria è necessario specificarecome questa deve essere applicata alla geometriaPer fare questo si specificano le texture coordinates ai verticiTipicamente le texture coordinates sono specificate come valorifloating point nell’intervallo [0, 1]Similmente alle coordinate dei vertici, che sono della forma (x, y,z, w), le coordinate di texture sono della forma (s, t, r, q). Nota checome nel caso di w, anche q non è generalmente utilizzata

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 212 / 321

Page 213: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mappatura della texture

Le coordinate di texture sono applicate ai vertici attraverso lafunzionevoid glTexCoord2f (GLfloat s, GLfloat t);glTexCoord2f deve essere invocata prima della specificazione delverticeLa specifica delle coordinate di texture può produrre unadistorsione dell’immagine originaria

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 213 / 321

Page 214: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mappatura della texture

g l C o l o r 3 f ( 1 . 0 , 1 .0 , 1 .0 ) ;/ / . . ./ / draw a tex tu red t r i a n g l eglNormal3fv ( vNormal ) ;glTexCoord2f (0 .5 f , 1.0 f ) ;g lVe r tex3 fv ( vCorners [ 0 ] ) ;glTexCoord2f (0 .0 f , 0.0 f ) ;g lVe r tex3 fv ( vCorners [ 1 ] ) ;glTexCoord2f (1 .0 f , 0.0 f ) ;g lVe r tex3 fv ( vCorners [ 4 ] ) ;/ / . . .

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 214 / 321

Page 215: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture environment

Come OpenGL combina il colore della primitiva e quello della texture ècontrollato dal texture environment mode attraverso le funzioneglTexEnvf, glTexEnvi, glTexEnvfv, glTexEnviv

void glTexEnvi (GLenum ta rge t , / / GL_TEXTURE_ENVGLenum pname , / / GL_TEXTURE_ENV_MODEGLint param / / GL_MODULATE, GL_DECAL,

/ / GL_BLEND o GL_REPLACE) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 215 / 321

Page 216: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture environment

GL_MODULATE moltiplica il colore di texel con quello dellageometria dopo aver applicato le luciGL_ADD somma i colori (e tronca a 1.0)GL_REPLACE rimpiazza il colore della geometria con quello deltexelGL_DECAL si comporta come GL_REPLACE se la texture non hala componente alpha, altrimenti miscela colore di texture egeometriaGL_BLEND la texture è blendata con un colore di blendigcostante che è necessario specificare ad esempio cosìGLf loa t fCo lo r [ 4 ] = { 1.0 f , 0.0 f , 0.0 f , 0.0 f } ;g lTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND) ;glTexEnvfv (GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, fCo lo r ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 216 / 321

Page 217: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture environment

#include " tga . h "/ / . . .GLubyte ∗pBytes ;GLint iWidth , iHe igh t , iComponents ;GLenum eFormat ;/ / . . .

/ / Load t e x t u r epBytes = gltLoadTGA ( " Stone . tga " , &iWidth , &iHe igh t , &

iComponents , &eFormat ) ;glTexImage2D (GL_TEXTURE_2D, 0 , iComponents , iWidth , iHe igh t , 0 ,

eFormat , GL_UNSIGNED_BYTE, pBytes ) ;f r ee ( pBytes ) ;/ / . . .

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) ;glEnable (GL_TEXTURE_2D) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 217 / 321

Page 218: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture environment

Alcuni parametri influenzano il comportamento del mapping e sonosettati dalle funzioni glTexParameterf, glTexParameteri,glTexParameterfv, glTexParameteriv:

void glTexParameter i (GLenum ta rge t , / / GL_TEXTURE_2DGLenum type , / / GL_TEXTURE_MIN_FILTER, . . .GLint mode / / GL_LINEAR , GL_NEAREST, . . .

) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 218 / 321

Page 219: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture parameters

glTexParameteri(GL_TEXTURE_2D, type, mode);

Type: GL_TEXTURE_MIN_FILTER oGL_TEXTURE_MAG_FILTER.Mode: GL_NEAREST, GL_LINEAR, o modalità speciali permipmapping

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 219 / 321

Page 220: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Filtering

Nearest neighbor Linear filtering

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 220 / 321

Page 221: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Filtering

#include " tga . h "/ / . . .GLubyte ∗pBytes ;GLint iWidth , iHe igh t , iComponents ;GLenum eFormat ;

/ / Load t e x t u r epBytes = gltLoadTGA ( " Stone . tga " , &iWidth , &iHe igh t , &

iComponents , &eFormat ) ;glTexImage2D (GL_TEXTURE_2D, 0 , iComponents , iWidth , iHe igh t , 0 ,

eFormat , GL_UNSIGNED_BYTE, pBytes ) ;f r ee ( pBytes ) ;/ / . . .glTexParameter i (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) ;glTexParameter i (GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR) ;glTexEnvi (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE) ;glEnable (GL_TEXTURE_2D) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 221 / 321

Page 222: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Esempio (Pyramid.c)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 222 / 321

Page 223: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Wrap Mode

Può succedere che la texture sia troppo piccola per ricoprirel’oggetto desiderato e si voglia ripetere più volte la texturesull’oggettoQuesto si può fare sempre con la funzione glTexParameteri; ad es.

glTexParameter i (GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT) ;g lTexParameter i (GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT) ;

e specificando valori al difuori dell’intervallo [0,1] per le coordinatedi texture

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 223 / 321

Page 224: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Esempio (PyramidWrap.c)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 224 / 321

Page 225: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture Objects

I texture objects permettono di caricare in un colpo solo piùtexture e settare i parametri di texture per ognunaL’uso dei texture objects semplifica l’applicazione e produce unbeneficio in termini di performanceLa seguente funzione alloca n texture objects:

void glGenTexture ( GLsize i n , GLuint ∗ t e x tu res ) ;

dove textures è un puntatore a un array che contiene gliidentificatori delle texture

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 225 / 321

Page 226: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Texture Objects

La funzione glBindTexture effettua il texture binding

void g lB indTexture (GLenum ta rge t , GLuint t e x t u r e ) ;

dove target è ad es. GL_TEXTURE_2D, mentre texture è unoggetto textureEffettuato il binding, tutte le chiamate a glParameteri sarannoriferite (collegare) all’oggetto texture correnteLa funzione glDeleteTextures elimina oggetti texture

void g lDe le teTextures ( GLsize i n , GLuint ∗ t e x tu res ) ;

Infine, la funzione glIsTexture restituisce GL_TRUE se texture è latexture corrente, GL_FALSE altrimenti

GLboolean g l I sTex tu re ( GLuint t e x t u r e ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 226 / 321

Page 227: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Esempi (Pyramid3)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 227 / 321

Page 228: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Secondary specular color

In alcune implementazioni di OpenGL è possibile applicarel’effetto di luce riflessa dopo l’applicazione della texture per uneffetto di maggiore luminositàLa funzione glLightModeli applica la luce riflessa dopo la texturemapping

g lL i gh tMode l i (GL_LIGHT_MODEL_CONTROL,GL_SEPARATE_SPECULAR_COLOR) ;

Per tornare alla modalità di default si usa

g lL i gh tMode l i (GL_LIGHT_MODEL_CONTROL, GL_COLOR_SINGLE) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 228 / 321

Page 229: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mipmapping

Mip sta per multum in parvo, cioè molto con pocoÈ una tecnica che permette di risolvere due problemi che sipresentano solitamente con le texture:

Incrementa le performanceLimina l’effetto di scintillazione che si verifica quando la geometriasu cui è mappata la texture è troppo piccola rispetto alladimensione della texture stessa

L’unico svantaggio è un lieve incremento di memoria per lostorage della texture

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 229 / 321

Page 230: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mipmapping

Una mipmaps è in realtà costituita da più immagini che ne definisconoil livello

Al livello 0 troviamo la texture originariaAl livello 1 la stessa textue ma con dimensioni dimezzate sialungo s che tAl livello 2 troviamo la texture di livello 1 dimezzata, e così viaÈ OpenGL a decidere quale livello applicare

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 230 / 321

Page 231: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mipmapping

Innanzitutto si specifica il livello di dettaglio in glTexImage2DIl mipmapping aggiunge due ulteriori filtri di rendering aiprecedenti due (GL_NEAREST, GL_LINEAR) da attivare inglTexParameteri, e cioè:GL_NEAREST_MIPMAP_NEARESTGL_NEAREST_MIPMAP_LINEARGL_LINEAR_MIPMAP_NEARESTGL_LINEAR_MIPMAP_LINEAR

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 231 / 321

Page 232: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Textures

Mipmapping

La funzione gluScaleImage può essere utilizzata per generare iLOD a partire da una texture standardLa generazione dei LOD può essere eseguita ancheautomaticamente da OpenGL tramite la seguente funzione

i n t gluBuild2DMipmaps (GLenum ta rge t , / / GL_TEXTURE_2DGLint components , / / The number o f co l o r components i n

the t e x t u r eGLint width ,GLint he ight ,GLenum format , / / The format o f the p i x e l dataGLenum type , / / The data type f o r data ( es . GL_BYTE)const void ∗data / / A p o i n t e r to the image data i n memory

.) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 232 / 321

Page 233: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Selezione

Selezione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 233 / 321

Page 234: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Grafica Interattiva

La Selezione è una potente funzionalità di OpenGL che permettedi fare click in una determinata posizione sulla viewport edeterminare quali oggetti sono sotto il puntatore del mouseQuesto è possibile poiché viene creato un volume di vista locale ecircoscritto attraverso la funzione gluPickMatrix e poi vengonoindividuati quali oggetti rientrano al suo internoL’atto di selezionare un oggetto sullo schermo è detto pickingIl feedback è un’altra modalità di OpenGL (che non trattiamo) chepermette di ottenere informazioni da OpenGL su come il verticisono trasformati e illuminati; è possibile utilizzare questeinformazioni per trasmettere i risultati di rendering su una rete,inviarli ad un plotter o aggiungere altri elementi grafici

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 234 / 321

Page 235: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Selezione

In modalità di selezione le primitive che ricadono all’interno delvolume di vista, che normalmente appaiono nel frame buffer,producono invece dei record di selezione (hit records) nelselection bufferÈ necessario impostare questo buffer in anticipo e assegnarenomi a primitive o gruppi di primitive (oggetti o modelli) in modoche possano essere identificati nel buffer di selezione; in tal modoè possibile analizzare il buffer di selezione per determinare qualioggetti intersecato il volume di vistaTipicamente si modifica il volume di visualizzazione creandoneuno locale relativamente alla posizione del mouse sulla viewportprima di entrare in modalità di selezione e si riesegue il codice didisegno di modo che i nomi degli oggetti che ricadono in quelvolume siano inviati al selection buffer

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 235 / 321

Page 236: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Selezione: attribuire i nomi

I nomi degli oggetti non sono altro che numeri interi senza segno,motivo per cui il selection buffer, a differenza di altri buffer diOpenGL, è semplicemente un array di valori interiIn modalità selezione è possibile lavorare con selezioni singole omultiple; in entrambi i casi viene utilizzato un name stackDopo aver inizializzato il name stack, è possibile sostituire il nomeattualmente in cima alla pila (selezione singola) oppure effettuareoperazioni di push in modo da avere più nomi nello stack(selezione multipla)Quando si verifica un hit, tutti i nomi attualmente nel name stackvengono aggiunti alla fine del selection buffer, così, se necessario,un singolo hit può restituire più di un nome

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 236 / 321

Page 237: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Selezione: attribuire i nomi (vedi sorgente Planets.c)

/ / Def ine ob jec t names#define SUN 1#define MERCURY 2#define VENUS 3/ / . . .

/ / I n i t i a l i z e the names stack ; glPushName pushes 0 on/ / the stack to put a t l e a s t one en t ry on the stackgl In i tNames ( ) ;glPushName ( 0 ) ;

/ / Name and draw the Sun ; glLoadName names the ob jac t and/ / rep laces the cu r ren t name on top of the name stackg l C o lo r 3 f (1 .0 f , 1.0 f , 0.0 f ) ;glLoadName (SUN) ;DrawSphere (15 .0 f ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 237 / 321

Page 238: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Selezione: attribuire i nomi (vedi sorgente Planets.c)

/ / Name and draw Mercuryg l C o lo r 3 f (0 .5 f , 0.0 f , 0.0 f ) ;g lPushMatr ix ( ) ;

g l T r a n s l a t e f (24 .0 f , 0.0 f , 0.0 f ) ;glLoadName (MERCURY) ;DrawSphere (2 .0 f ) ;

g lPopMatr ix ( ) ;

/ / Name and draw Venusg l C o lo r 3 f (0 .5 f , 0.5 f , 1.0 f ) ;g lPushMatr ix ( ) ;

g l T r a n s l a t e f (60 .0 f , 0.0 f , 0.0 f ) ;glLoadName (VENUS) ;DrawSphere (4 .0 f ) ;

g lPopMatr ix ( ) ;

/ / . . .

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 238 / 321

Page 239: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode

Come accennato in precedenza, OpenGL può funzionare in trediverse modalità di rendering: GL_RENDER, GL_SELECTION eGL_FEEDBACKLa modalità predefinita è GL_RENDER; per utilizzare laselezione, dobbiamo cambiare la modalità di rendering:

glRenderMode (GL_SELECTION) ;

Generalmente, si utilizza la stessa funzione di rendering sia inmodalità GL_RENDER che in modalità GL_SELECTION

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 239 / 321

Page 240: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer

Il codice seguente verifica se è stato effettuato in clic del tastosinistro del mouse e passa le coordinate del mouse aProcessSelection, che si occupa della gestione del click

/ / Process the mouse c l i c kvoid MouseCallback ( i n t button , i n t s ta te , i n t x , i n t y ){

i f ( bu t ton == GLUT_LEFT_BUTTON && s ta te == GLUT_DOWN)ProcessSelect ion ( x , y ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 240 / 321

Page 241: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer

Ogni hit record nel selection buffer contiene:

Il numero di nomi attualmente nel name stack (1 nell’esempio)Max e min z dell’oggetto, utile in caso di selezione multiplaIl primo nome contenuto nel names stack (bottom element)Se più nomi compaiono nel names stack, essi seguono il quartoelemento

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 241 / 321

Page 242: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer (vedisorgente Planets.c)

#define BUFFER_LENGTH 64

/ / Process the se lec t i on , which i s t r i g g e r e d by a r i g h t mousec l i c k a t ( xPos , yPos )

void ProcessSelect ion ( i n t xPos , i n t yPos ) {GLf loa t fAspect ;

/ / Def ine the s e l e c t i o n b u f f e rs t a t i c GLuint s e l e c t B u f f [BUFFER_LENGTH ] ;

/ / H i t counter and v iewpor t s torageGLint h i t s , v iewpor t [ 4 ] ;

/ / Setup s e l e c t i o n b u f f e rg l S e l e c t B u f f e r (BUFFER_LENGTH, s e l e c t B u f f ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 242 / 321

Page 243: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer (vedisorgente Planets.c)

/ / Get the v iewpor tg lGe t In tegerv (GL_VIEWPORT, v iewpor t ) ;

/ / Switch to p r o j e c t i o n and save the mat r i xglMatr ixMode (GL_PROJECTION) ;g lPushMatr ix ( ) ;

/ / Change render modeglRenderMode (GL_SELECT) ;

/ / Es tab l i sh new c l i p p i n g volume to be u n i t cube around/ / mouse cursor po in t ( xPos , yPos ) and extending two p i x e l s/ / i n the v e r t i c a l and h o r i z o n t a l d i r e c t i o ng l L o a d I d e n t i t y ( ) ;g l uP ickMa t r i x ( xPos , v iewpor t [ 3 ] − yPos , 2 ,2 , v iewpor t ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 243 / 321

Page 244: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer (vedisorgente Planets.c)

/ / Apply perspec t i ve mat r i xfAspect = ( f l o a t ) v iewpor t [ 2 ] / ( f l o a t ) v iewpor t [ 3 ] ;g luPerspec t i ve (45 .0 f , fAspect , 1 .0 , 425.0) ;

/ / Draw the sceneRenderScene ( ) ;

/ / C o l l e c t the h i t sh i t s = glRenderMode (GL_RENDER) ;

/ / I f a s i n g l e h i t occurred , d i sp lay the i n f o .i f ( h i t s == 1)

ProcessPlanet ( s e l e c t B u f f [ 3 ] ) ;

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 244 / 321

Page 245: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer (vedisorgente Planets.c)

/ / Restore the p r o j e c t i o n mat r i xglMatr ixMode (GL_PROJECTION) ;g lPopMatr ix ( ) ;

/ / Go back to modelview f o r normal render ingglMatr ixMode (GL_MODELVIEW) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 245 / 321

Page 246: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer

La funzione gluPickMatrix è una comoda utility che crea unamatrice che descrive il nuovo volume di visualizzazione:

void g luP ickMa t r i x ( GLdouble x , GLdouble y , GLdouble width ,GLdouble height , GLint v iewpor t [ 4 ] ) ;

I parametri x e y definiscono il centro del volume di picking inOpenGL window coordinates (si usano in genere le coordinate delmouse)I parametri width e height specificano le dimensioni del volume divista in window pixelsL’array viewport contiene le coordinate della vieport corrente; sipossono ottenere facilmente queste informazioni chiamando lafunzione glGetIntegerv(GL_VIEWPORT, viewport);

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 246 / 321

Page 247: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Selezione

Lavorare in Selection mode: il selection buffer

Per utilizzare gluPickMatrix, si deve prima salvare l’attuale matricedi proiezione, quindi chiamare glLoadIdentity per creare volume divista unitariogluPickMatrix sposta questo volume si visualizzazione nellaposizione correttaInfine, è necessario applicare eventuali ulteriori proiezioniprospettiche applicate nella scena originale, altrimenti non saràpossibile ottenere una mappatura correttaLa funzione ProcessPlanet scrive il nome del pianeta clickatosulla window caption sfruttando glutSetWindowTitle

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 247 / 321

Page 248: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Algoritmi

Algoritmi

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 248 / 321

Page 249: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Stadi Principali

La visualizzazione di un modello grafico passa attraverso quattrostadi principali, che costituiscono la cosiddetta pipeline grafica:

ModellazioneElaborazione geometricaRasterizzazioneDisplay

Il risultato della modellazione è un insieme di vertici chespecificano la scenaIl compito dell’elaborazione geometrica è quello di determinarequali siano gli oggetti visibili e di assegnare il colore a tali oggetti;in questa fase vengono applicati: normalizzazione, clipping,rimozione delle linee nascoste ed ombreggiatura

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 249 / 321

Page 250: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Stadi Principali

Dopo che è stata effettuata la proiezione, si lavora con oggetti(vertici) bidimensionali che sono quindi sottoposti allarasterizzazione o scan conversion per ottenere la proiezione dellascena 3D nel piano 2DInfine, il processo di trasferimento dell’immagine dal frame-bufferallo schermo è svolto automaticamente dall’hardware grafico

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 250 / 321

Page 251: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Rasterizzazione

Nei sistemi di grafica raster le primitive geometriche, descritte intermini dei loro vertici sul piano cartesiano, sono approssimate damatrici di pixelCon una matrice abbastanza densa è possibile rappresentarepraticamente qualsiasi oggetto geometrico, anche complesso:punti, linee, cerchi, ellissi, etc.La procedura con cui le figure di tipo continuo si rappresentanocome insieme di pixel discreti è chiamata scan conversion orasterizzazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 251 / 321

Page 252: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Clipping

Il clipping è il processo che consiste nell’eliminazione delle partidegli oggetti al di fuori del volume di vistaCi sono diversi modi per effettuare il clippingLa tecnica più ovvia è quella di effettuare il clipping della primitivaprima della scan conversion, calcolandone le intersezionianalitiche con i bordi del rettangolo di visualizzazione; i punti diintersezione sono quindi usati per definire nuovi vertici per laprimitivaIl vantaggio di eseguire il clipping prima della scan conversionrisiede ovviamente nel fatto che la scan conversion deve trattaresolo con la nuova versione delle primitive, non con quellaoriginale, che potrebbe essere molto più estesa

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 252 / 321

Page 253: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Algoritmi di Clipping e Rasterizzazione

I display raster invocano gli algoritmi di clipping e scan conversionogni volta che un’immagine viene creata o modificataQuesti algoritmi non solo devono creare immagini visualizzabili inmodo soddisfacente, ma devono eseguire queste operazioni il piùvelocemente possibileCome vedremo, gli algoritmi di scan conversion usano metodiincrementali per minimizzare il numero di calcoli da eseguiredurante ogni iterazione; inoltre essi usano l’aritmetica intera e nonquella in virgola mobile

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 253 / 321

Page 254: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

Approcci image-oriented e object-oriented

La libreria grafica prende in input un insieme di vertici chespecificano gli oggetti geometrici e produce in output i pixel nelframe bufferPer produrre un’immagine la libreria grafica deve considerareciascun pixel, e per produrre un’immagine corretta, deveprocessare ogni primitiva geometrica e ogni sorgente luminosaLa produzione delle immagini finali è perseguita generalmentecon uno dei seguenti approcci:

image-orientedobject-oriented

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 254 / 321

Page 255: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

L’approccio image-oriented

L’approccio image-oriented è basato su un ciclo della forma

for ( each_pixe l )ass ign_a_color ( p i x e l ) ;

Pertanto, la variabile fondamentale è il pixelCon questo approccio è necessario determinare quali primitivegeometriche coinvolgono il pixel e, in base a esse determinare ilcolore per il disegnoNota: la quantità di memoria fisica richiesta per l’elaborazione delsingolo pixel può essere inferiore alle dimensioni del frame buffer;tuttavia, a ogni passo, è richiesta l’elaborazione di tutte le primitive

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 255 / 321

Page 256: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi

L’approccio object-oriented

L’approccio object-oriented è basato su un ciclo della forma

for ( each_object )render ( ob jec t ) ;

I vertici sono processati da una serie di moduli (funzioni) che litrasformano, li ombreggiano e determinano se sono visibiliOgni primitiva geometrica che emerge dal processing geometricopuò influenzare ciascun pixel del frame buffer; quindi la memoriarichiesta a ogni iterazione non può, in generale, essere minore diquella richiesta per l’intero frame bufferComunque, grazie al fatto che le memorie grafiche sono diventatepiù generose ed economiche che in passato, queste richiestesono diventate accettabiliLe librerie grafiche più diffuse propendono ormai per l’approccioobject-oriented

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 256 / 321

Page 257: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei segmenti

In questa sezione descriveremo alcuni algoritmi per la scanconversion dei segmentiFaremo l’ipotesi di aver già effettuato il clipping delle primitive, esupporremo che gli oggetti siano già stati proiettati sul pianobidimensionaleTrascureremo, inoltre, l’effetto della rimozione delle lineenascoste, su cui torneremo più avanti

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 257 / 321

Page 258: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei segmenti

Supponiamo che il frame buffer sia una matrice n×m di pixel, conorigine nell’angolo in basso a sinistra.I pixel possono essere accesi attraverso una singola istruzionedella formaL’approccio object-oriented è basato su un ciclo della forma

w r i t e P i x e l ( i n t x , i n t y , i n t co lo r ) ;

Il frame buffer è inerentemente discreto; per questo motivopossiamo usare i numeri interi per individuare le locazioni dei pixelal suo interno

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 258 / 321

Page 259: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei segmenti

I pixel possono essere visualizzati secondo diverse forme edimensioniPer il momento supponiamo che ciascuno sia visualizzato comeun quadrato centrato nella locazione associata al pixel stesso, e dilato pari alla distanza tra due pixelInfine, faremo l’ipotesi che un processo concorrente legga ilcontenuto del frame buffer e visualizzi l’immagine sul display allafrequenza desiderataQuesta assunzione ci permette di trattare la scan conversionindipendentemente dalla visualizzazione del contenuto del framebuffer

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 259 / 321

Page 260: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

Supponiamo di avere un segmento lineare definito dagli estremi(x1, y1) e (x2, y2)

Assumeremo che questi valori siano già stati arrotondati in mododa corrispondere esattamente alla locazione di due pixelSi osservi che questa assunzione non è necessaria per derivarel’algoritmo; infatti, si può utilizzare una rappresentazione in virgolamobile per gli estremi e fare i calcoli usando l’aritmetica in virgolamobile, con il vantaggio di ottenere una scan conversion piùaccurata

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 260 / 321

Page 261: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

Supponiamo di avere un segmento lineare definito dagli estremi(x1, y1) e (x2, y2)

Assumeremo che questi valori siano già stati arrotondati in mododa corrispondere esattamente alla locazione di due pixelSi osservi che questa assunzione non è necessaria per derivarel’algoritmo; infatti, si può utilizzare una rappresentazione in virgolamobile per gli estremi e fare i calcoli usando l’aritmetica in virgolamobile, con il vantaggio di ottenere una scan conversion piùaccurata

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 261 / 321

Page 262: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

La pendenza del segmento è definita da:

m = ∆y/∆x

Il più semplice algoritmo di scan conversion per i segmenticonsiste nel calcolare m, incrementare x di 1 a partire dal puntopiù a sinistra e nel calcolare yi = mxi + h, dove h è l’ordinata delpunto dove la retta incrocia l’asse y , per ciascuno degli xi

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 262 / 321

Page 263: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

Questa strategia è tuttavia inefficiente, perché ciascuna iterazionerichiede una moltiplicazione e una somma in virgola mobile più unarrotondamentoSi può eliminare la moltiplicazione usando una tecnicaincrementale che consiste nel calcolare un punto della retta sullabase del punto precedenteL’algoritmo che si ottiene prende il nome di algoritmo DDA 2

2Il termine DDA deriva dall’inglese Digital Differential Analyzer), undispositivo meccanico che risolve le equazioni differenziali applicando unmetodo numerico: dato che una retta di pendenza m soddisfa l’equazionedifferenziale dy/dx = m, generare un segmento è equivalente a risolverenumericamente una semplice equazione differenziale

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 263 / 321

Page 264: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

Assumiamo che 0 ≤ m ≤ 1 (gli altri valori di m possono esseretrattati in modo simmetrico)L’algoritmo DDA consiste nel tracciare un pixel per ciascun valoredi x compreso tra x1 e x2 tramite il comando writePixel()Per ogni variazione di x pari a ∆x , la corrispondente variazione diy deve essere pari a ∆y = m∆xMuovendosi da x1 a x2, x viene incrementato di 1 a ogniiterazione, ossia ∆x = 1, e dunque dobbiamo incrementare y di∆y = m

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 264 / 321

Page 265: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

i n t x ;f l o a t dy , dx , y , m;

dy = y2 − y1 ;dx = x2 − x1 ;m = dy / dx ;y = y1 ;for ( x = x1 , x <= x2 , x++){w r i t e P i x e l ( x , round ( y ) , l i n e _ c o l o r ) ;y += m;}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 265 / 321

Page 266: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion DDA

La ragione per cui abbiamo limitato la pendenza massima a 1 puòessere compresa osservando la figura sotto a sinistraL’algoritmo DDA è infatti della forma: per ogni x , cerca il miglior y ,e per pendenze > 45◦ si può perdere qualche pixelPer pendenze maggiori di 1 possiamo allora scambiare x e y , inmodo tale che l’algoritmo diventi della forma: per ogni y , cerca ilmiglior x (vedi figura sotto a destra)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 266 / 321

Page 267: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

L’algoritmo DDA è abbastanza efficiente e può essere facilmenteimplementatoTuttavia esso richiede un’addizione in virgola mobile per ogni pixelgeneratoL’algoritmo di Bresenham per la scan conversion dei segmentievita invece i calcoli in virgola mobile, e per questo motivo èdiventato l’algoritmo di riferimento per la scan conversion deisegmentiSupponiamo, esattamente come nell’algoritmo DDA, che ilsegmento abbia estremi nei punti di coordinate (x1, y1) e (x2, y2) eche la pendenza m sia compresa tra 0 e 1

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 267 / 321

Page 268: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

Supponiamo di essere ad un passo intermedio del procedimentodi rasterizzazione del segmento e di aver acceso il pixel inposizione (i , j)Per x = i la retta y = mx + h, a cui appartiene il segmento, devepassare attraverso il pixel centrato su (i , j) (stiamo assumendoche i centri dei pixel siano posti nei punti intermedi tra due interi);in caso contrario, l’operazione di arrotondamento non avrebbegenerato questo pixelSe andiamo avanti a x = i + 1, la condizione sulla pendenzaindica che dobbiamo accendere uno tra due pixel possibili: o ilpixel in posizione (i + 1, j) o il pixel in posizione (i + 1, j + 1)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 268 / 321

Page 269: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

Avendo ridotto la nostra scelta a soli due pixel, possiamoriformulare il problema in termini di una variabile decisionale

d = b − a

dove a e b rappresentano le distanze tra la retta e i due pixelcandidati, di ascissa x = i + 1, e di ordinata y = j + 1 e y = j ,rispettivamente (si veda la figura sotto)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 269 / 321

Page 270: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

Se la variabile di decisione ha valore negativo, la retta passa piùvicino al pixel più in basso, così la scelta migliore, che garantiscela migliore approssimazione per il segmento, è quellarappresentata dal pixel in posizione (i + 1, j); altrimenti, si sceglieil pixel in posizione (i + 1, j + 1)

Si potrebbe calcolare la variabile decisionale d semplicementeusando l’equazione della retta y = mx + h, ma questorichiederebbe calcoli in virgola mobilePer ottenere il vantaggio computazionale dell’algoritmo diBresenham, occorrono due ulteriori passi

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 270 / 321

Page 271: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

Per prima cosa si usa una tecnica incrementale per calcolare dche consente di eliminare i calcoli in virgola mobileSupponiamo che di sia il valore assunto da d in corrispondenza dix = i ; vogliamo calcolare di+1 incrementalmente, a partire da di

Ci sono due situazioni da considerare che dipendono dal fatto cheal passo precedente non sia stata incrementata l’ascissa y(CASO 1; di ≤ 0), o che invece lo sia stato (CASO 2; di > 0)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 271 / 321

Page 272: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

CASO 1 (di ≤ 0)

bi+1 = bi + m

ai+1 = ai −m

di+1 = bi+1 − ai+1 = bi − ai + 2m = di + 2m

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 272 / 321

Page 273: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

CASO 2 (di > 0)

1 + bi+1 = bi + m⇒ bi+1 = bi + m − 1

ai+1 = 1− bi+1 = 1− (bi + m− 1) = 1− (1− ai + m− 1) = ai −m + 1

di+1 = bi+1 − ai+1 = bi − ai + 2m − 2 = di + 2m − 2 = di + 2(m − 1)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 273 / 321

Page 274: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

Ricapitolando, abbiamo:

di+1 =

{di + 2m se d ≤ 0di + 2(m − 1) se d > 0

Se moltiplichiamo di+1 per ∆x = x2 − x1 non variamo il segno (inrealtà è proprio il segno che ci interessa) e otteniamo (si noti chequi ∆y = y2 − y1)

di+1∆x =

{di∆x + 2m∆x = di∆x + 2∆y se d ≤ 0di∆x + 2(m − 1)∆x = di∆x + 2(∆y −∆x) se d > 0

Infine, imponiamo di = di∆x (è lecito perché ci interessa solo ilsegno) per cui abbiamo:

di+1 = di +

{2∆y se d ≤ 02(∆y −∆x) se d > 0

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 274 / 321

Page 275: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

La viewport: glViewPort

Per quanto riguardal’inizializzazione di d , questa puòessere:

d = 2(y2 − y1)− (x2 − x1)

In tal modod ≤ 0 quando l’angolo è < di22.5◦ e viene correttamentescelto il pixel a Estd > 0 quando la pendenza è >di 22.5◦ e viene correttamentescelto il pixel a Nord Est

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 275 / 321

Page 276: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

Il calcolo di ogni pixel successivo richiede dunque solo un’addizione eun test di segno; riassumendo:

a ogni passo l’algoritmo di Bresenham sceglie tra due pixel sullabase del segno della variabile di decisione dIl segno della variabile d dipende dal valore di d al passoprecedente e non richiede calcoli in virgola mobileè più efficiente dell’algoritmo DDA e rappresenta lo standard perla scan conversion dei segmenti

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 276 / 321

Page 277: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di scan conversion di Bresenham

dx = x2 − x1 ; dy = y2 − y1 ;d = dy ∗ 2 − dx ;incrE = 2 ∗ dy ; incrNE = 2 ∗ ( dy − dx ) ;x = x1 ; y = y1 ; w r i t e P i x e l ( x , y , value ) ;while ( x < x2 ) {

i f ( d <= 0) {d += incrE ;x++;

}else{

d += incrNE ;x++;y++;

}w r i t e P i x e l ( x , y , value ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 277 / 321

Page 278: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

Osserviamo che, essendo il cerchio una figura simmetrica, dato unpunto di coordinate (x, y), gli altri sette si trovano riflettendo,scambiando e invertendo di segno le coordinate:

P1 = (x , y) P2 = (y , x)P3 = (−y , x) P4 = (−x , y)P5 = (−x ,−y) P6 = (−y ,−x)P7 = (y ,−x) P8 = (x ,−y)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 278 / 321

Page 279: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

Si considera l’equazione della circonferenza in forma implicita

F (x , y) = x2 + y2 − R2

F (x , y) = 0 se (x , y) appartiene alla circonferenzaF (x , y) < 0 se (x , y) è interno alla circonferenzaF (x , y) > 0 se (x , y) è esterno alla circonferenza

e si considera l’ottante che parte da 90 gradi e procede in sensoorario verso 45 gradi

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 279 / 321

Page 280: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

Se P è l’ultimo pixel acceso, la scelta del prossimo pixel da accenderesi restringe a E oppure SE

La scelta dipende daM: se è interno siaccende E , se èesterno si accende SE

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 280 / 321

Page 281: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

Si può definire la variabile di decisione d come

dM = F (xp + 1, yp − 1/2) = x2p + y2

p + 2xp − yp − R2 + 5/4

Se dM < 0 viene scelto il pixel E e il nuovo valore di d diventa

dME = F (xp + 2, yp − 1/2) = x2p + y2

p + 4xp − yp − R2 + 17/4

Per cui si ha:

∆ME − dM = 2xp − 3dME = dM + 2xp − 3

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 281 / 321

Page 282: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

Se dM > 0 viene scelto il pixel SE e il nuovo valore di d diventa

dMSE = F (xp + 2, yp − 3/2) = x2p + y2

p + 4xp − 3yp − R2 + 25/4

Per cui

dMSE − dM = 2xp − 2yp + 5dMSE = dM + 2xp − 2yp + 5

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 282 / 321

Page 283: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

d può essere inizializzata in (xp, yp) = (0,R)

d = F (1,R − 1/2) = 5/4− R

Purtroppo il valore iniziale di d non è interoTuttavia, si può sostituire a d l’espressione h + 1/4 per cui si ha:

h + 1/4 = 5/4− R ⇒ h = 1− R

e sostituire il confronto d = 0 con h = −1/4Tuttavia, poiché h è inizializzata a un valore intero ed èincrementata di valori interi, il confronto h = −1/4 può esserefinalmente sostituito dal confronto h = −1

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 283 / 321

Page 284: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

L’algoritmo di Bresenham per le circonferenze

i n t x , y ; f l o a t d ;/∗ i n i z i a l i z z a z i o n e ∗ /x = 0;y = R;h= 1−R;C i r c l e P o i n t s ( x , y , l i n e _ c o l o r ) ;while ( y > x ) {

i f ( h <= 0) { /∗ s c e l t a d i E ∗ /h += 2∗x + 3;x++;

}else { /∗ s c e l t a d i SE ∗ /

h += 2∗( x − y ) + 5 ;x++;y−−;

}C i r c l e P o i n t s ( x , y , l i n e _ c o l o r ) ;

}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 284 / 321

Page 285: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei poligoni

Uno dei principali vantaggi introdotti dalla grafica raster è statoquello di permettere il riempimento delle aree interne dei poligoniA differenza della scan conversion dei segmenti, dove un singoloalgoritmo ha un ruolo dominante sugli altri, per i poligoni sonostati sviluppati e applicati diversi metodi, e la scelta di un metodoin particolare dipende fortemente dall’architettura su cui si effettual’implementazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 285 / 321

Page 286: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei poligoni

Supponiamo di voler riempire il poligono con un unico colore(scelta che ci consente di semplificare la trattazione); la regola dibase per effettuare il riempimento del poligono è la seguente: seun punto è all’interno del poligono, coloralo usando il colore diriempimento presceltoQuesto algoritmo concettuale mostra come il problema diriempimento di un poligono sia in effetti un problema diordinamento, basato sulla divisione dei pixel del frame buffer indue categorie

quelli che sono all’interno del poligonoquelli che sono all’esterno

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 286 / 321

Page 287: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei poligoni: l’algoritmo Flood fill

Possiamo visualizzare un poligono solo tramite i suoi lati, senzacolorare la regione interna, applicando l’algoritmo di Bresenhamper effettuare la scan conversion dei latiSupponiamo di avere solo due colori a disposizione: un colore disfondo (bianco) e un colore di primo piano, o di drawing (grigio)Possiamo usare il colore di drawing per la scan conversion dei latiottenendo, ad esempio, il frame buffer illustrato in figura

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 287 / 321

Page 288: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei poligoni: l’algoritmo Flood fill

Per effettuare il riempimento del poligono possiamo poi operarenel modo seguenteSe possiamo individuare un punto iniziale di coordinate (x, y)all’interno del poligono, allora consideriamo ricorsivamente i puntivicini, e li coloriamo di grigio se non appartengono ai lati delpoligonoL’algoritmo può essere espresso nel seguente modo, in cuiassumiamo che ci sia una funzione readPixel che restituisce ilcolore di un pixel:

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 288 / 321

Page 289: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei poligoni: l’algoritmo Flood fill

f l o o d F i l l ( i n t x , i n t y ){

i f ( readP ixe l ( x , y ) == WHITE) {w r i t e P i x e l ( x , y , GRAY) ;f l o o d F i l l ( x−1, y ) ;f l o o d F i l l ( x+1 , y ) ;f l o o d F i l l ( x , y−1) ;f l o o d F i l l ( x , y+1) ;

}}

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 289 / 321

Page 290: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Scan Conversion

Scan Conversion dei poligoni: l’algoritmo Scan-line

L’algoritmo di scan conversion dei poligoni basato sull’uso dellelinee di scansioneL’algoritmo è in genere più efficiente dell’algoritmo flood fill, ma piùcomplesso e sarà descritto in seguito

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 290 / 321

Page 291: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Clipping

Un altro compito fondamentale dei sistemi di grafica raster è ilclipping, ovvero il processo di determinare quali primitive, o partidi primitive, sono interne al volume di vistaDiremo che le primitive che cadono entro il volume divisualizzazione sono accettate mentre le rimanenti sono eliminateo rifiutateLe primitive che cadono solo parzialmente entro il volume divisualizzazione devono essere tagliate in modo che le parti checadono al di fuori del volume di vista siano rimosse

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 291 / 321

Page 292: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Clipping

Il clipping può essere eseguito prima della scan conversion,oppure nel corso della stessa scan conversionPer i pacchetti grafici che operano in aritmetica in virgola mobile,la soluzione migliore è quella di effettuare prima il clipping nelsistema di coordinate in virgola mobile, e quindi la scanconversion delle primitive già ridotteNella libreria OpenGL si effettua il clipping delle primitive rispettoad un volume tridimensionale prima di effettuare la scanconversion

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 292 / 321

Page 293: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Clipping

Solo il segmento AB apparirà integralmente sullo schermo,mentre l’intero segmento CD sarà eliminato; i segmenti EF e GHdovranno invece essere accorciati prima di essere visualizzatiTutta l’informazione necessaria per il clipping può esseredeterminata calcolando le intersezioni tra le rette cuiappartengono i segmenti e i bordi della finestra di clippingÈ preferibile ridurre il calcolo delle intersezioni poiché ogniintersezione richiede calcoli in virgola mobile

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 293 / 321

Page 294: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Algoritmo di Cohen-Sutherland

Nell’algoritmo di Cohen-Sutherland la maggior parte dimoltiplicazioni e divisioni in virgola mobile è sostituita da unacombinazione di sottrazioni in virgola mobile e operazioni su bitI lati della finestra di clipping vengono estesi idealmente all’infinito,dividendo il piano in nove regioniA ogni regione si assegna un codice binario b0b1b2b3 composto diquattro bit e chiamato outcode

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 294 / 321

Page 295: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Algoritmo di Cohen-Sutherland

Si pone:

b0 =

{1 se y > ymax0 se y ≤ ymax

Analogamente si pone b1 è uguale a 1 se y < ymin

b2 e b3 sono invece determinati dalle relazioni tra x e i bordisinistro e destro della finestra di visualizzazioneSi noti che la regione che corrisponde alla finestra divisualizzazione è caratterizzata dall’outcode 0000

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 295 / 321

Page 296: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Algoritmo di Cohen-Sutherland

CASO 1: O1 = O2 = 0000Entrambi gli outcode sono 0000; il segmento è INTERNOCASO 2: O1&O2 6= 0000I due punti estremi sono entrambi sotto, sopra, a sinistra o adestra della window; il segmento è ESTERNOCASO 3: O1&O2 = 0000Gli estremi sono esterni, ma la linea non può essere rifiutataperché potrebbe intersecare la windowCASO 4: O1 6= 0000; O2 = 0000, o viceversaSi considera fra i due estremi quello con outcode non nullo; sidetermina l’intersezione fra il segmento dato e il lato della window(corrispondente al bit non nullo dell’outcode); si aggiornal’estremo considerato con l’intersezione trovata

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 296 / 321

Page 297: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Algoritmo di Cohen-Sutherland

Il segmento AB non è né interno né esternosia A l’estremo con outcode non nullo; calcolo A′, intersezione traAB e X = Xwmin (retta associata al bit 4); il segmento risultante èA′BDagli outcode di A′ e B risulta che A′B non è né interno né esternoB è l’unico estremo con outcode non nullo; calcolo B′ intersezionetra A′B e X = Xwmax (retta associata al bit 3); il segmento è A′B′

che è interno

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 297 / 321

Page 298: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Algoritmi di Clipping

Algoritmo di Cohen-Sutherland

I controlli sugli outcode richiedono solo operazioni Booleane e leintersezioni vengono calcolate solo se necessarioL’algoritmo di Liang-Barsky per il clipping dei segmenti è piùefficiente ma non sarà trattato per questioni di tempo così comegli algoritmi di clipping di poligoni (es. Sutherland-Hodgman)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 298 / 321

Page 299: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Antialiasing

Antialiasing

La scan conversion dei segmenti e dei poligoni può appariredisturbata da alcuni difetti di visualizzazioneQuesti difetti si verificano tutte le volte che cerchiamo di passaredalla rappresentazione continua di un oggetto, che ha unarisoluzione infinita, alla sua approssimazione discreta, che hainvece una risoluzione limitataA questo fenomeno si dà il nome di aliasing; l’applicazione ditecniche che riducono e eliminano l’aliasing sono dette diantialiasing

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 299 / 321

Page 300: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Antialiasing

Antialiasing

Gli errori sono causati da tre problemi collegati alla natura discretadel frame bufferPer prima cosa, se abbiamo un frame buffer n x m, il numero dipixel è fissato e possiamo generare solo certi pattern perapprossimare i segmenti; Molti segmenti tra loro diversipotrebbero così essere approssimati dallo stesso pattern di pixelIn secondo luogo, le locazioni dei pixel sono fissate su una grigliauniformeInfine, i pixel hanno dimensione e forma fissata

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 300 / 321

Page 301: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Antialiasing

Antialiasing

Nonostante le rette siano entità unidimensionali, le rette ottenutecon la scan conversion devono avere un’ampiezza per poteressere visibiliUna primitiva, una volta rasterizzata, occupa un’area finita delloschermo; possiamo quindi pensare al nostro segmento come adun rettangolo con un certo spessore che copre una parte dellagriglia di pixelPossiamo allora osservare che un segmento non dovrebbeaccendere un solo pixel di una colonna usando il colore nero ma,piuttosto, dovrebbe visualizzare più di un pixel per riga o colonna,con intensità opportuna di colore

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 301 / 321

Page 302: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Antialiasing

Antialiasing

Allora, per le linee di ampiezza pari a un pixel, solo quelle verticalie orizzontali dovrebbero influenzare esattamente un pixel percolonna e riga, rispettivamentePer le linee di pendenza diversa, più di un pixel deve esserevisualizzato in una riga o una colonna

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 302 / 321

Page 303: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Antialiasing

Unweighted Area Sampling

Nell’algoritmo unweighted area sampling una linea contribuisceall’intensità dei pixel in misura proporzionale alla percentuale delpixel che viene copertoUn pixel pienamente coperto su un display in bianco e nero, saràcolorato in nero, mentre un pixel parzialmente ricoperto saràcolorato con un’opportuna sfumatura di grigio di intensitàproporzionale alla copertura del pixel da parte della lineaI pixel che non sono intersecati dalla linea restano bianchiIn questo modo, la linea appare più liscia e continuaSi noti che esiste una strategia alternativa nota come weightedarea sampling

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 303 / 321

Page 304: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

Approcci object-space e image-space

Una volta che a un insieme di vertici sono state applicate letrasformazioni geometriche richieste e gli oggetti definiti da questivertici sono stati sottoposti al clipping, prima di eseguire la scanconversion, si deve risolvere il problema della rimozione dellesuperfici nascoste per determinare se un oggetto è visibileall’osservatore, oppure rimane oscurato da altri oggettiGli algoritmi per la rimozione delle superfici nascoste si possonodividere in due classi:

gli algoritmi object-space determinano, per ogni oggetto, quali partidell’oggetto non sono oscurate da altri oggetti nella scenagli algoritmi image-space determinano, per ogni pixel, quale èl’oggetto più vicino all’osservatore

La libreria OpenGL utilizza un particolare algoritmo, l’algoritmoz-buffer, che appartiene alla seconda classe

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 304 / 321

Page 305: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

Approccio object-space

Data una scena tridimensionale composta da k poligoni piatti eopachi, si può derivare un generico algoritmo di tipo object-spaceconsiderando gli oggetti a coppie: data una coppia di poligoni, adesempio A e B, ci sono quattro casi da considerare:

A oscura B: visualizzeremo solo AB oscura A: visualizzeremo solo BA e B sono completamente visibili: visualizzeremo sia A che BA e B si oscurano parzialmente l’un l’altro: dobbiamo calcolare leparti visibili di ciascun poligono

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 305 / 321

Page 306: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

Approccio object-space

Dal punto di vista della complessità, la determinazione del casoda esaminare e il calcolo della parte visibile di un poligono sonoconsiderate come una singola operazione; si procede quindiinduttivamenteSi prende uno dei k poligoni e lo si confronta con tutti i restantik − 1; in questo modo si determina quale parte del poligono saràvisibileQuesto processo è ripetuto con gli altri poligoni: a ogni passo siconfronta il poligono in esame con tutti i poligoni rimanenti, fino aquando rimangono solo due poligoniLa complessità di questo approccio risulta quindi di ordine O(k2)

È dunque chiaro che l’approccio object-space è consigliabile soloquando gli oggetti nella scena sono relativamente pochi

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 306 / 321

Page 307: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

Approccio image-space

Per ogni pixel, si considera unraggio che parte dal centro diproiezione e passa per quelpixel; il raggio è intersecatocon ciascuno dei pianideterminati dai k poligoni perdeterminare per quali piani ilraggio attraversa un poligonoInfine, si determina qualeintersezione è più vicina alcentro di proiezione e si colorail pixel in esame usando lagradazione di colore delpoligono nel punto diintersezione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 307 / 321

Page 308: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

Approccio image-space

L’operazione fondamentale dell’approccio image-space è il calcolodelle intersezioni dei raggi di proiezione con i poligoniPer un display n x m questa operazione deve essere eseguitan ·m · k volte e la complessità risulta di ordine O(k)Naturalmente, per aumentare l’accuratezza delle immaginivisualizzate, si possono considerare anche più di un raggio perpixel

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 308 / 321

Page 309: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

Eliminazione delle back face

Per ridurre il carico di lavoro richiesto per la rimozione dellesuperfici nascoste è opportuno eliminare prima tutti i poligoni il cuivettore normale è orientato verso il semispazio oppostoall’osservatore, ossia i poligoni che definiscono la parte posterioredella superficie di un oggetto solido, non visibile all’osservatoreSe indichiamo con α l’angolo tra la normale e l’osservatore, ilpoligono in esame definisce la parte anteriore di un oggetto se esolo se -90◦ < α < 90◦ o, equivalentemente, cosα > 0In OpenGL, l’eliminazione delle back faces viene eseguita dallafunzione glCullFace

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 309 / 321

Page 310: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo depth sort

L’algoritmo depth sort (di ordinamento in profondità) è unaimplementazione dell’approccio object-spaceConsideriamo una scena composta da poligoni planari (estensionia casi più complessi sono possibili): l’algoritmo depth sort è inrealtà una variante di un algoritmo ancora più semplice, chiamatoalgoritmo del pittore che, consiste nel dipingere i poligoni dal piùlontano al più vicino, dipingendo man mano sopra le parti deipoligono più lontani non visibili all’osservatoreL’idea alla base dell’algoritmo depth sort è proprio quella dirasterizzare gli elementi in modo inverso rispetto all’ordine diprofondità in modo che gli elementi più lontani sianoprogressivamente oscurati da quelli più vicini

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 310 / 321

Page 311: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo depth sort

I problemi da risolvere per implementare questo approccioriguardano l’ordinamento in profondità dei poligoni

Più precisamente, si considera l’estensione nella direzione z diogni poligono, come illustrato in figura

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 311 / 321

Page 312: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo depth sort

Se la profondità minima di ogni poligono è maggiore dellaprofondità massima del poligono situato sul retro, possiamodipingere i poligoni partendo da quello più in profondità (è il casodel poligono A nell’esempio in figura, che è situato dietro a tutti glialtri poligoni e può essere dipinto per primo)Gli altri poligoni, tuttavia, non possono essere dipinti basandosisolo sulla loro estensione lungo z: se le estensioni lungo z di duepoligoni si sovrappongono, dobbiamo determinare un ordine perdipingerli individualmente che permetta di ottenere l’immaginecorrettaL’algoritmo depth sort esegue a questo scopo una serie di test

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 312 / 321

Page 313: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo depth sort

Consideriamo ad esempio una coppia di poligoni le cui estensioniz si sovrappongono: il test più semplice consiste nel controllare leestensioni lungo x e lungo y

Se non c’è sovrapposizione in almeno una delle due direzioni,allora sicuramente nessuno dei due poligoni può oscurare l’altro, edessi possono essere dipinti in un ordine qualsiasi

Rimangono da considerare due situazioni problematiche, per cuinon esiste un ordine corretto di rappresentazione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 313 / 321

Page 314: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo depth sort

La prima si verifica quando tre o più poligoni si sovrappongonociclicamente (a)La seconda situazione si verifica invece quando un poligonopenetra nell’altro (b)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 314 / 321

Page 315: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo depth sort

In questi casi, è necessario derivare i dettagli delle intersezioni,spezzare i poligoni in corrispondenza dei segmenti di intersezionee provare a cercare un ordine corretto di rappresentazione delnuovo insieme di poligoniL’analisi delle prestazioni dell’algoritmo depth sort è difficile poichéi particolari delle singole applicazioni determinano quanto spessosi possano verificare i casi difficili da trattareIn ogni caso, la complessità risulta più che lineare rispetto alnumero di poligoni, poiché è necessario eseguire un algoritmo disorting delle profondità

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 315 / 321

Page 316: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo z-buffer

L’algoritmo z-buffer è un algoritmo di tipo image-space, basato suuna logica molto semplice, e facile da implementareLavora in stretto accoppiamento con l’algoritmo di scanconversion e necessita, oltre alla memoria di display (framebuffer), anche di un’area di memoria in cui memorizzare leinformazioni di profondità relative ad ogni pixelQuest’area addizionale di memoria è chiamata z-bufferNonostante l’algoritmo z-buffer sia di tipo image-space, i cicli alsuo interno sono eseguiti rispetto ai poligoni e non rispetto ai pixel(approccio ibrido)

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 316 / 321

Page 317: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo z-buffer

Supponiamo di dovere visualizzare due poligoniNel corso dell’esecuzione della scan conversion, è possibilecalcolare il colore da associare ad ogni punto di intersezione traun raggio diretto dal centro di proiezione a un pixel, applicando unmodello di shadingContemporaneamente, si può controllare se il punto diintersezione è visibile o meno, secondo la regola che stabilisceche il punto è visibile se è il punto di intersezione più vicino alcentro di proiezione

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 317 / 321

Page 318: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo z-buffer

Quindi, se si esegue la scan conversion del poligono B, il suocolore apparirà sullo schermo poiché la distanza z1 è minore delladistanza z2 relativa al poligono AAl contrario, se si esegue la scan conversion del poligono A, ilpixel che corrisponde al punto di intersezione non apparirà suldisplay

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 318 / 321

Page 319: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo z-buffer

Poiché si procede poligono per poligono, non è possibile disporredi tutte le informazioni relative agli altri poligoni; tuttavia, sipossono memorizzare e aggiornare le informazioni relative allaprofondità che si rendono via via disponibili nel corso della scanconversionSupponiamo di avere a disposizione una memoria, lo z-buffer, conla stessa risoluzione del frame buffer e con una profonditàconsistente con la risoluzione che si vuole ottenere per le distanze

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 319 / 321

Page 320: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo z-buffer

Ad esempio, se abbiamo un display 1280 x 1024 e utilizziamol’aritmetica in virgola mobile per i calcoli di profondità, possiamoutilizzare uno z-buffer 1280 x 1024, con elementi a 32 bitOgni elemento è inizializzato al valore della distanza massima dalcentro di proiezioneIl frame buffer è inizializzato al colore di sfondo; a ogni istante, nelcorso della scan conversion, ogni locazione dello z-buffer contienela distanza, lungo il raggio corrispondente a quella locazione, delpunto di intersezione più vicino tra quelli relativi a tutti i poligoniincontrati fino a quel momento

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 320 / 321

Page 321: Informatica Grafica - (III anno Laurea Triennale e I anno ...donato/teaching/2011-2012/ig/ig-2011... · Informatica Grafica (III anno Laurea Triennale e I anno Laurea Magistrale

Algoritmi Rimozione delle Superfici Nascoste

L’algoritmo z-buffer

La computazione procede nel modo seguente

Si effettua la scan conversion, poligono per poligonoPer ciascun punto si calcola la distanza dal centro di proiezione ela si confronta con il valore memorizzato nello z-buffer incorrispondenza di quel pixelSe la distanza è maggiore della distanza memorizzata nelloz-buffer, significa che abbiamo già incontrato un poligono piùvicino all’osservatore, e il punto in esame non sarà quindi visibileSe invece la distanza è minore di quella presente nello z-buffer,significa che abbiamo individuato un poligono più vicinoall’osservatore, e dobbiamo quindi aggiornare la distanza nelloz-buffer e memorizzare il colore calcolato per il punto in esamenella locazione corrispondente nel frame buffer

D. D’Ambrosio (Università della Calabria) Anno Accademico 2011/12 321 / 321