Vous êtes sur la page 1sur 83

Scuola

Scienze
Corso di studio

Scienze e tecnologie informatiche (8013)


Sede didattica

Cesena
A.A.

2013/2014
Insegnamento

Metodi numerici per la grafica (13209)


Titolare

Prof.ssa Damiana Lazzaro


(damiana.lazzaro@unibo.it)

Appunti di Nicola Gentili


nicola.gentili2@studio.unibo.it ultimo aggiornamento: 26/03/2014 02:00

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 1/83
Ultimo aggiornamento: 26/03/2014 02:00

Introduzione
Computer Graphics (CS)
La Computer Graphics si occupa di sintesi (generazione e manipolazione) di immagini per mezzo del computer, delle tecniche di produzione di scene rappresentanti oggetti del mondo reale o contenuti astratti. La Computer Graphics studia le tecniche e gli algoritmi per la visualizzazione di informazioni numeriche prodotte da un elaboratore1.

Computer Graphics
Rappresentazione del mondo reale Rappresentazione di contenuti astratti

Alcune tecniche di Computer Graphics: Fotoritocco effetti speciali e trasformazioni applicati allimmagine di partenza Image warping trasformazione di strutture presenti in unimmagine a fini ludici o di correzione di deformazioni introdotte dai dispositivi di acquisizione.

Rendering foto realistico

Rendering non foto realistico

Image Processing (IP)


Image Processing la disciplina che si occupa di analisi di immagini. Immagini o video fornite come input, vengono analizzati tramite tecniche di Image Processing, con gli obiettivi di ottenere: immagini rielaborate Image Processing misurazioni (contenuti informativi) Image Analysis informazioni di alto livello (contenuti informativi) Image Understanding Alcune tecniche di Image Processing sono: Image enhancement: si occupa aumentare la nitidezza, evidenziare bordi, migliorare il contrasto, ridurre il rumore, applicare filtri, applicare interpolazioni, ingrandimenti o riduzioni e pseudo colorazioni. Tramite questa tecnica non si aumenta il contenuto informativo dellimmagine. Image restoration: si occupa di minimizzare leffetto di degradazione dellimmagine osservata, lefficacia del ripristino dellimmagine dipende dalla misura e dalla precisione della conoscenza del degrado: non ha lobiettivo di migliorare limmagine. Image compression: si occupa di minimizzare il numero di bit necessari a memorizzare unimmagine (utilizzata in TV broadcast, telerilevamento satellitare, comunicazioni, acquisizione immagini, ).

Computer Vision
Si occupa di riprodurre i processi percettivi propri della visione basandosi su sistemi artificiali di acquisizione ed elaborazione dei dati.

Pattern Recognition
Si occupa di individuare la presenza di strutture pi o meno complesse al fine di svolgere compiti di riconoscimento, sorveglianza, ispezione di manufatti, individuazione di guasti,
1

R. Scateni, P. Cignoni, C. Montani, R. Scopigno.Fondamenti di Grafica Tridimensionale Interattiva, 2005, McGraw Hill, ISBN 88-386-6215-0

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 2/83
Ultimo aggiornamento: 26/03/2014 02:00

Schema di unapplicazione grafica


Lo schema di massima per la realizzazione di unapplicazione grafica pu essere sintetizzato in cinque fasi: 1. Il mondo che si vuole rappresentare deve essere descritto La descrizione comprende, in genere, tre elementi: 1.1. Gli oggetti che popolano il mondo (oggetti reali, punti nello spazio, gli oggetti hanno propriet posizionali e di apparenza 1.2. Lilluminazione: le luci che sono presenti nel mondo hanno propriet posizionali 1.3. Losservatore possiede propriet posizionali, descrive gli algoritmi necessari a generare unimmagine 2D dalla descrizione 3D del mondo 2. La produzione della descrizione ottenuta detta modellazione Esistono tre metodi per ottenere la modellazione: 2.1. Manuale: gli elementi sono disegnati tramite un opportuno strumento grafico (ad esempio si disegna un cerchio con il mouse partendo da un punto centrale e trascinando per ottenere il raggio desiderato) 2.2. Automatico: gli elementi sono acquisiti tramite strumenti appositi (image based modeling) 2.3. Procedurale: gli elementi sono generati tramite opportune procedure (ad esempio un cerchio ottenuto specificando posizione del centro e raggio) 3. La fase di rendering realizza unimmagine bidimensionale Essa composta dalle fasi di: 3.1. Proiezione: si deve proiettare geometricamente la scena dallo spazio 3D alla spazio 2D dello schermo (telecamera virtuale) 3.2. Shading: si deve determinare il colore di ogni punto dellimmagine, in funzione del colore della superficie delloggetto, della sua orientazione, della posizione delle luci, dei riflessi indiretti della luce da altre superfici, 3.3. Rimozione delle superfici nascoste: devono essere eliminate le superfici di elementi pi lontani dalla telecamera virtuale se coperti da altri elementi 3.4. Rasterizzazione: consiste nella mappatura dei colori di ogni punto dellimmagine sui pixel 4. Le procedure e gli algoritmi che implementano il rendering prende il nome di pipeline grafica 5. Limmagine viene infine visualizzata sullo schermo o salvata su file

Descrizione

Modellazione

Rendering

Pipeline grafica

Visualizzazione

Ciclo di vita pixar

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 3/83
Ultimo aggiornamento: 26/03/2014 02:00

Realt aumentata
La realt aumentata (augmented reality) un sistema di grafica interattiva che permette di intervenire su un flusso di immagini video live, modificando la realt con laggiunta, in tempo reale, di contenuti ed animazioni virtuali. Si ottiene pertanto unintegrazione delle immagini reali con immagini o informazioni virtuali (derivanti dalla realt riconosciuta dal sistema). Realt Acquisizione immagine Elaborazione
1. Valutazione della posizione della telecamera 2. Riconoscimento degli elementi 3. Generazione immagine virtuale 4. Posizionamento immagine virtuale

Realt aumentata

Interattivit vs Non interattivit


La grafica generata con un calcolatore pu essere pi o meno interattiva ovvero pu permettere ad un operatore di interagire in tempo reale con uno o pi parametri qualsiasi della rappresentazione grafica. Nel caso di interattivit si ha necessit di hardware particolari (schede grafiche e processori potenti, memoria) e di modelli semplificati di resa grafica (le applicazioni interattive non sono, in genere, fotorealistiche). Viceversa, la grafica non interattiva pu raggiungere elevati qual it dellimmagine richiedendo tempo di elaborazione.

Il video controller
Il video controller il componente hardware responsabile di trasformare le informazioni grafiche (digitali) in impulsi elettrici (analogici). Tecnologia vettoriale I primi dispositivi di output grafico basati sulluso di monitor CRT (Cathode Ray Tube, tubo a raggi catodici), utilizzavano tecnologia vettoriale: in questi dispositivi il fascio di elettroni si muove liberamente da una posizione ad unaltra, guidato dal computer, secondo lordine dei comandi di display; durante lo spostamento il fascio pu essere attivo o meno per cui, rispettivamente, viene modificata o meno limmagine sullo schermo. La tecnologia vettoriale utilizza questa tecnica detta random scan (scansione casuale). Tecnologia raster Il termine raster sinonimo di matrice: nella grafica raster ogni immagine viene rappresentata tramite una matrice di elementi (pixel) ognuno dei quali corrisponde ad una precisa posizione dellimmagine. Lelaborazione dellimmagine basata su matrici di pixel memorizzate in unapposita area di memoria (frame buffer) della CPU o in unaltra memoria separata. Il contenuto del frame buffer chiamato pixmap (da pixel map) o bitmap. La risoluzione del frame buffer (numero di bit memorizzabili) determina la qualit dellimmagine memorizzata.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 4/83
Ultimo aggiornamento: 26/03/2014 02:00

Limmagine complessiva su un display di tipo raster si ottiene effettuando una scansione sistematica (raster scan) della matrice di pixel attraverso il fascio di elettroni scorrendo sequenzialmente linee di scansione orizzontali composte da righe di pixel e regolando lintensit del fascio in modo da riflettere lintensit di ciascun pixel. Ogni volta che un fascio completa un ciclo di scansione, il CRT refreshed. I vantaggi della tecnologia raster rispetto a quella vettoriale consistono in costi inferiori, possibilit di visualizzare aree piene di colore e disegni, tuttavia la natura intrinsecamente discreta della rappresentazione tramite matrici di pixel richiede una conversione delle primitive grafiche in matrici di pixel che meglio le rappresentano (scan conversion), inoltre le linee curve possono apparire frastagliate.

Monitor CRT La struttura del tubo catodico deriva direttamente dal diodo a catodo freddo, a sua volta derivato dal tubo di Crookes, a cui aggiunto uno schermo rivestito di materiale fluorescente, anche chiamato tubo di Braun.

Sezione schematica di un tubo a raggi catodici monocromatico 1) 2) 3) 4) 5) 6) 7) 8) Controllo della griglia Anodo Bobina deflettrice Riscaldatore Catodo Fascio di elettroni Bobina di messa a fuoco Schermo fluorescente

Il catodo un piccolo elemento metallico riscaldato all'incandescenza che emette elettroni per effetto termoionico. All'interno del tubo catodico, in cui stato praticato un vuoto spinto, questi elettroni vengono diretti in un fascio (raggi catodici) per mezzo di una elevata differenza di potenziale elettrico tra catodo e anodo, con l'aiuto di altri campi elettrici o magnetici opportunamente disposti per focalizzare accuratamente il fascio. Il raggio (detto anche pennello elettronico) viene deflesso dall'azione di campi magnetici (Forza di Lorentz, deflessione magnetica) o campi elettrici (deflessione elettrostatica) in modo da arrivare a colpire un punto qualunque sulla superficie interna dello schermo, l'anodo. Questa superficie rivestita di materiale fluorescente (detti fosfori, in genere metalli di transizione oppure terre rare) che eccitato dall'energia degli elettroni emette luce. Monitor LCD L'LCD basato sulle propriet ottiche di particolari sostanze denominate cristalli liquidi. Tale liquido intrappolato fra due superfici vetrose provviste di numerosissimi contatti elettrici con i quali poter applicare un campo elettrico al liquido contenuto. Ogni contatto elettrico comanda una piccola porzione del pannello identificabile come un pixel (o subpixel per gli schermi a colori), pur non essendo questi ultimi fisicamente separati da quelli adiacenti come avviene invece in uno schermo al plasma. Sulle facce esterne dei pannelli vetrosi sono poi posti due filtri polarizzatori disposti su assi perpendicolari tra loro. I cristalli liquidi torcono di 90 la polarizzazione della luce che arriva da uno dei polarizzatori, permettendole di passare attraverso l'altro.
Componenti di un LCD twisted nematic riflettivo 1) Polarizzatore verticale 2) Schermo di vetro con maschera delle zone scure 3) Strato con i cristalli liquidi 4) Strato di vetro con elettrodi 5) Polarizzatore orizzontale 6) Superficie riflettente

Prima che il campo elettrico sia applicato, la luce pu passare attraverso l'intera struttura, e, a parte la porzione di luce assorbita dai polarizzatori, l'apparecchio risulta trasparente. Quando il campo elettrico viene attivato le molecole del liquido si allineano parallelamente al campo elettrico, limitando la rotazione della luce entrante. Se i cristalli sono completamente allineati col campo, la luce che vi passa attraverso polarizzata perpendicolarmente al secondo polarizzatore, e viene quindi bloccata del tutto facendo apparire il pixel non illuminato. Controllando la torsione dei cristalli liquidi in ogni pixel, si pu dunque regolare quanta luce far passare. Si noti per che in questo modo un pixel guasto apparir sempre illuminato. In realt

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 5/83
Ultimo aggiornamento: 26/03/2014 02:00

alcune tipologie di pannelli funzionano all'opposto, cio sono trasparenti quando accesi ed opachi quando spenti per cui un pixel guasto resta sempre opaco. Monitor LED OLED l'acronimo di Organic Light Emitting Diode ovvero diodo organico a emissione di luce. Tecnologia che permette di realizzare display a colori con la capacit di emettere luce propria: a differenza dei display a cristalli liquidi, i display OLED non richiedono componenti aggiuntivi per essere illuminati (i display a cristalli liquidi vengono illuminati da una fonte di luce esterna), ma producono luce propria; questo permette di realizzare display molto pi sottili e addirittura pieghevoli e arrotolabili, e che richiedono minori quantit di energia per funzionare. A causa della natura monopolare degli strati di materiale organico, i display OLED conducono corrente solo in una direzione, comportandosi quindi in modo analogo a un diodo; di qui il nome di O-LED, per similitudine con i LED. I monitor LED presentano una migliore qualit dei colori rispetto ai monitor LCD e hanno durata superiore, inoltre rendono possibile la realizzazione di schermi sottilissimi. Pipeline di rendering La pipeline di rendering descrive come viene effettuato il passaggio di rendering dalla rappresentazione interna delluniverso virtuale 3D allimmagine masterizzata da visualizzare sul dispositivo bidimensionale. I video controller si sono evoluti: prima degli anni 90, i controller VGA (Video and Graphics Array controller) utilizzavano una memoria DRAM chiamata frame buffer e un generatore di segnali (RAMDAC) collegato direttamente al video, erano basati su grafica vettoriale tra il 1990 e il 1997 si sono aggiunte funzioni ai controller VGA: gestione triangoli, rasterizzazione triangoli, shading verso il 2000 si realizzato un chip integrato che incorpora tutti gli elementi di una pipeline di rendering: nasce la Graphics Processing Unit (GPU) dopo il 2005, la GPU si evoluta implementando aritmetica in virgola fissa e mobile e si sono realizzate GPU programmabili tramite API di alto livello (OpenGL, Direct3D) dopo il 2008 i processori sono paralleli e multithread: Streaming Processors (SP) a flusso continuo, organizzati in Streaming Multiprocessors; o la memoria condivisa su due livelli: dentro gli Streaming Multiprocessors tra Streming Processors e tramite una rete di interconnessione tra gli Streaming Multiprocessors.

Architettura di una GPU unificata Architettura TESLA Nvidia GeForce 8800 112 Streaming Processors 14 Streaming Multiprocessors 96 thread per ogni SM DRAM a 64 bit

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 6/83
Ultimo aggiornamento: 26/03/2014 02:00

Programmazione grafica
La programmazione grafica realizzata su tre livelli: 1. API grafiche: OpenGL, Direct3d Si tratta di API di alto livello che definiscono logicamente le pipeline di rendering: lapplicazione si sviluppa definendo i vari stadi con primitive di alto livello e i dettagli sono nascosti agli sviluppatori e gestiti dalle API

2. Linguaggi di shading: Gestiscono tre tipi di shader: o Shader dei vertici: o

GLSL, HLSL, Ch

mappano la posizione dei vertici dei triangoli nello schermo, modificano posizione, colore e orientamento Schader delle geometrie: lavorano sulla base di primitive geometriche definite come insiemi di vertici, le modificano e ne aggiungono di nuove Shadere dei pixel (o dei frammenti): dipingono i pixel sullo schermo e gestiscono artefatti visivi

Gli shader sono programmati a flusso continuo cio su sequenze ininterrotte di dati, le strutture dati su cui operano consentono un elevato parallelismo e quindi possono essere lanciati pi thread dello stesso shader. 3. API di programmazione diretta dei core SP: CUDA, OpenCL Si tratta di API di programmazione general purpose su GPU (GPGPU), tramite il loro utilizzo il problema viene parallelizzato sullarchitettura: il programmatore CUDA, ad esempio, scrive una procedura detta kernel che istanzia tante esecuzioni di thread paralleli, i thread sono organizzati gerarchicamente in blocchi mono, bi o tridimensionali organizzati in grigl ie anchesse mono, bi o tridimensionali; il mapping dipende dai core SP disponibili ed scelto dal programmatore.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 7/83
Ultimo aggiornamento: 26/03/2014 02:00

La pipeline di rendering
La pipeline di rendering si suddivide in due parti: 1. Sottosistema geometrico: porta la geometria del modello nelle coordinate dello schermo 2. Sottosistema raster: accende i pixel dello schermo con il giusto colore in funzione della geometrica, dellilluminazione e delle texture. Queste due parti sono affidate, nei sistemi programmabili, a due shader: 1. Vertex shaker: calcola le trasformate geometriche per ogni vertice del modello 2. Pixel (Fragment) shader: calcola il colore per ogni pixel. Pipeline di rendering Applicazione grafica (CPU) Sottositema geometrico Sottosistema raster Frame buffer Frame buffer Display

Model and view transformations

Fragment generation

Lighting

Texture mapping and shading

Projection

Z-Buffer

Clipping

Blending

Screen mapping

Sottosistema geometrico
Model and view transformation Agli oggetti, definiti nel loro sistema di coordinate (object space) vengono applicate le trasformazioni di modellazione che portano il modello nel sistema comune del mondo da rappresentare (world space), successivamente vengono applicate le trasformazioni per ottenere le coordinate degli oggetti dal punto di vista dellosservatore. Lighiting Projecton Tutto ci che si trova allinterno del volume di vista (view frustum ) viene proiettato; il view frustum viene cos trasformato in un cubo di lato unitario (normalized device coordinates). Clipping Le primitive geometriche al di fuori del cubo ordinario (fuori dal volume di vista) sono scartate e non proseguono lelaborazione; quelle che intersecano il cubo sono modificate secondo lintersezione. Screen mapping La scena viene infine mappata sulle coordinate dello schermo (screen space).

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Spazi di coordinate necessario considerare, in unapplicazione grafica: uno spazio di coordinate del modello (modeling coordinates) si tratta dello spazio rispetto al quale ogni singolo oggetto viene modellato uno spazio di coordinate del mondo (world coordinates system) descrive in modo unificato lintero universo dellapplicazione uno spazio di coordinate del dispositivo (device coordinates system ) definito dalla periferica utilizzata.

A.A. 2013/2014
Pag. 8/83
Ultimo aggiornamento: 26/03/2014 02:00

Entit geometriche Punto - entit geometrica caratterizzata da un solo attributo: la posizione rispetto ad un sistema di riferimento Vettore entit geometrica caratterizzata da due attributi: lunghezza e direzione

Lunghezze e angoli sono espresse mediante scalari. Le trasformazioni geometriche sono gli strumenti che permetto di manipolare punti e vettori allinterno del mondo dellapplicazione grafica, esse sono funzioni che mappano unentit in unaltra entit. La trasformazione di una primitiva geometrica si riduce alla trasformazione dei punti caratteristici (vertici) che la identificano nel rispetto della connettivit originale (trasformazioni affini). Trasformazioni geometriche affini Sono trasformazioni lineari:

che preservano: collinearit: i punti di una linea giacciono ancora su una linea dopo la trasformazione rapporto tra le distanze: il punto medio di un segmento rimane il punto medio di un segmento anche dopo la trasformazione

Le trasformazioni geometriche permettono di traslare, ruotare, scalare o deformare oggetti che siano stati modellati nel loro spazio di coordinate permettendo di istanziarli nel modello con attributi (posizione, orientamento, fattori di scala) diversi nello spazio di coordinate del mondo (permettono il passaggio dal sistema di coordinate locali al sistema di coordinate del mondo). Ogni oggetto, a partire dal proprio sistema di riferimento, viene trasformato opportunamente in un sistema di riferimento comune per entrare a far parte della scena finale. Trasformazioni geometriche nel piano Trasformazioni di base: Traslazione Traslare una primitiva geometrica nel piano significa muovere ogni suo punto P(x,y) di d x unit lungo lasse x e di dy unit lungo lasse y fino a raggiungere una nuova posizione P(x,y) dove x = x + d x e y = y + dy In notazione matriciale:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Scalatura

A.A. 2013/2014
Pag. 9/83
Ultimo aggiornamento: 26/03/2014 02:00

Scelto un punto C (fisso) di riferimento, scalare una primitiva geometrica significa riposizionare rispetto a C tutti i suoi punti in accordi a fattori di scala sx (lungo lasse x) e sy (lungo lasse y) scelti. Se il punto fisso lorigine O degli assi, la trasformazione di P in P si ottiene con x = s x x y = sy y In notazione matriciale (S pre-moltiplica P in quanto P definito come vettore colonna):

Osservazioni: fattori di scala inferiori a 1 avvicinano loggetto al punto fisso di rif erimento fattori di scala superiori a 1 lo allontanano se sx sy le proporzioni delloggetto non sono mantenute e si parla di scalatura non uniforme se sx = sy le proporzioni delloggetto sono mantenute e si parla di scalatura uniforme Rotazione Fissato un punto C (pivot) di riferimento ed un verso di rotazione (orario o antiorario), ruotare una primitiva geometrica attorno a C significa muovere tutti i suoi punti nel verso assegnato in maniera che si conservi, per ognuno di essi, la distanza da C. Una rotazione di attorno allorigine O degli assi definita come: x = x cos y sen e y = x cos + y sen

la relazione tra P e P si ricava trigonometricamente, le coordinate di P possono essere espresse in coordinate polari: x = r cos y = x sin

In notazione matriciale:

Osservazioni: gli angoli sono considerati positivi quando misurati in senso orario per le rotazioni di angoli negativi si ricorre alle identit: cos ( - ) = cos ( ) sin ( - ) = - sin ( ) Coordinate omogenee Le trasformazioni geometriche possono essere applicate in sequenza di una somma di vettori (traslazione) e di moltiplicazioni (scalatura e rotazione) rende disomogenea la concatenazione di trasformazioni:

Il punto P di coordinate ( x, y ) rappresentato, in coordinate omogenee come ( x h, yh, w ), dove: x = xh / w y = yh / w w0

Due punti di coordinate ( x, y, w ) e ( x, y, w ) rappresentano lo stesso punto del piano se e solo se le coordinate di uno sono multiple delle corrispondenti coordinate dellaltro.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 10/83
Ultimo aggiornamento: 26/03/2014 02:00

Quanto w = 1 (forma canonica), coordinate cartesiane ed omogenee coincidono. Con ( x, y, w 0 ) si rappresentano punti. Con ( x, y, 0 ) si rappresentano vettori. Trasformazioni di base in coordinate omogenee

Altre trasformazioni comuni (ma derivabili dalle precedenti):

Deformazione (shear)

Dalle relazioni x = x + ay e y = y + bx si evince che la deformazione lungo lasse x linearmente dipendente dalla coordinata y e la deformazione in y strettamente correlata allascissa del punto

Composizione di trasformazioni La rappresentazione in coordinate omogenee permette la concatenazione di trasformazioni. Le trasformazioni geometriche non sono, generalmente, commutative, per questo motivo lor dine con cui vengono applicate non ininfluente. La corretta sequenza delle trasformazioni T1, T2, T3, T4 si ottiene componendo T = T4 T3 T2 T1 Limmagine a fianco mostra un esempio di non commutativit della composizione di trasformazioni: una traslazione e una

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 11/83
Ultimo aggiornamento: 26/03/2014 02:00

rotazione attorno allorigine, se applicate in ordine diverso, realizzano un esito differente.

Una rotazione oraria di un angolo attorno ad un punto P generico una composizione di: una traslazione che sposta P nellorigine degli assi una rotazione attorno allorigine una traslazione opposta alla prima che riporta P alla sua posizione originale:

Una trasformazione di scalatura attorno ad un punto P generico una composizione di: una traslazione che sposta P nellorigine degli assi una trasformazione di scala attorno allorigine una traslazione opposta alla prima che riporta P alla sua posizione originale:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 12/83
Ultimo aggiornamento: 26/03/2014 02:00

Trasformazione Window to viewport Si tratta di una delle trasformazioni pi comuni che il sistema grafico deve realizzare: quella dalle coordinate del mondo a quelle del dispositivo di output; al termine del rendering si ottengono sempre valori nel sistema di coordinate dello schermo (device coordinate system ). Si effettua definendo una porzione rettangolare del mondo (window) e mappandola su un rettangolo dello schermo (viewport). Definiti window e viewport si deve calcolare la trasformazione che effettua tale mapping tramite una matrice definita in tre stadi: 1. la window traslata nellorigine del sistema di coordinate 2. la dimensione della window scalata sino ad essere uguale alla dimensione della viewport 3. la viewport traslata nella posizione finale nel sistema di coordinate del dispositivo. La matrice che realizza tale trasformazione :

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 13/83
Ultimo aggiornamento: 26/03/2014 02:00

Trasformazioni 3D Come tutte le trasformazioni nel piano possono essere rappresentate (in coordinate omogenee) da matrici 3x3, le trasformazioni nello spazio possono essere rappresentate da matrici 4x4. Nello spazio un punto in coordinate omogenee rappresentato da una quadrupla (x, y, z, w). Traslazione

Scalatura

La rotazione 3D descritta da una matrice pi complessa: ogni rotazione 3D pu essere ottenuta come composizione di 3 rotazioni attorno ai 3 assi: Rotazione intorno allasse x Rotazione intorno allasse y Rotazione intorno allasse z

Nel caso pi generale, una volta fissato lasse di rotazione e langolo di rotazione, la trasformazione pu essere effettuata applicando i cinque passi seguenti: 1. loggetto traslato in maniera tale che lasse di rotazione passi per lorigine degli assi cartesiani 2. loggetto ruotato in maniera tale che lasse di rotazione coincida con uno degli assi cartesiani 3. loggetto ruotato nel verso e per la quantit angolare richiesta 4. loggetto ruotato in maniera inversa rispett o alla rotazione effettuata al passo 2 in modo tale che lasse di rotazione assuma la direzione finale 5. loggetto traslato in maniera inversa rispetto alla traslazione effettuata al passo 1 in modo tale che lasse di rotazione sia riprtata alla sua posizi one iniziale.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Il processo di vista in 3 dimensioni

A.A. 2013/2014
Pag. 14/83
Ultimo aggiornamento: 26/03/2014 02:00

Le proiezioni Una proiezione una trasformazione geometrica con il dominio di uno spazio di dimensione n ed il codominio in uno spazio di dimensione n-1 (o minore). Una proiezione di un oggetto 3D definita da un insieme di rette parallele (proiettori) aventi origine comune da un centro di proiezione, che passano per tutti i punti delloggetto e intersecano un piano di proiezione per formare la proiezione vera e propria. In queste proiezioni, dette proiezioni geometriche piane : - i proiettori sono rette (potrebbero essere curve generiche) - la proiezione effettuata su un piano (potrebbe essere una superficie generica). Le proiezioni geometriche piano possono essere categorizzate in: proiezioni prospettiche: la distanza tra il centro di proiezione e il piano di proiezione finita parallele: la distanza tra il centro di proiezione e il piano di proiezione infinita Proiezioni prospettiche Le proiezioni prospettiche sono pi realistiche in quanto riproducono il modo con cui nella realt sono visti gli oggetti: oggetti pi vicini appaiono pi grandi e viceversa.

Proiezioni prospettiche

Proiezioni parallele

La proiezione di ogni insieme di linee parallele non parallele al piano di proiezione, converge in un punto detto vanishing point (punto di convergenza). Il numero di questi punti infinito, come il numero di possibili direzioni di fasci di rette parallele. Se linsieme di linee parallele a sua volta parallelo ad uno degli assi coordinati, il punto di convergenza si chiama axis vanishing point. Possono esiste al massimo tre axis vanishing point . Le proiezioni si possono classificare in base al numero di vanishing point principali (numero di assi del sistema di coordinate che intersecano il piano di proiezione).

1 punto di fuga

2 punti di fuga

3 punti di fuga

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Proiezioni parallele

A.A. 2013/2014
Pag. 15/83
Ultimo aggiornamento: 26/03/2014 02:00

Le proiezioni parallele, utilizzate nel disegno tecnico per poter effettuare misurazioni sul risultato della proiezione stessa, mantengono le linee parallele del modello tridimensionale. Queste proiezioni si classificano in base alla relazione tra la direzione di proiezione e la normale al piano di proiezione: se la direzione di proiezione coincide con la normale si parla di proiezioni ortografiche, altrimenti si parla di proiezioni oblique .

Proiezioni ortografiche

Proiezioni ortografiche assonometriche: proiezioni ortografiche con lasse di proiezione non allineata con una delle assi principali

Proiezione (assonometria) isometrica: la direzione di proiezione identificata da una delle bisettrici degli ottanti dello spazio cartesiano

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 16/83
Ultimo aggiornamento: 26/03/2014 02:00

Proiezioni oblique: tipo pi generale di proiezioni parallele, caratterizzate dal fatto che i proiettori possono formare un angolo qualsiasi con il piano di proiezione; i pi frequenti casi di proiezione obliqua sono: la proiezione Cavaliera, in cui la direzione di proiezione forma un angolo di 45 con il piano di proiezione e quindi le linee ortogonali al piano conservano la loro lunghezza la proiezione Cabinet, in cui la direzione forma un angolo di arctan(2) = 63.4, e quindi le linee perpendicolari al piano hanno lunghezza pari alla met di quella reale Proiezioni planari geometriche

Parallele

Prospettiche

Ortografiche

Oblique

1 punto di fuga

Dall'alto

Di fronte

Laterali

Assonometriche

Cavaliere

2 punti di fuga

Isometriche

Cabinet

3 punti di fuga

Altre

Altre

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 17/83
Ultimo aggiornamento: 26/03/2014 02:00

I parametri della vista 3D La vista in 3 dimensioni non definita unicamente dalla proiezione ma anche dal volume di vista, cio dalla regione dello spazio tridimensionale che include solamente gli oggetti visibili. Proiezione e volume di vista forniscono tutte le informazioni necessarie per clippare e proiettare. Le entit fondamentali nella sintesi automatica di scene 3D sono gli oggetti sintetici che descrivono la scena e un osservatore che definisce il punto di vista, la direzione di osservazione e langolo di vista ovvero la porzione di scena inquadrata.

La metafora pi utilizzata per la descrizione delle relazioni osservatore-scena quella della macchina fotografica virtuale (synthetic camera). Si tratta di un apparecchio fotografico molto semplice costituito da un parallelepipedo con un foro di diametro infinitesimo (pinhole camera) sulla faccia anteriore tramite il quale, sulla faccia posteriore coincidente con la pellicola fotografica, si formano le immagini. I raggi luminosi attraversano il foro e impressionano la pellicola riproducendo unimmagine ruotata di 180 delloggetto fotografato. Le immagini che si formano sono nitide, senza problemi di luminosit; langolo di vista pu essere modificato variando il rapporto tra la distanza focale d (dimensione della scatola) e la dimensione h del piano dellimmagine. Dalla relazione di similitudine tra i due triangoli che si formano si pu ricavare che il generico punto P = ( x, y, z ) della scena avr coordinate P = ( xp, yp, -d ) sul piano dellimmagine dove:

Per convenzione si assume lesistenza di un piano virtuale di identiche dimensioni del piano di proiezione posto a distanza d dal centro di proiezione.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Definire i parametri di una vista sintetica Mondo reale Disporre gli oggetti da fotografare nella scena Passo 1 Con lutilizzo del computer Impostare la modelling transformation

A.A. 2013/2014
Pag. 18/83
Ultimo aggiornamento: 26/03/2014 02:00

Consiste nella definizione degli oggetti della scena in un sistema di coordinate conveniente e nella loro trasformazione nel sistema di coordinate del mondo. Impostare la viewing transformation Consiste nel definire il volume che contiene gli oggetti visibili, ovvero il poliedro individuabile dal rettangolo che ne costituisce la sezione e dalle quattro rette che passano attraverso i vertici del rettangolo. Per le proiezioni prospettiche il volume una piramide semi-infinita con vertice nel PRP e spigoli che passano attraverso i vertici della finestra sul piano di vista.

Sistemare la macchina fotografica

Per limitare il numero di primitive proiettate il volume di vista deve essere finito e limitato tramite un front clipping plane e un back clipping plane paralleli al piano di vista con VPN come normale; essi sono specificati da una front distance (F) e una back distance (B).

Impostare la projection transformation Il piano di proiezione (o piano di vista) definito da un punto sul piano (detto view reference point, VRP) e dalla normale al piano in questo punto (detta view plano normal, VPN); il piano di vista pu trovarsi ovunque rispetto agli oggetti del mondo che devono essere proiettati (davanti, dietro o tra gli oggetti). Il centro di proiezione (COP) e la direzione di proiezione (DOP) sono definiti da un projection reference poiint (PRP) ; se la proiezione di tipo prospettiva il PRP coincide con il centro di proiezione; se la proiezione di tipo parallelo, la direzione di proiezione va dal PRP al centro della finestra. 3

Scegliere una lente o aggiustarlo zoom

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Mondo reale Scegliere la dimensione dalla foto Passo 4 Con lutilizzo del computer Impostare la viewport transformation

A.A. 2013/2014
Pag. 19/83
Ultimo aggiornamento: 26/03/2014 02:00

Si deve definire un sistema di coordinate (u, v, n) detto 3D viewing coordinate system, VRC con origine in VRP; lasse v definito per proiezione del view-up vector VUP sul piano di vista; lasse u ortogonale agli altri due ed scelto in modo da formare un sistema di coordinate right-handed; il contenuto della finestra sul piano di vista sar mappato sulla viewport e qualunque parte del mondo 3D proiettata sul piano di vista, ma fuori dalla finestra, non sar visualizzata.

Il contenuto del volume di vista deve essere mappato sulla superficie del dispositivo di output, per farlo deve essere trasformato da coordinate del mondo a coordinate normalizzate di proiezione (normalized projection coordinates, NPC): il volume di vista viene trasformato in un volume canonico in nuove coordinate, il risultato mappato sul 3D viewport; disegnano le primitive ignorando la z, si ottiene limmagine da mandare al display. Matematica delle proiezioni

Clipping Fare il clipping in coordinate nel mondo (WC) molto oneroso; pertanto si effettua prima la normalizzazione (riduzione del volume di vista ad un volume canonico). Esistono due volumi canonici, si effettua la moltiplicazione per le matrici di normalizzazione, poi si effettua il clipping, poi la proiezione ed infine si porta alle coordinate del dispositivo.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 20/83
Ultimo aggiornamento: 26/03/2014 02:00

Sottosistema raster
Il sottosistema raster si occupa di passare dalla proiezione continua in screen space ai pixel dellimmagine visualizzata. Si parla pi precisamente di frammenti poich alcuni di essi diverranno parte dellimmagine finale e altri no. I frammenti sono pixel potenziali. Il sottosistema raster si occupa inoltre di rimuovere le superfici nascoste (Z-buffer) e applicare le texture. Nei sistemi moderni la funzione di illuminazione deferita dal sottosistema geometrico al sottosistema raster. La rasterizzazione legata a tutto ci che comporta il prendere una decisione sul colore di un pixel da accendere sullo schermo; costituisce la parte finale della pipeline di rendering ( solitamente inserita nel ciclo dellalgoritmo scan-line) ed affidata al fragment (o pixel) shader che determina se le propriet di colore di un pixel possono essere propagate ad un intero frammento di linea di scansione in modo da applicare gli algoritmi coinvolti in parallelo. Algoritmi Algoritmi per il drawning o DDA o Midpoint Algoritmi per il filling Algoritmi per il clipping

(tracciamento di primitive 2D ed eventuali proiezioni di primitive 3D)

(riempimento di una figura chiusa con un colore solido, sfumatura, trama, trasparenza tra pi colori, ) (troncamento di una linea rispetto ad altre linee presenti: poligoni che si occludono, bordi esterni dellimmagine ovvero del front pane del volume di vista mappato sullo schermo)

o Cohen-Sutherland Antialiasing o o

(riduzione delleffetto di sotto-campionamento dellimmagine generata dovuto alla risoluzione spaziale fissa data dalla dimensione dei pixel) Unweighted Area Sampling Weighted Area Sampling

Drawing Per tracciare un segmento di retta allinterno della griglia di pixel che hanno distanza unitaria in ascissa e ordinata, lalgoritmo di drawing deve individuare le coordinate dei pixel che giacciono sulla linea ideale o che sono il pi vicino possibile ad essa: la sequenza di pixel deve approssimare al meglio il segmento; lo spessore minimo del segmento masterizzato risulter uguale ad un pixel. Per coefficienti angolari minori o uguali ad 1, la rasterizzazione presenta un pixel per ogni colonna; per coefficienti angolari maggiori di 1, la rasterizzazione presenta un pixel per ogni riga.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Algoritmo DDA (digital differential analyzer)

A.A. 2013/2014
Pag. 21/83
Ultimo aggiornamento: 26/03/2014 02:00

Regola: e e

Algoritmo: calcola m = ( y1 y0 ) / ( x1 x0 ) se |m| <= 1 allora y := y0 ripeti per x = x0; x <= x1; x++ accendi il punto ( x, round(y) ) y += m altrimenti x := x0 ripeti per y = y0; y <= y1; y99 accendi il punto ( round(x), y ) x += ( 1 / m ) Algoritmo di Bresenham (midpoint) Lalgoritmo di Bresenham (algoritmo del punto di mezzo) risolve il problema dellerrore introdotto dalluso di aritmetica floating point nellalgoritmo DDA: fa uso unicamente di operazioni in aritmetica intera. Si tratta di un algoritmo di tipo differenziale: fa uso delle informazioni calcolate per individuare il pixel al passo i per individuare il pixel al passo i + 1. Lidea di base di questo algoritmo di individuare, passo dopo passo, il pixel pi vicino alleffettivo punto Q di intersezione tra la retta e lascissa x = xp + 1 corrispondente al successivo punto da accendere. Ad ogni passo i candidati sono solo i due pixe E ( x p + 1, yp ) e NE ( xp + 1, yp + 1 ) (assumendo m > 1 per semplicit). Per scegliere il punto si valuta il passaggio della retta, espressa nella forma implicita F ( x , y ) = ax + by + c = 0 nel punto medio M ( xp + 1 , yp + ) Algoritmo: ripeti per ogni punto da accendere se F ( M ) > 0 //la retta passa sopra M accendi NE altrimenti // F ( M ) <= 0, la retta passa per M // oppure sotto M accendi E

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 22/83
Ultimo aggiornamento: 26/03/2014 02:00

Limplementazione incrementale; considerando lequazione della retta in forma implicita:

possibile ottenere la forma esplicita: Si definisce una variabile di decisione d:

Per d > 0 si accender NE, mentre per d

0 si accender E.

Lalgoritmo consiste nel calcolare, incrementalmente, solo la variabile di decisione: se ad un certo passo p+1 si accende il pixel E, allora il nuovo valore della variabile dnew , noto dold al passo precedente p, si ottiene come:

viceversa, se ad un certo passo p+1 si accende il pixel NE, allora il nuovo valore della variabile dnew, noto dold al passo precedente p, si ottiene come:

Il processo si inizializza calcolando il valore di partenza: partendo da ( x0, y0 ) si calcola dstart:

possibile eliminare la divisione ed utilizzare solo laritmetica intera facendo riferimento ad una nuova variabile di decisione 2d che deve essere confrontata con il valore 0 ad ogni passo:

Algoritmo: dx := x1 x0 dy := y1 y0 dstart := 2dy dx deltaE := 2( dy dx ) deltaNE := 2( dy ) x := x0 y := y0 d := start ripeti finch x < x1 se d <= 0 allora d += deltaE x ++ altrimenti d += deltaNE x++ y++ accendi il pixel ( x , y )

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 23/83
Ultimo aggiornamento: 26/03/2014 02:00

Algoritmo Midpoint per circonferenze o ellissi Lequazione implicita di una circonferenza: F ( x , y ) = x 2 + y2 R2 = 0 fornisce 2 valori di y per un dato valore di x. Si calcola allora il midpoint per il primo ottante x [ 0 , R / 2 ] e poi si replica per gli altri. Partendo dal punto di valutazione della circonferenza P = ( x p , yp ) si sceglie il successivo pixel da accendere sulla base del punto medio: M ( xp + 1, yp ) tra i pixel E ed SE di P. La variabile di decisione definita come lequazione implicita della circonferenza valutata in M:

se F ( M ) > 0 // M giace o esterno alla circonferenza accendi SE altrimenti // F(M) < 0 cio interno alla circonferenza accendi E

Allo stesso modo di come si calcolano gli incrementi per le rette, si possono calcolare i due incrementi della variabile di decisione al generico passo p + 1, noto il valore dold della variabile di decisione al passo, nei due casi in cui venga accesso il pixel E o SE. Nel caso di accensione, al passo p, di E:

Mentre nel caso di accensione di SE:

dstart valutato nel punto ( 0 , R ) che l sommit dellottante (per mantenere luso dellaritmetica intera si considera h = d hstart = 1 R; h si confronta sempre con 0):

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Algoritmo: void MidpointCirlce (int radius, int value) // si assume che il centro della circonferenza sia allorigine // si utilizza solo laritmetica intera { int x = 0; int y = radius; int d = 1 radius; circlePoints(x, y, value); while (y > x) { if (d < 0) /* select E */ d += 2 * x + 3; else /* select SE */ { d += 2 * (x y) + 5; y-; } x++; circlePoints(x, y, value); } }

A.A. 2013/2014
Pag. 24/83
Ultimo aggiornamento: 26/03/2014 02:00

Per quanto riguarda le ellissi, lalgoritmo lo stesso a meno del valore della F ( x , y ); inoltre, per ogni quadrante, si individuano due regioni separate dal punto in cui il vettore di gradiente F inclinato a 45, esse differiscono per i punti candidati allaccensione ad ogni passo. Filling

Lalgoritmo di filling opera incrementalmente sulle scan -line: una volta effettuato il filling del poligono su una scan-line, lalgoritmo sfrutta le informazioni travate per aggiornare incrementalmente le intersezioni e fare il filling sulla scan-line successiva.

Per ogni scan-line: Devono essere individuate le intersezioni della scan-line con tutti gli spigoli del poligono Si devono ordinare le intersezioni sulla coordinata x Si devono selezionare tutti i pixel, tra coppie di intersezioni, che sono interni al poligono. Per la determinazione dei pixel interni (per determinare se un pixel appartiene ad un poligono), si usa la regola di odd-parity: si utilizza un bit (flag) di parit che pu assumere valore pari o dispari; la parit inizialmente pari, ogni intersezione cambia il bit di parit, se il bit dispari allora i pixel fanno parte del poligono, viceversa se pari.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Devono essere considerati quattro casi distinti: 1. Intersezione su un generico valore x non intero Effettuando lo scan-line, se si incontra lintersezione provenendo da dentro il poligono (parity bit dispari), si arrotonda allintero inferiore; viceversa si arrotonda llintero superiore

A.A. 2013/2014
Pag. 25/83
Ultimo aggiornamento: 26/03/2014 02:00

2. Intersezione su un generico valore x di coordinate intere Lintersezione a coordinate intere allestremo sinistro della linea di pixel interna al poligono, allestremo destro invece esterna al poligono

3. Intersezione in un vertice (sempre coordinate intere) Nel calcolo del parity bit si considera solo il vertice con y minima e non quello con y massima

4. Vertici che definiscono uno spigolo orizzontale I vertici di una linea orizzontale non influiscono sul parity bit, in modo automatico (vedi caso 3) i lati orizzontali bassi del poligono sono disegnati, mentre quelli alti sono omessi.

Clipping Loperazione di clipping consiste nellindividuare e rimuovere le primitive grafiche, o parti d i esse, esterne alla viewport o nascoste da altri elementi. Si tratta di un problema intrinsecamente legato al 3D, ma si verifica anche nel 2D quando bisogna determinare lestensione di curve proiettate sullo schermo. Clipping di un punto Un punto allinterno del rettangolo di clipping se e solo se sono soddisfatte 4 disuguaglianze:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Clipping di un segmento

A.A. 2013/2014
Pag. 26/83
Ultimo aggiornamento: 26/03/2014 02:00

Per effettuare il clipping di un segmento necessario analizzare le posizioni dei suoi punti estremi: se sono entrambi allinterno del rettangolo di clipping, il segmento interno se un estremo interno e laltro esterno, allora il segmento interseca il rettangolo di clipping ed necessario determinare lintersezione se entrambi gli estremi sono esterni al rettangolo si rende necessaria unanalisi ulteriore per individuare le eventuali parti interne del segmento che pu o essere completamente esterno allare di clipping o attraversare larea di clipping.

Ad esempio, nella figura sono rappresentati alcuni segmenti: AB: CD: EF e IJ: interno interseca larea di clipping entrambi i punti estremi sono esterni allarea di clipping e tutto il segmento esterno entrambi i punti estremi sono esterni allarea di clipping ma il segmento interseca larea di clipping

GH:

Un approccio diretto alla soluzione del problema dei punti estremi esterni, consiste nel determinare le intersezioni tra la retta su cui giace il segmento e le quattro rette su cui giacciono i lati del rettangolo di clipping: una volta individuati i punti di intersezione occorre verificare leffettiva appartenenza al rettangolo di clipping. Le intersezioni si determina mediante lequazione parametri dei segmenti relativi: Per ogni coppia segmento-lato di rettangolo si risolve il sistema di equazioni parametriche che definiscono il segmento in funzione di tsegm ed il lato in funzione di tlato. Se entrambi assumono valori nellintervallo [0,1] allora lintersezione appartiene al segmento ed al rettangolo di clipping. Leventu ale parallelismo va verificato prima di determinare lintersezione. Tuttavia questo tipo di algoritmo costo e inefficiente.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Algoritmo di Cohen-Sutherland

A.A. 2013/2014
Pag. 27/83
Ultimo aggiornamento: 26/03/2014 02:00

Lidea di base di questo algoritmo consiste nel fatto che le rette che delimitano il rettangolo d i clipping suddividono il piano in nove regioni; ad ogni regione viene associato un codice numero di quattro cifre binarie: bit bit bit bit 1: 2: 3: 4: sopra edge alto sotto edge basso a destra edge destro a sinistra edge sinistro y > ymax y < ymin x > xmax x < xmin

Il clipping di un segmento prevede la codifica dei suoi estremi sulla base delle regioni di appartenenza ed il confronto: 1. se il codice di entrambi gli estremi 0000 (OR logico), allora si pu assumere che il segmento interamente interno al rettangolo di clipping

2. se loperazione di AND logico tra i codici degli estremi restituisce un risultato non nullo, allora il segmento esterno allarea di clipping (gli estremi giacciono in uno stesso semipiano)

3. se il risultato dellAND nullo, allora il segmento potrebbe attraversare larea di clipping e si procede come segue: a. Si individua lintersezione tra il segmento ed il lato relativo al primo bit discordante tra i codici (bit 1, y = ymax) b. Lestremo con bit a 1 viene sostituito dal nuovo vertice c. Si itera il procedimento d. Ad ogni iterazione si controlla leventuale terminazione del processo (OR logico nullo) Lalgoritmo rimuove progressivamente le parti esterne. Risulta efficiente se molti dei segmenti da clippare sono completamente esterni al rettangolo di clipping.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 28/83
Ultimo aggiornamento: 26/03/2014 02:00

Ripeti Valuta i codici dei due estremi Se entrambi i codici sono nulli La linea totalmente visibile // caso AB Altrimenti se lAND bit a bit degli estremi diverso da 0 La linea totalmente invisibile // caso CD: si tratta di // linee che sono tutte in una // delle 4 regioni definite dai // bit del codice perch gli // estremi hanno un bit 1 nella // stessa posizione) Altrimenti Si considera il primo estremo con codice diverso da 0 // caso EF e IL: se un estremo ha codice pari a 0 // allora visibile Si effettua lintersezione con la retta corrispondente al primo bit 1 del codice // punto H in EF e punto M in IL Si considera il nuovo segmento che va dal punto intersezione al secondo estremo e si calcola il nuovo codice per lintersezione Finch non ricadi in uno dei due casi banali Antialiasing Le tecniche di rasterizzazione producono leffetto indesiderato di segmenti o bordi di poligoni non rettilinei ma con andamento a scaletta. Tale effetto prende il nome di aliasing e deriva dal fatto che la frequenza di campionamento (dipendente dalla dimensione del pixel) troppo piccola rispetto al segnale. Laliasing dipende dal numero finito di pixel, dalla posizione p refissata dei pixel, dalla forma e dalla dimensione prefissate dei pixel.

Aumentando la risoluzione dello schermo (aumentando il numero di pixel) possibile attutire leffetto di aliasing.

Una tecnica di antialiasing consiste nellapproccio unvweighted area sampling (UAS) per vengono accesi cui tutti i pixel interessati anche marginalmente dal rettangolo che rappresenta analiticamente il segmento di retta di dato spessore o, pi in generale, la striscia che rappresenta la generica linea curva. Ai pixel data unintensit proporzionale in base alla proporzione della loro area interessata dalla linea. Questo metodo genera un effetto visivo che inganna locchio e fa percepire contorni continui e non seghettati. Quindi: 1. Lintensit di ciascun pixel decresce al crescere della distanza tra il centro del pixel e il bordo esterno del segmento con spessore 2. Lintensit dei pixel non intersecati dal segmento non influenzata dalla rasterizzazione del segmento stesso 3. Porzioni di pixel di uguale superfici danno luogo ad intensit uguali indipendentemente dalla loro distanza dal centro del pixel stesso. La tecnica UAS non apprezzabile da un punto di vista percettivo perch gli estremi della primitiva tendono a sbordare in quanto pixel molto distanti dal centro della linea, ma con una piccola sovrapposizione con essa, risultano accesi.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 29/83
Ultimo aggiornamento: 26/03/2014 02:00

Una tecnica che sopperisce ai difetti dellUAS tenendo conto anche della distanza del centro del pixel dalla traccia teorica della primitiva, pensata come priva di spessore, la tecnica weighted area sampling (WAS) . Entrambe le tecniche seguono lo stesso approccio. Sia lmax lintensit massima di accensione di un pixel in assenza di antialiasing. Sia L R2 linsieme dei punti della primitiva. Ogni pixel che ha intersezione non vuota con L sar acceso con unintensit l = l max * Ws ottenuto come filtraggio con un opportuno nucleo di convoluzione W( /, { ) centrato nel pixel p ( xp , yp ) con una funzione dA ( x , y ) che esprime larea ricoperta dalla primitiva. La modalit WAS, rispetto a quella UAS, le aree di pixel egualmente interessate dalla primitiva non sono in generale accese con la stessa intensit: i pixel i cui centri sono pi vicini al confine teorico della primitiva sono accesi pi intensamente degli altri, a parit di porzione di area interessata. Le estremit della linea, che sono pixel parzialmente coperti, ma con il centro vicino o interno alla linea stessa, sono accese pi intensamente con WAS e forniscono una impressione visiva di terminazione netta.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 30/83
Ultimo aggiornamento: 26/03/2014 02:00

OpenGL
Introduzione
Open Graphics Library una libreria di funzioni per applicazioni che realizzano computer grafica. Si tratta di una specifica per diverse piattaforme, derivata dallinterfaccia GL (sviluppata per le workstation Silicon Graphics) progettata per il rendering in tempo reale ad alta velocit. Assolve due compiti principali: nascondere la complessit di interfacciamento con acceleratori 3D differenti, rendendo disponibile ununica API nascondere le capacit offerte dai diversi acceleratori 3D, richiedendo che tutte le implementazioni supportino completamente linsieme di funzioni OpenGL, ricorrendo ad unemulazione software se necessario. OpenGL rende disponibili primitive (punti, linee, poligoni, ) e ha il compito di convertirle in pixel attraverso lesecuzione della pipeline grafica. OpenGL opera a basso livello: richiede al programmatore i passi precisi necessari per disegnare una scena e richiedendo una buona conoscenza della pipeline grafica lasciando libert di implementazione di algoritmi di rendering specializzati. Documentazione: http://www.opengl.org/sdk/docs/man/ Le funzioni OpenGL possono essere classificate in base alle loro funzionalit: Funzioni primitive: definiscono gli oggetti di basso livello che il sistema grafico pu visualizzare: punti, segmenti, poligoni, curve, Funzioni attributo: governano il modo in cui le primitive appaiono sullo schermo Funzioni di visualizzazione: descrivono la posizione e lorientamento, permettono di fissare la visualizzazione delle immagini Funzioni di trasformazione: traslazioni, rotazioni e scalature Funzioni di input: gestiscono linterazione con le diverse forme di input che caratterizzano i sistemi grafici moderni Funzioni di controllo: permettono la comunicazione con i sistemi window, linizializzazione dei programma, la gestione degli errori

Librerie GLU e GLUT


Connesse alle librerie OpenGL, possibile utilizzare: Libreria GLU (Graphics Library Utility) Usa solo funzioni GL e contiene solo il codice per oggetti comuni (sfere, ) che lutente preferisce non scrivere ripetutamente. Libreria GLUT (Graphics Library Utility Toolkit) Si occupa della gestione delle interfacce con il sistema window, fornisce le funzionalit minime attese da qualsiasi sistema moderno di windowing.

Programmazione window-based
I programmi window-based sono controllati dagli eventi: eseguono determinate azioni al verificarsi di determinati eventi. Il sistema gestisce automaticamente una coda di eventi che memorizza messaggi che comunicano gli eventi accaduti. Il sistema risponde agli eventi secondo il criterio primo avvenuto, primo servito. Le azioni che il sistema esegue quando si verifica un evento sono realizzate tramite callback functions: ogni evento deve avere la sua callback function.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 31/83
Ultimo aggiornamento: 26/03/2014 02:00

Alcune funzioni per la gestione della window


void glutInit(int *argcp, char **argv); Inizializza la libreria GLUT. void glutInitWindowSize(int width, int height); Inizilizza la dimensione della finestra dello schermo. void glutInitWindowPosition(int x, int y); Inizializza la posizione della finestra nello schermo. void glutInitDisplayMode(unsigned int mode); Inizializza la modalit di visualizzazione. mode pu assumere i seguenti valori (combinabili in OR logico): GLUT_RGBA Bit mask to select an RGBA mode window. This is the default if neither GLUT_RGBA nor GLUT_INDEX are specified. GLUT_RGB GLUT_INDEX An alias for GLUT_RGBA. Bit mask to select a color index mode window. This overrides GLUT_RGBA if it is also specified. Bit mask to select a single buffered window. This is the default if neither GLUT_DOUBLE or GLUT_SINGLE are specified. Bit mask to select a double buffered window. This overrides GLUT_SINGLE if it is also specified. Bit mask to select a window with an accumulation buffer. Bit mask to select a window with an alpha component to the color buffer(s). Bit mask to select a window with a depth buffer. Bit mask to select a window with a stencil buffer. Bit mask to select a window with multisampling support. If multisampling is not available, a non-multisampling window will automatically be chosen. Note: both the OpenGL client-side and server-side implementations must support the GLX_SAMPLE_SGIS extension for multisampling to be available. Bit mask to select a stereo window. Bit mask to select a window with a ``luminance'' color model. This model provides the functionality of OpenGL's RGBA color model, but the green and blue components are not maintained in the frame buffer. Instead each pixel's red component is converted to an index between zero and glutGet(GLUT_WINDOW_COLORMAP_SIZE)-1 and looked up in a per-window color map to determine the color of pixels within the window. The initial colormap of GLUT_LUMINANCE windows is initialized to be a linear gray ramp, but can be modified with GLUT's colormap routines.

GLUT_SINGLE

GLUT_DOUBLE

GLUT_ACCUM GLUT_ALPHA GLUT_DEPTH GLUT_STENCIL GLUT_MULTISAMPLE

GLUT_STEREO GLUT_LUMINANCE

int glutCreateWindow(char *name); Crea una finestra principale. possibile specificare il titolo della finestra.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 32/83
Ultimo aggiornamento: 26/03/2014 02:00

int glutCreateSubWindow(int win, int x, int y, int width, int height); Crea una finestra secondaria allinterno di una finestra principale, specificandone dimensioni e posizione. void glutSetWindow(int win); Imposta la finestra attiva. int glutGetWindow(void); Individua la finestra attiva. void glutDestroyWindow(int win); Elimina dallesecuzione la finestra desiderata. void glutPositionWindow(int x, int y); Sposta la finestra nella posizione desiderata. Se si tratta di una finestra principale la posizione relativa allo schermo, se si tratta di una finestra secondaria la posizione relativa alla finestra principale. void glutReshapeWindow(int width, int height); Ridimensiona la finestra e ne ridisegna il contenuto. void glutFullScreen(void); Ingrandisce a tutto schermo la finestra attiva. void glutShowWindow(void); void glutHideWindow(void); void glutIconifyWindow(void); Rispettivamente: visualizza la finestra attiva, nasconde la finestra attiva, riduce ad icona la finestra attiva. void glutSetWindowTitle(char *name); void glutSetIconTitle(char *name); Permettono di modificare il nome e il testo dellicona della finestra attiva. void glutSetCursor(int cursor); Imposta la forma per il cursore del mouse, utilizza le seguenti costanti: GLUT_CURSOR_RIGHT_ARROW: GLUT_CURSOR_LEFT_ARROW: GLUT_CURSOR_INFO: GLUT_CURSOR_DESTROY: GLUT_CURSOR_HELP: GLUT_CURSOR_CYCLE: GLUT_CURSOR_SPRAY: GLUT_CURSOR_WAIT: GLUT_CURSOR_TEXT: GLUT_CURSOR_CROSSHAIR: GLUT_CURSOR_UP_DOWN: GLUT_CURSOR_LEFT_RIGHT: GLUT_CURSOR_TOP_SIDE: GLUT_CURSOR_BOTTOM_SIDE: GLUT_CURSOR_LEFT_SIDE: GLUT_CURSOR_RIGHT_SIDE: GLUT_CURSOR_TOP_LEFT_CORNER: GLUT_CURSOR_TOP_RIGHT_CORNER: GLUT_CURSOR_BOTTOM_RIGHT_CORNER: GLUT_CURSOR_BOTTOM_LEFT_CORNER: GLUT_CURSOR_FULL_CROSSHAIR: GLUT_CURSOR_NONE: Arrow pointing up and to the right. Arrow pointing up and to the left. Pointing hand. Skull & cross bones. Question mark. Arrows rotating in a circle. Spray can. Wrist watch. Insertion point cursor for text. Simple cross-hair. Bi-directional pointing up & down. Bi-directional pointing left & right. Arrow pointing to top side. Arrow pointing to bottom side. Arrow pointing to left side. Arrow pointing to right side. Arrow pointing to top-left corner. Arrow pointing to top-right corner. Arrow pointing to bottom-left corner. Arrow pointing to bottom-right corner. Full-screen cross-hair cursor Invisible cursor.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it GLUT_CURSOR_INHERIT: Use parent's cursor.

A.A. 2013/2014
Pag. 33/83
Ultimo aggiornamento: 26/03/2014 02:00

Alcune funzioni per la gestione degli eventi


void glutDisplayFunc(void (*func)(void)); Imposta la funzione di callback per la current window void glutReshapeFunc(void (*func)(int width, int height)); Imposta la funzione di callback per levento di ridimensionamento della current window void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); Imposta la funzione di callback per levento di pressione di un tasto della tastiera. key corrisponde al codice ASCII del carattere corrispondente tasto premuto. x e y indicano la posizione del mouse al momento della pressione del tasto. void glutSpecialFunc(void (*func)(int key, int x, int y)); Imposta la funzione di callback per levento di pressione di un tasto speciale della tastiera. Sono definite le costanti GLUT_KEY_HOME, ). per lindividuazione del tasto speciale premuto (GLUT_KEY_F1, ,

void glutMouseFunc(void (*func)(int button, int state, int x, int y)); Imposta la funzione di callback per levento di pressione di un pulsante del mouse. button valorizzato in base al pulsante premuto (costanti: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON). state indica se il pulsante stato premuto oppure rilasciato (costanti: GLUT_UP, GLUT_DOWN). x e y indicano la posizione del mouse al momento della pressione del pulsante. void glutMotionFunc(void (*func)(int x, int y)); void glutPassiveMotionFunc(void (*func)(int x, int y)); Imposta la funzione di callback per levento di movimento del mouse, rispettivamente nel caso in cui il mouse sia mosso con un pulsante premuto o meno. x e y indicano la posizione del mouse durante il movimento. void glutIdleFunc(void (*func)(void)); Imposta la funzione di callback idle globale: per effettuare attivit in background. void glutTimerFunc(unsigned int msecs, void (*func)(int value), value); Imposta una funzione di callback che deve essere eseguita in determinati intervalli di tempo. void glutMainLoop(void); Attiva il ciclo degli eventi GLUT: il programma disegna limmagine iniziale ed entra in attesa di accadimenti di eventi.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 34/83
Ultimo aggiornamento: 26/03/2014 02:00

Funzioni per la gestione dei menu


int glutCreateMenu(void (*func)(int value)); Imposta la funzione di callback per la selezione di uno dei valori (item) del menu. void glutSetMenu(int menu); int glutGetMenu(void) Rispettivamente: imposta o ottiene il menu attivo. void glutDestroyMenu(int menu); Cancella un menu. void glutAddMenuEntry(char *name, int value); Aggiunge una voce di selezione alla lista degli elementi di un menu. void glutAddSubMenu(char *name, int menu); Aggiunge una voce di sottomenu alla lista degli elementi di un menu. void glutChangeToMenuEntry(int entry, char *name, int value); void glutChangeToSubMenu(int entry, char *name, int menu); Imposta la voce o il sottomenu selezionati. void glutRemoveMenuItem(int entry); Rimuove un elemento del menu corrente (entry specifica il numero dellelemento da ri muovere partendo dal 1). void glutAttachMenu(int button); void glutDetachMenu(int button); Collega la visualizzazione del menu corrente, nella finestra corrente, alla pressione di uno dei pulsanti del mouse (utilizza le costanti: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, and GLUT_RIGHT_BUTTON)

Funzioni per il testo


void glutBitmapCharacter(void *font, int character); Disegna un testo (character) nel font selezionato (*font) in formato bitmap. I tipi di carattere utilizzabili sono: GLUT_BITMAP_8_BY_13: GLUT_BITMAP_9_BY_15: GLUT_BITMAP_TIMES_ROMAN_10: GLUT_BITMAP_TIMES_ROMAN_24: GLUT_BITMAP_HELVETICA_10: GLUT_BITMAP_HELVETICA_12: GLUT_BITMAP_HELVETICA_18:

font di larghezza fissata con ogni carattere che riempie un rettangolo di 8x13 pixels font di larghezza fissata con ogni carattere che riempie un rettangolo di 9x15 pixels Font times roman a 10 punti proporzionalmente spaziato. Font times roman a 24 punti proporzionalmente spaziato. Font Elvetica a 10 punti proporzionalmente spaziato. Font Elvetica a 12 punti proporzionalmente spaziato. Font Elvetica a 18 punti proporzionalmente spaziato.

int glutBitmapWidth(GLUTbitmapFont font, int character) Restituisce la larghezza per un testo bitmap nel font selezionato. void glutStrokeCharacter(void *font, int character); Disegna un testo (character) nel font selezionato (*font) in formato stroke.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it int glutStrokeWidth(GLUTstrokeFont font, int character) Restituisce la larghezza per un testo stroke nel font selezionato. I tipi di carattere utilizzabili sono: GLUT_STROKE_ROMA GLUT_STROKE_MONO_ROMAN

A.A. 2013/2014
Pag. 35/83
Ultimo aggiornamento: 26/03/2014 02:00

Funzioni per il colore


void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); Imposta il colore dello sfondo, alpha descrive il grado di trasparenza. void glClear( GLbitfield mask); Cancella il buffer e applica il colore di sfondo allintera finestra. mask pu assumere i valori: GL_COLOR_BUFFER_BIT: GL_DEPTH_BUFFER_BIT: GL_STENCIL_BUFFER_BIT: indica i buffer attualmente abilitati per la scrittura di colore indica il buffer di profondit indica il buffer di stencil.

Funzioni per la definizione di coordinate


Lo spazio delle coordinate del mondo e lo spazio della finestra devono essere correlati tramite funzioni di traslazione e ridimensionamento) per poter disegnare gli elementi dellimmagine nella viewport. Deve essere quindi definita una mappatura tra la finestra del mondo (window) e la finestra fisica dello schermo (viewport). Questo approccio rende pi semplice la gestione della visualizzazione di una scena. La window espressa in coordinate del mondo. La viewport una porzione della finestra sullo schermo. Ci che giace nella window viene traslato e ridimensionato per apparire nella viewport. void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); Definisce la window tramite le coordinate del suo angolo basso sinistro e di quello alto destro. Deve essere preceduta alla funzione glMatrixMode. void glMatrixMode(GLenum mode); Definisce quale matrice di trasformazione utilizzata per le seguenti operazioni. mode pu assumere i seguenti valori: GL_MODELVIEW: applica alle seguenti GL_PROJECTION: applica alle seguenti GL_TEXTURE: applica alle seguenti GL_COLOR: applica alle seguenti

operazioni operazioni operazioni operazioni

la la la la

matrice matrice matrice matrice

di modellazione. di proiezione. delle texture. dei colori.

void glLoadIdentity(void); Sostituisce lattuale matrice con la matrice identit. void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); Definisce una prospettiva per la window . fovy specifica langolo di visione, in gradi, nella direzione y aspect specifica langolo di visione nella direzione x (ovvero il rapporto della larghezza rispetto allaltezza)

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 36/83
Ultimo aggiornamento: 26/03/2014 02:00

zNear specifica la distanza tra la telecamere virtuale il piano pi vicino zFar specifica la distanza tra la telecamere virtuale il piano pi lontano void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); Definisce la viewport tramite le coordinate del suo angolo basso sinistro e di quello alto destro (specificando larghezza e altezza).

Funzioni primitive per il disegno


void glPointSize(GLfloat size); Imposta la dimensione di un punto. void glVertex{D}{T}(GLType red, GLType green, GLType blue[, GLType alpha]]); Imposta il colore corrente. D pu assumere i valori:3, 4 che indicano se il colore definito solo dalle sue componenti rossa, verde e blu, oppure dalle tre componenti e dal grado di trasparenza. T pu assumere i valori b (byte), s (short), i (int), f (float), d (double), ub (ubyte), us (ushort), ui (uint) e indica il tipo di variabile che deve essere utilizzata per indicare le componenti. void glBegin(GLenum mode); Definisce linizio della dichiarazione dei vertici di una certa primitiva di disegno. glBegin deve esse seguita da una serie di istruzioni glVertex(xx) e da unistruzione glEn d. mode definisce la primitiva, pu assumere i valori: GL_POINTS GL_LINES GL_LINE_STRIP ogni vertice indicato rappresenta un punto. i vertici sono trattati a coppie e definiscono dei segmenti. disegna una polyline, ovvero traccia una serie di segmenti definiti dai vertici indicati in modo che: i primi 2 vertici definiscono il primo segmento, i vertici successivi definiscono un segmento che parte dal vertice terminale del segmento precedente. come GL_LINE_STRIP ma aggiunge automaticamente un segmento che connette il vertice finale con quello iniziale. disegna sequenze di triangoli definiti da tre vertici ciascuno.

GL_LINE_LOOP

GL_TRIANGLES

GL_TRIANGLE_STRIP disegna sequenze di triangoli adiacenti: per i triangoli di indice n pari, i vertici sono n, n+1 e n+2, per quelli con n dispari, i vertici sono n+1, n, n+2. GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP disegna sequenze di triangoli adiacenti aventi in comune il vertice iniziale. disegna sequenze di quadrilateri definiti da quattro vertici ciascuno. come GL_TRIANGLE_STRIP, ma applicato ai quadrilateri, disegna sequenze di quadrilateri adiacenti. disegna poligoni convessi.

GL_POLYGON

void glVertex{D}{T}(GLType x, GLType y[, GLType z[, GLType w]]); Si tratta di una serie di funzioni (il nome completo della funzione ottenuto sostituendo {D} e {T} con opportuni valori) che definiscono un vertice in uno spazio.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 37/83
Ultimo aggiornamento: 26/03/2014 02:00

D pu assumere i valori:2, 3, 4 e rappresenta il numero di dimensioni dello spazio. T pu assumere i valori s (short), i (int), f (float), d (double) e indica il tipo di variabile che deve essere utilizzata per indicare le coordinate. void glBegin(GLenum mode); Determina la fine della serie di vertici per la primitiva. void glFlush(void); Esegue il comando GL immediatamente (disegna la primitiva, ). void glRect{T}(GLType x1, GLType y1, GLType x2, GLType y2); Disegna un rettangolo allineato in base alle coordinate del suo vertice inferiore sinistro e di quello superiore destro.

Struttura di un programma OpenGL


OpenGL utilizza dati con tipi di dati specifici definiti al suo interno. Per assicurare che le funzioni OpenFGL ricevano dati appropriati conveniente usare i nomi intrinseci per i tipi: GLint, GLfloat, Ovviamente possibile definire strutture per le coordinate dei vertici. typedef struct {GLint x,y;} GLintPoint2i; Pu essere utile definire una serie di funzioni. void drawDot(GLintPoint2i point) { /*draw a 2d GLint point*/ glBegin(GL_POINTS); glVertex2i(point.x,point.y); glEnd( ); }

Inizializzazione librerie OpenGL

Inizializzazione modalit della finestra dello schermo

Suggerimenti per i poligoni regolari e cerchi


Un poligono regolare se: 1. tutti i lati hanno la stessa lunghezza 2. i lati adiacenti formano angoli interni sempre uguali. Un n-gono un poligono con n lati. Se il numero di lati di un n-gono grande, ln-gono in apparenza approssima un cerchio. Si usa questo metodo per implementare larea di un cerchio. I vertici di un n-gono appartengono al suo parent-circle. Essi giacciono nelle posizioni definite da:

Creazione della/e finestra/e

Funzioni di impostazione (colori, modalit, matrici, ...)

Funzioni di disegno

Per posizionare un n-gono in base al suo punto centrale (nella posizione cx, cy), bisogna aggiungere cx e cy rispettivamente alle coordinate x e y.

Attivazione loop attesa eventi

Per ruotare un n-gono di un angolo necessario aggiungere allargomento del coseno e del seno.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 38/83
Ultimo aggiornamento: 26/03/2014 02:00

Per scalare un n-gono di un fattore S necessario moltiplicare il raggio R per il fattore S. Funzione che disegna un n-gono void ngon(int n, GLfloat cx, GLfloat cy, GLfloat raggio, Glfloat angolo) { GLfloat x, y; if(n<3) return; angolo=angolo*3.14159265/180; //trasforma langolo di rotazione da gradi in radianti glBegin(GL_LINE_LOOP) for(i=0;i<n;i++) { x=R*cos((2*3.14159265)*i/n+angolo)+cx; y=R*sin((2*3.14159265)*i/n+angolo)+cy; glVertex2f(x,y) } glEnd( ); }

void cerchio(int n, GLfloat cx, GLfloat cy, GLfloat raggio, Glfloat angolo) { Glfloat x,y; if(n<3) return; angolo=angolo*3.14159265/180; //trasforma langolo di rotazione da gradi in radianti glBegin(GL_POLYGON) for(i=0;i<n;i++) { x=R*cos((2*3.14159265)*i/n+angolo)+cx; y=R*sin((2*3.14159265)*i/n+angolo)+cy; glVertex2f(x,y); } glEnd( ); }

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 39/83
Ultimo aggiornamento: 26/03/2014 02:00

Varianti delln-gono: possibile disegnare varianti interessanti delln -gono connettendo i suoi vertici in ordine da quello standard che connette i vertici adiacenti. Ad esempio: connettendo un vertice a tutti i vertici non adiacenti si ottengono figure tipo stella. void stellation(int n, float cx, float cy,float radius,float angolo,float scale) { int i,j; typedef struct{GLfloat x,y;} GLfloatPoint; GLfloatPoint Punto[20]; angolo=angolo*3.14159265/180; for (i=0;i<n;i++) { Punto[i].x=radius*scale*cos(2*3.14159265*i/n+angolo)+cx; Punto[i].y=radius*scale*sin(2*3.14159265*i/n+angolo)+cy; } glBegin(GL_LINE_STRIP); i=0; for (j=i+2;j<n-1;j=j+1) { glVertex2f(Punto[i].x,Punto[i].y); glVertex2f(Punto[j].x,Punto[j].y); } for (i=1;i<n;i++) { for (j=i+2;j<n;j=j+1) { glVertex2f(Punto[i].x,Punto[i].y); glVertex2f(Punto[j].x,Punto[j].y); } } glEnd(); glFlush(); }

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 40/83
Ultimo aggiornamento: 26/03/2014 02:00

Gestione del ridimensionamento della finestra


Il ridimensionamento della finestra da parte dellutente, genera lesecuzione dellevento di resize. Per gestire tale evento si deve impostare la sua funzione di callback tramite la funzione, nel main(), glutReshapeFunc(myReshape), dove myReshape la funzione di callback. La funzione myReshape ha la seguente signature: void myReshape(Glsizei W, Glsizei H); Il sistema passa alla funzione myReshape la nuova larghezza e la nuova altezza della finestra. necessario pertanto definire nuovamente il viewport in modo che si adatti alla finestra dello schermo e mantenga le stesse proporzioni della finestra sul mondo (aspect ratio = larghezza / altezza ) in modo da prevenire distorsioni dellimmagine . Pertanto, se R laspect ratio della window sul mondo e la finestra dello schermo ha larghezza W e altezza H, si possono verificare due situazioni distinte: 1. la finestra sul mondo ha un aspect ratio pi grande della finestra sullo schermo R > W/H in questo caso la finestra sul mondo bassa e larga rispetto alla finestra sullo schermo, allora la viewport dovr avere larghezza W e altezza W/R 2. la finestra sul mondo ha un aspect ratio pi piccolo della finestra sullo schermo R < W/H in questo caso la finestra sul mondo alta e stretta rispetto alla finestra sullo schermo, allora la viewport dovr avere altezza H e larghezza H*R. void myReshape(Glsizei W, Glsixei H) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(left, right, bottom, top); R = (float)(right-left)/(float)(top-bottom); if (R > W/H) set Viewport(0, (Glsizei)W, 0, (Glsizei)W/R); else set Viewport(0, (Glsizei)H*R, 0, (Glsizei)H); end glMatrixMode(GL_MODELVIEW); }

Tiling della finestra con un motivo


Fare tiling significa ricoprire lintera finestra sullo schermo lato per lato, con un certo numero di copie di una stessa immagine. Limmagine utilizzata il motivo. possibile fare tiling utilizzando una differente viewport per ogni copia del motivo.

Trasformazioni di modellazione
Per istanziare un oggetto nella scena necessario: 1. effettuare una scalatura per portare loggetto alle proporzioni desiderate 2. effettuare una rotazione per orientare loggetto 3. effettuare una traslazione per posizionarlo..

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 41/83
Ultimo aggiornamento: 26/03/2014 02:00

Tutte le trasformazioni geometriche necessarie ad OpenGL sono mantenute in tre matrici che fanno parte dello stato: a. ModelView (usata dal transformer) b. Project (usata dal projector) c. Texture (usata dal rasterizer se si fa texture mapping) Il comando per selezionare la matrice corrente glMatrixMode(<matrix>) in cui <matrix> pu assumere i valori GL_MODELVIEW, GL_PROJECT, GL_TEXTURE. La matrice ModelView permette di definire le trasformazioni affini necessarie per posizionare loggetto nel sistema del mondo e per orientare la macchina fotografica virtuale, ovvero passare al sistema dellocchio. La funzione glLoadIdentity() rimpiazza la matrice corrente con la matrice identit, le funzioni di traslazione, rotazione e scalatura sono: glRotate(angle, ax, ay, az): glTranslate(dx, dy, dz): glScale(sx, sy, sz): glMultiMatrix(matrix): rotazione attorno ad un asse passante per lorigine traslazione scalatura attorno allorigine per effettuare una moltiplicazione generica con la matrice corrente

Questi comandi postmoltiplicano la matrice corrente per quella specificata: si imposta inizialmente la matrice identit e si specificano le moltiplicazioni da eseguire; lultima operazione indicata la prima ad essere eseguita. Per posizionare oggetti diversi necessario utilizzare combinazioni di matrici diverse che non siano reciprocamente influenzate; per fare questo sono disponibili i comandi per salvare la matrice corrente in uno stack e riutilizzarla successivamente: glPushMatrix() glPopMatrix() salva la matrice corrente nello stack ripristina la matrice corrente con quella in cima allo stack.

Si imposta allora la matrice da utilizzare per un gruppo di oggetti e, per ogni oggetto, si impostano le specifiche trasformazioni dopo aver salvato la matrice corrente nello stack, al termine del disegno delloggetto si ripristina la matrice dallo stack.

Librerie GLUI per linterfaccia grafica


possibile utilizzare le librerie GLUI per creare pannelli di interazione contenenti pulsanti, caselle di testo, selezioni, ; di seguito sono riportate le descrizioni di alcune funzioni utili.

Definizioni
necessario includere la libreria GLUI: <gl/glui.h> e linkare la libreria glui32.lib. Nel programma poi necessario definire le variabili globali per i tipi di controlli che si voglio utilizzare e per identificare le finestre. int main_window; //memorizza lidentificativo della finestra creata GLUI_Spinner *spinner; GLUI_EditText *text; GLUI_RadioGroup *radio;

Funzioni
Quando si crea la finestra necessario memorizzarne lidentificativo per i successivi usi. main_window = glutCreateWindow(Nome finestra);

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 42/83
Ultimo aggiornamento: 26/03/2014 02:00

Si deve poi creare linterfaccia grafica per gestire lint erazione con la finestra grafica creata. GLUI *glui = GLUI_Master.create_glui(Opzioni); Allinterfaccia appena creata possibile aggiungere un pannello: pannello = glui->add_panel(Nome pannello,GLUI_PANEL_EMBOSSED); Al pannello possono essere aggiunti i controlli (ad esempio uno spinner): spinner = glui->add_spinner_to_panel(pannello,etichetta spinner,GLUI_SPINNER_FLOAT, &variabile, value, controlli); I parametri rappresentano rispettivamente: il pannello cui va a ggiunto il controllo, letichetta visualizzata, il tipo di dati trattato, la variabile nella quale viene aggiornato il valore dello spinner, il parametro di input passato alla funzione chiamata quando si utilizza il controllo, il nome della funzione chiamata. Il range di validit dello spinner definito come segue: spinner->set_float_limits(min, max); Per aggiungere una casella di testo editabile si usa, ad esempio: text = glui->add_edittext_to_panel(pannello, etichetta casella,GLUI_EDITTEXT_FLOAT, &variabile); la casella di testo aggiorna la variabile indicata come quarto parametro. Un radio-group costituito da radio-button per effettuare una scelta esclusiva, pu essere costruito con: radio = glui->add_radiogroup(&variabile, 0, funzione); glui->add_radiobutton_to_group(radio, valore 1); glui->add_radiobutton_to_group(radio, valore 2); glui->add_radiobutton_to_group(radio, ...); Il valore assegnato alla variabile corrisponde alla scelta fatta (varia da 0 a n-1 per n scelte possibili). La funzione (terzo parametro di add_radiogroup) dovr gestire le possibili scelte, ad esempio: void funzione(int value) { switch(variabile) { case 0: //codice per la scelta 0; break; case 1: //codice per la scelta 1; break; ... } } possibile aggiungere un pulsante: glui->add_button(Etichetta,0,funzione);

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 43/83
Ultimo aggiornamento: 26/03/2014 02:00

Linterfaccia definita con le funzioni sopra indicate, deve essere poi collegata alla finestra grafica tramite listruzione: glui->set_main_gfx_window(main_window); glutMainLoop(); Le variabili utilizzate dovranno essere variabili globali che potranno essere utilizzate nella funzione display.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 44/83
Ultimo aggiornamento: 26/03/2014 02:00

Rappresentazione di curve mediante spline polinomiali di ordine m a nodi semplici


Spesso necessario modellare oggetti non facilmente ottenibili da figure geometriche: oggetti con contorni dolci o arrotondati alternati a parti lisce o spigoli vivi. La modellazione geometrica quella parte della Computer graphics che si occupa di creare i modelli geometrici di curve, superfici e oggetti 3D.

Curve 2D
Per memorizzare e rappresentare una funzione tramite un calcolatore necessario discretizzarla in un numero finito di punti (possibilmente non troppo elevato) e considerare una sua approssimazione ottenuta un criterio di interpolazione o di approssimazione. Una curva non matematicamente descrivibile tramite una funzione y = f(x) perch in corrispondenza di un certo valore di x possono esistere diversi valori di y. Lequazione implicita di una curva f(x,y) = 0 pu essere utile in certi casi, tuttavia presenta svantaggi in altri (ad esempio lequazione implicita di una circonferenza con centro allorigine e raggio R: x 2 + y2 = R2). Inoltre non semplice ottenere la forma implicita di una qualsiasi curva. La forma pi semplice, invece, per rappresentare una curva, la forma parametrica: x = x(t) descrive tutti i punti della curva al variare del parametro t in [ t min, tmax ]. Esempi di curve in forma parametrica y = y(t) che

Rappresentazione nel calcolatore Per rappresentare nel calcolatore una curva necessario considerarne una discretizzazione, si considerano cio i punti sulla curva:

e si costruiscono le due funzioni parametriche interpola le coppie .

, che interpola le coppie

, ed

, che

necessario allora risolvere due problemi di interpolazione. A partire dalle posizioni dei punti P0, P1, , PN+1, si ottengono diverse possibili curve, la cui forma dipender sia dalla posizione dei punti, sia dalle funzioni base utilizzate per risolvere i due problemi di interpolazione per le due componenti parametriche.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 45/83
Ultimo aggiornamento: 26/03/2014 02:00

Funzioni spline polinomiali a nodi semplici


Definizione 1.1: spline polinomiale a nodi semplici Sia [a,b] un intervallo chiuso e limitato dellasse reale e sia una partizione di [a,b] con: che genera k+1 sottointervalli cos definiti: Fissato un intero positivo m, con m < k, si definisce spline polinomiale di ordine m (grando m-1), una funzione s(x) che: a) in ciascun intervallo coincide con un polinomio di ordine m b) nei punti detti nodi semplici della spline, soddisfa le seguenti condizioni di raccordo:

Tali condizioni garantiscono che fino a quella di ordine m-2.

ovvero che

continua in [a,b] insieme alle sue derivate

Lo spazio delle spline di ordine m con nodi semplici

viene indicato con

Teorema: la dimensione dello spazio delle spline m+k Dimostrazione intuitiva: costruire una spline significa definire (k+1) intervalli nei quali calcolare un polinomio di ordine m, a questi si devono togliere le (m-1) condizioni applicati nei k punti di raccordo, ottenendo Nota: la base migliore per poter calcolare in modo stabile ed efficiente una funzione spline, sia per complessit che per stabilit, costituita dalla base delle B-spline. Definizione 1.2: Funzione base B-spline Assegnata una successione di nodi , si definisce B-spline normalizzata di ordine m relativa al nodo con , una funzione che gode delle seguenti propriet: a) b) c) In ciascun intervallo coincide con un polinomio di ordine m che si raccorda . opportunamente con i vicini, in modo tale che

Formule di Cox per la valutazione di una B-spline Per calcolare le funzioni base si utilizzano le formule di Cox, che consentono di calcolare combinazione di due funzioni base di ordine m-1, pi precisamente definita come:

mediante

per h = 2, , m si ha:

Le funzioni B-spline cos ottenute vengono utilizzate per costruire una base per lo spazio delle spline

Poich ha dimensione m+k, necessario costruire m+k funzioni base B-spline. Essendo k i nodi reali necessario inserire 2m nodi fittizi di cui m sono inseriti prima di e m sono inseriti dopo .

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 46/83
Ultimo aggiornamento: 26/03/2014 02:00

La partizione nodale cos costituita prende il nome di partizione nodale estesa *. Partizione nodale estesa Si definisce linsieme Mediante questa partizione diventa possibile definire le m+k B-spline normalizzate di ordine m:

partizione nodale estesa associata a

nel seguente modo:

in cui i casi 0 / 0 coincidenti).

devono essere interpretati come 0 (in quanto possibile scegliere nodi aggiuntivi

Risultato importante Linsieme possibile esprimere

costituisce una base per lo spazio come:

, quindi, per ogni x [a,b]

Osservazione: la base delle funzioni B-spline una base molto buona sia dal punto di vista della stabilit che dal punto di vista della complessit computazionale, poich le funzioni B-spline godono di molte propriet. Propriet delle B-spline 1. Non negativit: 2. Supporto locale: 3. In un punto , vi sono m funzioni base diverse da 0 se il punto non coincide con un nodo, se il punto coincide con un nodo le funzioni base diverse da 0 sono m-1 4. Le funzioni B-spline rappresentano una partizione dellunit: la somma delle valutazioni di tutte le B-spline in un punto vale 1:

Propriet delle spline valutate mediante B-spline Le propriet della base delle B-spline garantiscono che le funzioni spline valutate utilizzando tale base godano a loro volta di importanti propriet. 1. Per la propriet di supporto locale delle B-spline, per ogni uniche B-spline diverse da 0 siano: , per cui: risulta che sul punto x, le

2. Per le propriet di non negativit e partizione dellunit di cui godono le B -spline, ogni espressa nella base delle B-spline normalizzate, risulta una combinazione convessa dei coefficienti . Dalle propriet di una combinazione convessa si ha che (dalla sommatoria precedente) il valore assunto dalla funzione spline in un punto sempre compreso tra il valore minimo e massimo dei coefficienti della sua rappresentazione:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 47/83
Ultimo aggiornamento: 26/03/2014 02:00

Inoltre, se

allora:

Propriet di variation diminishing di una spline espressa s(x) nella base delle B-spline normalizzate Il numero di variazioni di segno della (indicato con ) sempre minore o uguale al numero di variazioni di segno della successione dei suoi coefficienti . Interpolazione mediante funzioni spline polinomiali a nodi semplici Come gi detto, per poter rappresentare una curva sul piano mediante funzioni spline necessario discretizzarla e considerarne la rappresentazione parametrica. Per ottenere una rappresentazione continua delle due componenti parametriche, si devono risolvere due problemi di interpolazione con funzioni spline. Si deve pertanto affrontare il problema generale dellinterpolazione con fu nzioni spline polinomiali a nodi semplici di un insieme di dati . Poich la funzione spline dipende fortemente dalla posizione e dal numero dei nodi che la caratterizzano, necessario per prima cosa studiare come posizionare i nodi veri dellinsieme . Il problema consiste nel cercare la funzione Se tale che

ha N+2 gradi libert, cio N+2-m = N-2 nodi, il sistema lineare che si ottiene :

Tale sistema quadrato e potrebbe essere risolubile, ma certe configurazioni dei noi potrebbero generare colonne nulle, pertanto non possibile definirne rango e risolubilit. Teorema di Schoemberg Whitney Il Teorema di Schoemberg Whitney fornisce una condizione necessaria e sufficiente affinch il sistema lineare, che si deve risolvere per calcolare i coefficienti della spline interpolante, abbia rango massimo e quindi ununica soluzione. Sia assegnata una successione crescente di nodi e la successione crescente di punti di osservazione e sia definita la successione delle B-spline Il problema di interpolazione di funzioni spline dei dati sistema lineare: si esprime come il seguente

La matrice A ha rango massimo se e solo se esiste almeno un punto di interpolazione nel suo supporto.

; cio se per ciascuna funzione B-spline

Pertanto, necessario legare la scelta dei nodi ai punti di interpolazione: la scelta dei nodi (individuata da Schoemberg), garantisce che la matrice delle funzioni base sia a rango massimo.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Unaltra possibilit per costruire una spline

A.A. 2013/2014
Pag. 48/83
Ultimo aggiornamento: 26/03/2014 02:00

che interpoli le coppie scegliere Imponendo

consiste nello scegliere il numero dei nodi veri . si ottengono equazioni ognuna delle quali ha

incognite.

Nel caso si hanno condizioni in incognite: per avere un sistema quadrato a rango massimo necessario aggiungere 2 condizioni. Le altre 2 condizioni vengono applicate agli estremi dellintervallo e prendono il nome di condizioni ai bordi. Condizione di spline cubica naturale

Tra tutte le funzioni interpolanti di classe C2, la spline cubica naturale quella che minimizza il funzionale

che rappresenta la curvatura globale della spline interpolante. La curvatura di una funzione derivabile e continua si definisce come:

Pertanto, se , la curvatura ovvero: la derivata seconda di una funzione unapprossimazione della curvatura globale. Poich una spline naturale mini mizza il funzionale , si pu affermare che la spline naturale che ha curvatura minima quella che oscilla meno. Condizione sulla derivata prima

Condizione sulla derivata seconda

Condizione di periodicit Se si vuole costruire una funzione che nel punto

ha un valore uguale al valore in

si possono imporre le seguenti condizioni di periodicit:

Tali condizioni sono particolarmente utili nella rappresentazione di curve chiuse, per le quali si ha che:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Nota

A.A. 2013/2014
Pag. 49/83
Ultimo aggiornamento: 26/03/2014 02:00

La stima della derivata prima pu essere calcolata facendo uso del rapporto incrementale fra i valori della funzione data agli estremi, ovvero:

oppure facendo uso della stima di Bessel, che approssima la derivata prima della funzione nel primo punto di interpolazione come la derivata prima del polinomio quadratico che interpola i primi 3 punti di interpolazione, e la derivata prima della funzione nellultimo punto come la derivata prima del polinomio quadratico che interpola gli ultimi 3 punti di interpolazione. La scelta delle condizioni ai bordi per le due curve parametriche forma della curva che interpola i dati. Propriet di convergenza delle funzioni spline di interpolazione Teorema Sia per ; con passo (o, se il passo non costante e influenza notevolmente la

sia una successione di decomposizioni dellintervallo tali che sia

sia limitato); in tutti i punti della decomposizione , ovvero:

la funzione spline che interpola la funzione

che soddisfi le condizioni ai bordi


allora: esistono delle costanti

, indipendenti da , tali che

Curve spline interpolanti Dati i punti , la curva spline interpolante si esprime nel seguente modo:

dove

sono la soluzione del sistema lineare che nasce dallimposizione delle condizioni e delle opportune condizioni ai bordi; sono la soluzione del sistema lineare che nasce dallimposizione delle condizioni di e delle opportune condizioni ai bordi.

di interpolazione e ,

interpolazione

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 50/83
Ultimo aggiornamento: 26/03/2014 02:00

Parametrizzazione
Il modo in cui viene calcolato il parametro delle coppie ( detto parametrizzazione. Tale scelta di particolare importanza nel calcolo della curva spline che interpola un insieme di punti nel piano in quanto influenza la scelta dei nodi della spline interpolante. Parametrizzazione uniforme La scelta pi semplice, per la quale i valori di sono equidistanti nellintervallo di variabilit del parametro , detta parametrizzazione uniforme ed quella algoritmicamente pi veloce:

Generalmente si utilizza reale fra i punti da interpolare.

. La parametrizzazione uniforme, tuttavia, non tiene conto della distanza

Parametrizzazione mediante corda La parametrizzazione mediante corda , invece, tiene conto della distanza reale tra i punt i: lintervallo tra due valori successivi del parametro proporzionale alla lunghezza del segmento corrispondente.

Per determinare i valori del parametro t si pu procedere come segue:

Tale metodo porta a risultati migliori rispetto alla parametrizzazione uniforme. Parametrizzazione di Foley Questa tecnica unevoluzione della parametrizzazione mediante corda in quanto, oltre a considerare le distanze tra i punti da interpolare, valuta anche gli angoli formati dai segmenti con uniscono segmenti successivi.

Parametrizzazione centripeta La parametrizzazione centripeta definisce una distanza specifica per il calcolo di . La scelta del valore

permette di definire un modello che definisce le curve in modo da minimizzare

laccelerazione centripeta di un oggetto che si muove lungo un percorso.


Uniforme Mediante corda Foley Centripeta

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 51/83
Ultimo aggiornamento: 26/03/2014 02:00

Non possibile definire in generale quale sia la parametrizzazione migliore, tuttavia deve essere considerata unimportante propriet: linvanrianza per le trasformazioni affini . Tra le parametrizzazioni elencate, solo la parametrizzazione uniforme gode di tale propriet, le altre dipendono dalla lunghezza dei segmenti che non sono invarianti per le trasformazioni affini. La scelta della parametrizzazione influenza anche la scelta dei nodi delle due spline parametriche interpolanti e : con la parametrizzazione uniforme possono essere scelti nodi coincidenti con i punti del parametro, in questo caso la matrice dei coefficienti del sistema lineare da risolvere quasi tridiagonale e ben condizionata con la parametrizzazione mediante corda importante ottenere che i nodi siano distribuiti nel modo pi uniforme possibile, rispettando la condizione che nel supporto di ciascuna funzione base ci sia almeno un punto di interpolazione.

Regolarit della curva

La derivata di il vettore tangente alla curva, le cui componenti sono le derivate delle corrispondenti componenti parametriche:

Una curva composta da due segmenti di curva pu vere, nel punto di giunzione, diversi tipi di regolarit. In particolare si considerano la continuit geometrica ( ) o la continuit parametrica ( ). Tipo di continuit Continuit geometrica Continuit geometrica Condizioni I due segmenti di curva sono coincidenti in un estremo I due segmenti di curva sono coincidenti in un estremo Le direzioni dei vettori tangenti ai due segmenti di curva sono uguali nel punto di giunzione ( necessario che i due vettori tangenti siano uno multiplo dellaltro) I due segmenti di curva sono coincidenti in un estremo Le direzioni dei vettori tangenti ai due segmenti di curva sono uguali nel punto di giunzione Il modulo dei vettori tangenti ai due segmenti di curva sono uguali nel punto di giunzione I due segmenti di curva sono coincidenti in un estremo Le direzioni e il modulo dei vettori giunzione sono uguali nel punto di

Continuit parametrica

Continuit parametrica

In generale, viste le condizioni, la continuit parametrica implica la continuit geometrica ; tuttavia esiste uneccezione: quando i vettori tangenti ai due segmenti di curva hanno entrambi componenti nulle nel punto di giunzione non si pu dire nulla sulla direzione, pertanto pu non esserci continuit geometrica. Le curve spline polinomiali di ordine m in cui i nodi interni sono tutti nodi semplici, sono curve che hanno continuit parametrica .

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 52/83
Ultimo aggiornamento: 26/03/2014 02:00

Interpolazione di classe C1
Interpolare utilizzando curve spline cubiche di classe C2 troppo restrittivo in quanto queste lasciano libera solo la derivata terza: costruire pezzi di polinomi cubici che si raccordano solo sul valore della derivata prima, lasciando libera anche la derivata seconda, permette una ricostruzione pi flessibile. Interpolare utilizzando curve spline cubiche di classe C1, significa utilizzare pezzi di polinomi cubici per ogni intervallo internodale e garantire che i nodi coincidano in valore e derivata prima.

Funzioni base di Hermite


Assegnati agli estremi dellintervallo poligono cubico che interpola i dati i valori e della funzione e e della derivata prima, il

dato da: dove

Polinomio interpolatore di Hermite


Assegnati e i valori il polinomio si esprime come: interpolatore di Hermite , tale che

, :

necessario applicare una

Poich sono definite nellintervallo trasformazione lineare affine che mappi il punto in Si ha che: o o e e

sono invarianti per trasformazioni affini: e non sono invarianti per trasformazioni affini e vale che:

Si pu verificare che il polinomio di Hermite in ogni sottointervallo coincide con un polinomio cubico che soddisfa le seguenti propriet:

pertanto, globalmente, si tratta di una funzione spline cubica interpolante di classe

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 53/83
Ultimo aggiornamento: 26/03/2014 02:00

Avendo a disposizione solo i valori della funzione, necessario trovare un criterio per determinare i valori delle derivate. Esistono due classi di metodi: Metodi numerici per il calcolo delle derivate Metodi di minimizzazione o Minimizzazione di un funzionale che tiene conto della curvatura globale o Minimizzazione di un funzionale che tiene conto della lunghezza della funzione interpolante o Minimizzazione di un funzionale combinazione lineare dei due precedenti.

Metodi numerici per il calcolo delle derivate


La derivata pu essere calcolata: come rapporto incrementale

come media di due rapporti incrementali successivi

come media pesata di due rapporti incrementali successivi

Shape preserving
Le interpolazioni di tipo shape preserving mantengono landamento dei dati. Se i dati hanno andamento monotono crescente, ovvero se preserving tale che . allora linterpolante shape allora linterpolante shape

Se i dati hanno andamento monotono decrescente, ovvero se preserving tale che .

Se i dati hanno andamento monotono convesso, ovvero se preserving tale che . Se i dati hanno andamento monotono concavo, ovvero se preserving tale che . Linterpolazione di Hermite un tipo di funzione per cui facile richiedere tale caratteristica: si tratta di determinare le derivate agli estremi in modo tale che si abbia monotonia e convessit (o concavit). Gli studi fatti hanno portato ad individuare delle regioni del piano che garantiscono che se i valori delle derivate si trovano in esse, si ha rispettivamente monotonia e convessit (o concavit). Tali regioni dipendono dallintervallo i-esimo e dai valori del rapporto incrementale dei dati. Mi Ti Vi = regione di monotonia = regione di convessit = regione di concavit

, la funzione interpolante

shape

, la funzione interpolante

shape

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 54/83
Ultimo aggiornamento: 26/03/2014 02:00

Curve interpolanti di Hermite


Dati i punti:

la curva interpolante di Hermite si esprime come:

Dati i punti:

la curva interpolante di Hermite si esprime come:

Le curve interpolanti di Hermite definiscono segmenti di curva quali combinazioni lineare di quattro valori: P1, P2, D1, D2, dei quali i primi due assegnano il valore della curva, i secondi ne modellano la forma. I coefficienti della combinazione lineare assegnati a P1, P2, D1, D2, sono i valori che le quattro funzioni base assumono per i diversi valori del parametro nellintervallo considerato.

Curve di Bezier
Lidea alla base delle curve di Bezier consiste nella sostituzione dei valori D1 e D2 delle curve di Hermite (che in esse vengono interpolati) con altri due valori puntuali che non vengono interpolati ma solo approssimati, le cui posizioni influenzano la forma della curva. I dati di un segmento di curva cubica di Bezier sono quattro valori P0, P1, P2, P3, dei quali P0 e P3 vengono interpolati mentre P1 e P2 sono solo approssimati: la loro posizione determina il vettore tangente allinizio e alla fine del segmento di curva. Bezier ha dimostrato che i pesi (ovvero le funzioni di t) da attribuire a questi quattro valori, affinch avvenga quanto descritto, sono i polinomi di Bernstein (di grado 3), essere sono le funzioni base che permettono di ottenere il segmento di curva cubica di Bezier come combinazione lineare dei quattro valori P0, P1, P2, P3:

Il segmento di curva cubica di Bezier dato da:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 55/83
Ultimo aggiornamento: 26/03/2014 02:00

Nel caso pi generale di curve di Bezier di grado n, si utilizzano N+1 punti di controllo: il primo e lultimo punto di controllo vengono interpolati il secondo e il penultimo punto di controllo definiscono la direzione della derivata negli estremi gli altri punti di controllo vengono approssimati e hanno lo scopo di modellare la forma della curva.

I polinomi di base di Bernstein di grado n nellintervallo [0, 1] sono definiti da:

Una curva di Bezier di grado n data da:

Un vantaggio dellutilizzo della forma di Bezier rispetto a quella di Hermite che, lavorando interattivamente, si ottiene una modellazione della curva in modo molto pi intuitivo: la curva che si ottiene approssima quella del poligono che formato dai segmenti di retta che congiungono i punti di controllo; tale poligono detto poligono di controllo. Le curve di Bezier presentano propriet interessanti ed utili per la computer graphics, essere sono collegate alle propriet delle funzioni base utilizzate. I polinomi di Bernstein sono, infatti, adatti a rappresentare un polinomio definito in un intervallo [a, b] in quanto sono definiti relativamente a quellintervallo. In generale, un polinomio di grado n sullintervallo [a,b] pu essere rappresentato come: in cui sono i polinomi di Bernstein di grado n definiti su [a,b] dalla relazione:

sono i coefficienti che identificano il polinomio espresso nella base di Bernstein. :

Tale rappresentazione si contrappone alla rappresentazione mediante la base monomiale

Nelle applicazioni comodo utilizzare lintervallo [0, 1], tuttavia questo non comporta differenze in quanto qualsiasi intervallo generico pu essere ricondotto allintervallo [0, 1] senza alterare i coefficienti utilizzando la trasformazione:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Allora, nellintervallo [0, 1] si ha:

A.A. 2013/2014
Pag. 56/83
Ultimo aggiornamento: 26/03/2014 02:00

Si osserva che questi polinomi sono tutti dello stesso grado, in contrapposizione alla base monomiale che utilizza monomi di grado diverso. Esempio: polinomi di base di Bernstein di grado n = 2

Esempio: polinomi di base di Bernstein di grado n = 3

Nota: il concetto di curve di Bezier e lo studio delle propriet di queste curve sono stati sviluppati indipendentemente da P. De Casteljau nel 1959 (per la Renault) e da P. Bezier nel 1962 (per la Citroen) per essere utilizzati nei rispettivi sistemi CAD.

Propriet dei polinomi di Bernstein di grado n


I polinomi di Bernstein godono di molte propriet che li rendono una base molto valida dal punto di vista dei calcoli. Ricorsivit I polinomi di Bernstein di grado n definiti in [a, b] sono legati ai polinomi di Bernstein di grado n-1 definiti su [a, b] dalla seguente formula:

Nel caso di [a, b] = [0, 1] si ha: Tali formule sono numericamente stabili in quanto utilizzano solo quantit positive.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Non negativit Dalla formula ricorrente segue che:

A.A. 2013/2014
Pag. 57/83
Ultimo aggiornamento: 26/03/2014 02:00

I polinomi di Bernstein formano una pa rtizioni dellunit

Infatti, utilizzando la formula di Newton:

ponendo

si dimostra che:

Combinazione lineare convessa Dalle due precedenti propriet si ha che

una combinazione lineare convessa dei valori dei suoi coefficienti, quindi:

Il numero di variazioni di segno di un polinomio espresso nella base di Bernstein minore o uguale al numero di variazioni di segno dei suoi coefficienti Questa propriet permette di avere un limite superiore per il numero degli zeri semplici per il polinomio in [a, b]. Approssimazione uniforme di un polinomio ad una funzione Si consideri una partizione uniforme dellintervallo [a, b], cio lespressione dellapprossimazione di Bernstein di grado n definita come: e si consideri

possibile dimostrare che ; infatti una combinazione lineare convessa dei valori di nei punti dellintervallo, pertanto i suoi valori sono compresi tra il pi piccolo dei valori di ed il pi grande dei valori di .

Interpretazione geometrica dei coefficienti di un polinomio nella base di Bernstein


Sia dato un polinomio espresso nella base di Bernstein:

Si considerino le coppie nome di poligono di controllo.

con

. La spezzata che passa per i punti

prende il

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it I valori di

A.A. 2013/2014
Pag. 58/83
Ultimo aggiornamento: 26/03/2014 02:00

possono essere considerati come la valutazione di una funzioni lineare spezzata nei punti

Dalla propriet di approssimazione segue che il polinomio

Espresso nella base di Bernstein approssima il poligono di controllo.

Inviluppo convesso
Definizione Assegnati i punti si definisce inviluppo convesso dellinsieme dei punti gli insiemi convessi contenenti i lintersezione di tutti

Il grafico del poligono espresso nella base di Bern stein contenuto nellinviluppo convesso dellinsieme dei vertici del suo poligono di controllo. Propriet dellapprossimazione di forma Il numero di intersezioni di una qualsiasi retta con il poligono di controllo maggiore del numero di intersezioni della stessa retta con il polinomio. Queste propriet geometriche sono di fondamentale importanza per gli algoritmi che utilizzano le curve nella forma di Bezier in cui le componenti parametriche sono espresse nella base di Bernstein. Dati i vertici di controllo:

la curva di Bezier di grado n si esprime come:

Valutazione di un polinomio nella base di Bernstein e algoritmo di De Casteljau La valutazione, in un punto , di un polinomio di grado n espresso nella base monomiale, pu essere effettuata in modo efficiente facendo uso dello schema di Horner, che ha complessit computazionale dellordine di O(n) ed numericamente stabile. Lalgoritmo di De Casteljau rappresenta lanalogo per un polinomio espresso nella base di Bernstein: consiste nellapplicare ripetutamente le formule ricorsive viste per i polinomi della base di Bernstei n. La valutazione in un punto t consiste nella valutazione:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Dalle propriet dei polinomi di base di Bernstein, ogni polinomio lineare convessa di due polinomi di base di Bernstein di grado n-1: considerando che ponendo si ha si ha

A.A. 2013/2014
Pag. 59/83
Ultimo aggiornamento: 26/03/2014 02:00

esprimibile come combinazione

Ora, applicando n-1 volte la formula ricorrente si calcolano successivamente i coefficienti:

Si osservi che ogni volta che viene applicata la formula ricorsiva si perde un elemento della base, diminuisce il grado ma anche il numero degli elementi. Al passo j-esimo si ha: Quando j=n si ottiene:

Lalgoritmo di De Casteljau non fa uso delle funzioni base: ad ogni passo calcola una combinazione convessa dei coefficienti al passo precedente. computazionalmente valido sia perch elimina il problema di passare attraverso le funzioni base, sia perch permette di calcolare ciascuna nuova grandezza come combinazione convessa di due grandezze precedenti, mantenendo stabile lalgoritmo. Pu essere schematizzato come segue:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 60/83
Ultimo aggiornamento: 26/03/2014 02:00

La valutazione di un polinomio nella base di Bernstein con questo algoritmo ha un costo computazionale di somme e moltiplicazioni. La maggiore complessit computazionale O(n2/2) rispetto a quella dello schema di Horner pari a O(n) compensata da una maggiore stabilit numerica ovvero ad una minore sensibilit ad eventuali perturbazioni sui coefficienti rispetto agli algoritmi che utilizzano la base delle potenze. Interpretazione geometrica dellalgoritmo di De Casteljaue per curve di Bezier

al primo passo, i punti si trovano rispettivamente sul primo, secondo, n-esimo lato del poligono di controllo, infatti la formula mostra che si trova sul segmento che unisce e in una posizione che dipende dai dati. La stessa cose vale ad ogni passo. Propriet dellalgoritmo di De Casteljau Lalgoritmo di De Casteljau: 1. numericamente stabile: si eseguono solo somme e moltiplicazioni per coefficienti positivi. 2. invariante per trasformazioni affini, pertanto invece di valutare una curva e poi applicare una trasformazione, si pu applicare la trasformazione affine ai punti di controllo e poi applicare lalgoritmo 3. fornisce un metodo semplice per suddividere curve di Bezier: infatti il punto in cui si valuta la curva, rappresenta un punto di suddivisione della curva in dur curve di Bezier: una per e una per . I punti di controllo delle due nuove curve si trovano rispettivamente nella prima colonna e sulla diagonale della tabella dellalgoritmo di De Casteljau:
Punti di controllo del secondo segmento di curva di Bezier

Punti di controllo del primo segmento di


curva di Bezier

Le due curve che si raccordano in

fino alla derivata n-esima sono espresse da:

Se il procedimento di suddivisione iterato, cio se ogni segmento di curva viene suddiviso a sua volta, si ottiene che la successione dei poligoni di controllo dei vari segmenti di curva ottenuti converge velocemente alla curva originale di Bezier, alladdensarsi dei punti di suddivisione allinterno dellintervallo parametrico. Il metodo delle suddivisioni ripetute spesso utilizzato per rendere la curva graficamente, sostituendo la curva teorica con linsieme dei punti di controllo dei vari segmenti.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 61/83
Ultimo aggiornamento: 26/03/2014 02:00

Elevamento di grado di un polinomio nella base di Bernstein (Degree Elevation) Esistono situazioni nelle quali necessario esprimere un polinomio di grado n come un polinomio di grado n+1, per esempio nel caso in cui si debbano sommare due polinomi di grado diverso. Nel caso in cui il polinomio espresso nella base monomiale, tale operazione risulta essere semplice, viceversa utilizzando la base di Bernstein, tale passaggio non risulta essere immediato. Se e allora non possibile sommare direttamente questi due polinomi, non neppure possibile raccogliere le funzioni base e sommare i coefficienti perch hanno grado diverso. Bisognerebbe passare alla forma nella base monomiale e poi fare la somma. possibile per anche elevare di grado il polinomio , ovvero esprimerlo nella base . Loperazione di degree elevation permette di esprimere un polinomio di grado n come un polinomio di grado n+1, sempre nella base di Bernstein. Essa consiste nellindividuare i coefficienti del polinomio di grado superiore conoscendo i coefficienti del polinomio da elevare di grado:

I coefficienti nella nuova base devono essere tali che:

Allora:

Estendendo la prima sommatoria per sommatoria per , si ha:

, ponendo

ed esprimendo la seconda

Variando la seconda sommatoria per

, ponendo

, si ha:

A questo punto, ricordando che il polinomio in grado n+1 :

Affinch si abbia

deve accadere che:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 62/83
Ultimo aggiornamento: 26/03/2014 02:00

ovvero:

da cui:

e ) sono ottenuti

In conclusione, i nuovi coefficienti (che si trovano sul segmento che unisce interpolando linearmente i vecchi coefficienti per il valore del parametro .

Si osservi che la formula che fornisce i nuovi coefficienti altro non che una combinazione convessa dei vecchi coefficienti. Si ha che il nuovo poligono di controllo interno allinviluppo convesso dei nuovi coefficienti. Il poligono di controllo aumentato di grado pi vicino al grafico del polinomio. Il processo di elevamento pu essere iterato ottenendo una successione di poligoni di controllo che, si dimostra, converge al polinomio medesimo. Tale convergenza per troppo lenta per poter essere utilizzata a scopi pratici. Riduzione di grado di un polinomio nella base di Bernstein Generalmente scrivere un polinomio di grado n+1 come un polinomio di grado n, non unoperazione esatta. Solo nel caso in cui di grado n+1 sia stato ottenuto come elevamento di grado possibile ottenere i coefficienti dai coefficienti : Derivata prima di un polinomio nella base di Bernstein La derivata di un elemento della base di Bernstein :

Osservando che:

Si ha:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Per definizione:

A.A. 2013/2014
Pag. 63/83
Ultimo aggiornamento: 26/03/2014 02:00

Allora:

Tale espressione evidenzia il fatto che il polinomio di Bernstein tangente negli estremi al segmento che unisce i primi due punto e gli ultimi due punti di controllo rispettivamente.

Se

, nella prima sommatoria

. Se

, nella prima sommatoria

. Quindi:

Infine, ponendo

, si ha:

Cambiamento di base Come gi detto, lalgoritmo di De Casteljau ha una complessit maggiore rispetto allo schema di Horner per la valutazione di un polinomio. Per questa ragione (oltre alla fatto che a volte necessario passare dalla base di Bernstein alla base monomiale e viceversa) si utilizza la matrice di cambiamento di base. Tale matrice, che permette di passare dalla base dei polinomi di Bernstein di grado n alla base monomiale di grado n, la matrice di ordine n+1, i cui elementi sono dati da:

La matrice di cambiamento di base che permette di passare dalla base monomiale di grado n alla base dei polinomi di Bernstein di grado n la matrice -1 di ordine n+1, i cui elementi sono dati da:

Si pu dimostrare che ogni monomio

pu essere espresso nella forma

E viceversa, ogni polinomio di Bernstein si pu scrivere nella forma:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Esempio (n=2)

A.A. 2013/2014
Pag. 64/83
Ultimo aggiornamento: 26/03/2014 02:00

la matrice che fa passare dalla base di Bernstein alla base monomiale, mentre la matrice

Fa passare dalla base monomiale alla base di Bernstein. Per quanto riguarda i coefficienti si ha:

Siccome:

Allora: Esempio Sia e

, la matrice di cambiamento di base

quindi il polinomio

espresso nella base di Bernstein avr, per coefficienti:

Pertanto, si passa dai coefficienti di una rappresentazioni ai coefficienti dellaltra semplicemente moltiplicandoli per la matrice di cambiamento di base. Osservazione: il primo e lultimo coefficiente nella base di Bernstein sono esattamente il valore che nella base monomiale assume in 0 ed in 1.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 65/83
Ultimo aggiornamento: 26/03/2014 02:00

Nota: poich la valutazione di un polinomio nella base di Bernstein computazionalmente pi costosa rispetto alla valutazione di un polinomio nella base monomiale utilizzando lo schema di Horner, per polinomi di grado basso di cui si devono effettuare molte valutazioni pu essere conveniente effettuare una conversione di base e procedere con lo schema di Horner. Tale procedimento sconsigliato per polinomi di grado maggiore o uguale a 4 per ragioni di stabilit.

Propriet delle curve di Bezier


1. Il grado di polinomi Bernstein che parametrizzano la curva sempre dato dal numero di punti di controllo meno 1 (n+1 punti di controllo determinano polinomi di grado n). Questo uno strumento che permette flessibilit in quanto possibile aumentare i gradi di libert della curva aumentando il numero dei punti di controllo; tuttavia allaumentare dei nodi di controllo aumenta il grado dei polinomi e, conseguentemente, la complessit computazionale O(n2/2). 2. La curva segue la forma del poligono di controllo e si trova sempre nellinviluppo convesso dei punti di controllo. 3. Il primo e lultimo punto di controllo sono linizio e la fine della curva e vengono interpolati. 4. I vettori tangenti alla curva nel primo e nellultimo punto coincidono con il primo e lultimo lato del poligono di controllo. 5. Le intersezioni della curva con una retta sono sempre in numero minore o, al massimo, uguale a quelle che la retta ha con il poligono di controllo (variation diminishig) 6. Le curve di Bezier sono invarianti per trasformazioni affini. La curva trasformata applicando una qualunque trasformazione affine ai suoi punti di controllo.

Svantaggi delle curve di Bezier


Esistono alcuni difetti che rendono le curve di Bezier non del tutto adatte alla modellazione: 1. I vertici di controllo non permettono di effettuare un controllo locale della curva. Infatti, muovendo un qualunque vertice di controllo si ottiene un effetto su tutta la curva, anche se esso meno evidente nelle zone lontane dal punto che si spostato. Questo perch i polinomi di base di Bernstein sono diversi da zero su tutto lintervallo. 2. La relazione tra il numero dei vertici di controllo e il grado della curva obbligata. Per ovviare a questo problema possibile utilizzare pi segmenti di curve di Bezier di grado basso (n=3) nel caso si abbia un elevato numero di vertici di controllo. Tuttavia deve essere considerato il problema della continuit globale: la curva globale potr essere G0 se solo il punto di raccordo in comune, se il punto precedente e quello seguente sono allineati allora la curva potr essere G1. Per ottenere questo risultato si perdono per gradi di libert.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 66/83
Ultimo aggiornamento: 26/03/2014 02:00

Curve Spline polinomiali di ordine m a nodi multipli


In analisi matematica, una spline una funzione, costituita da un insieme di polinomi raccordati tra loro, il cui scopo interpolare in un intervallo un insieme di punti (detti nodi della spline), in modo da essere continua (almeno fino ad un dato ordine di derivate) in ogni punto dell'intervallo. Le Spline polinomiali a nodi semplici sono funzioni che presentano la massima regolarit per essere polinomiali a tratti. Tale massima regolarit di classe Cm-2 , a volte, troppo elevata per permettere alla funzione spline di seguire bene landamento di dati che presentino un comportamento in parte molto regolare, in parte meno regolare. importante allora aggiungere gradi di libert alla spline, riducendo alloccasione le condizioni di raccordo sulle derivate, introducendo il concetto di nodi multipli.

Spline polinomiali a nodi multipli


Definizione Sia [a, b] un intervallo chiuso e limitato sia una partizione di [a, b] cos definita: che induce una partizione di [a, b] in k+1 sottointervalli:

Sia m un intero positivo e sia

un vettore di interi positivi tali che

Si definisce funzione spline polinomiale di ordine m con nodi di molteplicit , una funzione che in ciascun sottointervallo coincide con un polinomio di ordine m, e che nei nodi soddisfi le condizioni di continuit:

La differenza con le spline polinomiali a nodi semplici consiste nel fatto che possibile variare il tipo di raccordo in un nodo a seconda del valore . In base a questo valore si pu decidere sino a quale derivata effettuare il raccordo; maggiore sar la molteplicit, minori saranno le condizioni di raccordo sui nodi. Nota: se nodo i-esimo. Esempio Sia , se per un certo si ottiene una spline a nodi semplici. Se non si ottiene alcun raccordo nel

il nodo

semplice:

Se

il nodo

doppio

Se

il nodo

triplo

Man mano che aumenta la molteplicit dei nodi, si riducono le condizioni di raccordo nei nodi.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Teorema Lo spazio delle spline polinomiali di ordine m a nodi multipli con nodi , ha dimensioni pari a , dove . Dimostrazione intuitiva

A.A. 2013/2014
Pag. 67/83
Ultimo aggiornamento: 26/03/2014 02:00

di molteplicit

Per ciascuno dei sottointervalli, il polinomio di ordine m ha m gradi di libert, si hanno quindi gradi di libert; a questi si devono sottrarre le condizioni di raccordo imposte su ogni nodo . Si ha:

Nel caso in cui dimensione

e quindi: .

, si ricade nelle spline polinomiali a nodi semplici di

Funzione B-Spline normalizzate


In analogia con il caso di nodi semplici, si osserva come ogni spline polinomiale a nodi multipli possa essere espressa come:

Partizione nodale estesa Per poter costruire tutte le B-spline normalizzate che costituiscono la base per necessario costruire una partizione nodale estesa con . Nel caso di nodi multipli la si costruisce nel seguente modo: a) b) c) i nuovi nodi sono semplici, ma possono coincidere sono scelti in modo tale che siano coincidenti con:

d) I punti vengono anche chiamati break points.

Una volta costruita la partizione nodale estesa, linsieme delle B -spline normalizzate viene definito mediante la seguente formula ricorrente:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 68/83
Ultimo aggiornamento: 26/03/2014 02:00

Propriet delle funzioni B-Spline con nodi multipli normalizzate


Formano una base per lo spazio Ciascuna pu essere espressa come: Per la propriet di supporto compatto delle B-Spline, se , si ha:

Sono non negative sul loro supporto Costituiscono una partizione dellunit

Dalle ultime due propriet, si ha che la spline una combinazione lineare convessa dei coefficienti , quindi compreso tra il minimo e il massimo coefficiente:

Inoltre si ha controllo locale: per la propriet di supporto compatto delle B-spline, la valutazione del polinomio in un punto si riduce a:

In quanto le uniche B-spline diverse da 0 su un punto

sono

Si cha che:

Propriet di variation diminishing Sia e sia rappresentata nella nase delle B-spline normalizzate: Si ha che il numero di variazioni di segno della funzione spline minore uguale al numero di variazioni di segno dei coefficienti.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 69/83
Ultimo aggiornamento: 26/03/2014 02:00

Curve B-Spline
Dati i vertici di controllo per definire una curva B-Spline necessario: Fissare lordine delle B-Spline normalizzate Fissare lintervallo [a, b] Fissare il numero e la molteplicit dei break points e, conseguentemente, la partizione nodale estesa deve essere uguale al numero dei vertici ci controllo N, cio .

La dimensione dello spazio

La curva B-Spline si esprime come: Lutilizzo delle B-Spline normalizzate risulta essere pi complesso, tuttavia anche pi flessibile rispetto alluso dei polinomi di Bernstein: infatti se per definire una curva di Bezier, una volta fissati i vertici di controllo rimane fissato anche il grado dei polinomi di base di Bernstein, nel caso delle curve spline ci sono maggiori gradi di libert.

Valutazione di una funzione spline


Si visto che, assegnata la partizione nodale estesa , una pu essere espressa come:

Se

, allora si ha:

Esistono due algoritmi per valutare

in un punto. :

Il primo algoritmo calcola le funzioni base diverse da zero sul punto

..

Un buon algoritmo per valutare tutte le funzioni base B-Spline normalizzate di ordine m diverse da zero in un punto, ha complessit:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 70/83
Ultimo aggiornamento: 26/03/2014 02:00

Il secondo algoritmo, proposto da De Boor, lanalogo, per le funzioni B -Spline, dellalgoritmo di De Casteljau per i polinomi in forma di Bernstein: si ottiene sostituendo, di volta in volta, alle B-Spline di ordine m la combinazione di due B-Spline di ordine inferiore, come stabilito dalle formule ricorrenti.

Osservando che le funzioni di base di ordine diverse da 0 sullintervallo sono quelle che hanno indice che va da fino a , si pu estendere la prima sommatoria a partire da fino a . Inoltre si pu estendere la seconda sommatoria da fino a sostituendo alle occorrenze di e tenendo conto che per la funzione base nulla:

Ora, ponendo

Si ha:

La B-Spline ottenute di ordine ; iterando il procedimento volte si ottiene il valore della B-Spline in un punto in termini di una funzione base di ordine 1, cio in termini di un solo coefficiente:

Si ottenuto pertanto che il valore della B-Spline calcolato in quello di una B-Spline di ordine uno per un opportuno coefficiente. Lo schema che si ottiene il seguente:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Ovvero:

A.A. 2013/2014
Pag. 71/83
Ultimo aggiornamento: 26/03/2014 02:00

La complessit computazionale

possibile, come con lalgoritmo di De Casteljau, valutare la curva in un punto mediante una combinazione dei coefficienti. Diversamente dallalgoritmo per le curve di Bezier, che lavorano su tutti i coefficienti, il corrispettivo algoritmo per le B-Spline lavora solo con i coefficienti definiti nel supporto grazie alle propriet delle funzioni base, che sono a supporto compatto, e permettendo di superare il grande problema delle curve di Bezier per cui non sono consentite modifiche a livello locale.

Algoritmo di inserimento di un nuovo nodo in una partizione nodale gi esistente (Knot Insertion)
Considerando, ad esempio, due curve B-Spline cubiche: non risulta possibile sommarle direttamente, pur essendo entrambe cubiche. Si vuole allora esprimere come una B-Spline che abbia gli stessi nodi dello spazio cui appartiene . Per farlo si inserisce un nodo nella rappresentazione di in corrispondenza della posizione 2/4; in questo modo i due spazi hanno lo stesso grado di libert e diventa possibile sommare le due curve. Una volta inserito il nodo cambiano: Le funzioni base di I coefficienti di . che diventano uguali a quelle di

In linea generale, considerando una partizione nodale estesa , si vuole individuare il tipo di relazione che intercorre tra essa e quella che si ottiene aggiungendo il nodo . La nuova partizione nodale definita come:

possibile inserire il nuovo nodo dove si vuole, anche in corrispondenza di un altro nodo gi esistente (in tal caso si aumenta la molteplicit di quel nodo). Si vuole allora studiare la relazione tra le funzioni base funzioni base , dello spazio iniziale. del nuovo spazio, e le

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 72/83
Ultimo aggiornamento: 26/03/2014 02:00

Per la caratteristica di localizzazione delle funzioni base si ha che non cambiano tutte: tra esse esiste la seguente relazione:

Si vogliono ora individuare i coefficienti

tali che sia:

Utilizzando la relazione tra le funzioni base si ha:

I valori sono tutti compresi tra 0 e 1, quindi i risulta stabile.

sono una combinazione convessa dei

e il loro calcolo

Lalgoritmo di Knot Insertion per B -Spline lanalogo dellalgoritmo di degree elevation per cuver di Bezier ; la differenza la localizzazione in quanto solo i coefficienti dai fino a sono modificati per linserimento di un nodo nellintervallo . Lalgoritmo di Knot Insertion pu essere utilizzato ripetutamente per ottenere la valutazione di una funzione spline in un punto: infatti se un nodo ha molteplicit , solo una funzione base diversa da 0 e quel nodo vale 1, quindi il coefficiente unico d anche il valore della B-Spline in quel punto. Si parte allora dallinserimento di un nodo nel punto dove si vuole valutare la B-Spline, ottenendo:

Si procede inserendo un secondo nodo in , e si ottiene:

E si procede fino ad

inserimenti:

Ora, tenendo conto che man mano che aumenta la molteplicit di un nodo diminuisce il numero di funzioni base diverse da zero in quel punto, si ottiene la riduzione:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 73/83
Ultimo aggiornamento: 26/03/2014 02:00

La valutazione di una B-Spline in un punto mediante linserimento di un nodo, coincidente con molteplicit , coincide con lalgoritmo di valutazione di De Boor.

di

Questo algoritmo pu essere utilizzato anche per la suddivisione di funzione B-Spline in due funzioni: una definita su e laltra definita su : Lunica differenza che Osservazioni: Inserendo un nodo nella partizione nodale, vengono modificate le funzioni base e viene quindi modificata la base dello spazio vettoriale, tuttavia la curva non cambia; in altri termini: modificando la partizione nodale con linserimento, la modellazione non cambia. Linserimento dei nodi la procedura base dellalgoritmo geometrico di De Boor per il disegno di una curva B-Spline. Per ottenere un punto sulla curva necessario inserire un noto un numero di volte pari al grado delle funzioni base. deve avere molteplicit .

Algoritmo di Knot-Insertion (caso curve B-Spline) Sia

la curva spline di ordine Si inserisce un nodo

definita sulla partizione nodale estesa

. .

ottenendo una nuova partizione nodale estesa:

La curva, rispetto a questa nuova partizione nodale estesa diventa:

Inserendo un nodo nella partizione nodale estesa, quindi, vengono modificate le funzioni base dello spazio vettoriale, la curva non cambia: modificano la partizione nodale estesa con linserimento non cambia la modellazione; cambia per il poligono di controllo. I coefficienti rappresentano i vertici del nuovo poligono di controllo; la modifica solo locale: il poligono cambia solo in parte. I punti di controllo che cambiano dipendono dal sottointervallo della partizione nodale estesa in cui viene inserito il nuovo nodo:

I valori di dipendono dal nodo che si vuole inserire e dallampiezza della partizione nodale; non dipendono dal sottointervallo .

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it Esempio 1

A.A. 2013/2014
Pag. 74/83
Ultimo aggiornamento: 26/03/2014 02:00

Esempio 2 Data una partizione nodale estesa ed un insieme di vertici di controllo

dando molteplicit 4 a ciascuno dei noti interni

si ottiene la suddivisione della curva in 4 curve di Bezier: la curva non cambia, cambiano solo la poligonale. In questo modo possibile applicare lalgoritmo di De Casteljau per valutare ogni pezzo della curva. Lalgoritmo di De Casteljau pi sempre dellalgoritmo di De Boor perch ogni uguale al valore del parametro per cui si valuta. Osservazione: inserendo i nodi nella modellazione permette di valutare la curva spezzare la curva avvicinare il poligono di controllo alla curva.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 75/83
Ultimo aggiornamento: 26/03/2014 02:00

Derivata prima della curva B-Spline


Siano allora la derivata prima della curva B-Spline si esprime nella seguente forma:

dove

allora

nella prima sommatoria, quando nella seconda sommatoria, quanto si ha che si ha che , allora:

Pertanto, la derivata prima di una curva B-Spline una curva B-Spline ottenuta come combinazione lineare delle funzioni base di ordine , i cui vertici di controllo sono dati dalla combinazione lineare dei vecchi vertici di controllo:

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 76/83
Ultimo aggiornamento: 26/03/2014 02:00

Propriet delle curve B-Spline


Le propriet delle curve B-Spline derivano dalle propriet delle funzioni spline che ne danno una rappresentazione parametrica. Il numero dei punti di controllo N, lordine della spline m e la somma delle molteplicit di ogni break point K, sono legati dalla relazione:

questo permette di poter lavorare con curve di ordine basso anche a fronte di un elevato numero di punti di controllo. In una curva spline si possono individuare delle parti, dette spans, che corrispondono a ciascun intervallo internodale; infatti, poich si ha che per

solo i punti di controllo Esempio

influenzano la curva nel valore del parametro .

Pertanto: la span controllo dipende solo dai punti di controllo ; la span dipende solo dai punti di controllo ; la span . dipende solo dai punti di

Quindi, un importante vantaggio delle B-Spline legato a questa propriet di controllo locale. Allo stesso modo, se si sposta un punto di controllo, la curva sar modificata solo relativamente nella spans in cui risiede il nodo.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 77/83
Ultimo aggiornamento: 26/03/2014 02:00

Le curve di Bezier sono un caso speciale delle curve B-Spline Se i punti di controllo sono e si considera una spline di ordine , poich deve valere la condizione , significa che non si possono avere nodi interni e quindi . Ne segue quindi che la partizione nodale estesa data da nodi coincidenti con il primo estremo dellintervallo e nodi coincidenti con il secondo estremo dellintervallo; pertanto la curva B -Spline di ordine coincide con la curva di Bezier di grado . Se i nodi aggiuntivi sono coincidenti con gli estremi dellintervallo, la curva B -Spline interpola il primo e lultimo punto di controllo Invarianza per trasformazioni affini Le curve B-Spline sono invarianti per trasformazioni affini. Pertanto se si deve traslare, ruotare o deformare una curva, sufficiente applicare la trasformazione solo ai punti di controllo e poi costruire la curva sui punti trasformati. La curva subir la trasformazione desiderata come se fosse stata applicata a tutti i suoi punti. Propriet forte del guscio convesso (strong convex hull property) Se allora

contenuta nellinviluppo convesso dei punti di controllo

Da questa propriet segue che se gli la curva coincide con una retta.

punti di controllo sono allineati, allora

Se

punti sono coincidenti, allora la curva passa per il punto multiplo.

Propriet di variation diminishing Il numero di intersezioni di una qualsiasi retta con il poligono di controllo maggiore del numero di intersezioni della stessa retta con una curva B-Spline.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 78/83
Ultimo aggiornamento: 26/03/2014 02:00

Il vantaggio di utilizzare Curve B-Spline


Le curve B-Spline richiedono pi informazioni (grado della curva, vettore dei break points e rispettive molteplicit) e una teoria pi complessa rispetto alle curve di Bezier. I vantaggi per compensano questi inconvenienti. 1. Una curva B-Spline pu essere una curva di Bezier 2. Le curve B-Spline soddisfano tutte le propriet importanti che hanno le curve di Bezier 3. Le curve B-Spline forniscono pi flessibilit di controllo rispetto a ci che possono fare le curve di Bezier: 3.1. Si possono utilizzare curve di grado pi basso mantenendo un grande numero di punti di controllo 3.2. Si pu cambiare la posizione di un punto senza cambiare globalmente la forma dell intera curva 3.3. Per la propriet strong convex hull, si ha un maggiore controllo della urva 3.4. Esistono, inoltre, altre tecniche per disegnare ed editare la forma di una curva cambiando i break points. Va per osservato che le curve B-Spline sono curve polinomiali e pertanto non sono possono rappresentare molte utili curve semplici come cerchi o elissi. Infine non godono dellinvarianza per trasformazioni proiettive. Pertanto, richiesta una generalizzazione delle B-Spling, NURBS.

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 79/83
Ultimo aggiornamento: 26/03/2014 02:00

Sommario
Introduzione ............................................................................................................................................................ 1 Computer Graphics (CS) ...................................................................................................................................... 1 Image Processing (IP) ........................................................................................................................................... 1 Computer Vision .................................................................................................................................................. 1 Pattern Recognition .............................................................................................................................................. 1 Schema di unapplicazione grafica ......................................................................................................................... 2 Ciclo di vita pixar ................................................................................................................................................. 2 Realt aumentata ................................................................................................................................................. 3 Interattivit vs Non interattivit .......................................................................................................................... 3 Il video controller ................................................................................................................................................. 3 Tecnologia vettoriale ........................................................................................................................................ 3 Tecnologia raster .............................................................................................................................................. 3 Monitor CRT ...................................................................................................................................................... 4 Monitor LCD ...................................................................................................................................................... 4 Monitor LED ...................................................................................................................................................... 5 Pipeline di rendering ........................................................................................................................................ 5 Programmazione grafica ..................................................................................................................................... 6 La pipeline di rendering .......................................................................................................................................... 7 Sottosistema geometrico ..................................................................................................................................... 7 Model and view transformation ....................................................................................................................... 7 Lighiting ............................................................................................................................................................ 7 Projecton ........................................................................................................................................................... 7 Clipping ............................................................................................................................................................. 7 Screen mapping ................................................................................................................................................ 7 Spazi di coordinate ........................................................................................................................................... 8 Entit geometriche ........................................................................................................................................... 8 Trasformazioni geometriche affini .................................................................................................................. 8 Trasformazioni geometriche nel piano ........................................................................................................... 8 Coordinate omogenee ...................................................................................................................................... 9 Trasformazioni di base in coordinate omogenee ........................................................................................ 10 Composizione di trasformazioni ................................................................................................................... 10 Trasformazione Window to viewport ............................................................................................................ 12 Trasformazioni 3D .......................................................................................................................................... 13 Il processo di vista in 3 dimensioni .............................................................................................................. 14 Le proiezioni ................................................................................................................................................... 14 I parametri della vista 3D ............................................................................................................................... 17 Definire i parametri di una vista sintetica .................................................................................................... 18 Sottosistema raster ............................................................................................................................................ 20 Algoritmi ......................................................................................................................................................... 20 Drawing ........................................................................................................................................................... 20 Algoritmo DDA (digital differential analyzer) ............................................................................................... 21 Algoritmo di Bresenham (midpoint) .............................................................................................................. 21 Algoritmo Midpoint per circonferenze o ellissi ............................................................................................ 23 Filling ............................................................................................................................................................... 24 Clipping ........................................................................................................................................................... 25 Antialiasing ..................................................................................................................................................... 28 OpenGL ................................................................................................................................................................... 30 Introduzione ....................................................................................................................................................... 30 Librerie GLU e GLUT ........................................................................................................................................... 30 Programmazione window-based ....................................................................................................................... 30 Alcune funzioni per la gestione della window ................................................................................................. 31

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 80/83
Ultimo aggiornamento: 26/03/2014 02:00

void glutInit(int *argcp, char **argv); ........................................................................................................... 31 void glutInitWindowSize(int width, int height); ............................................................................................ 31 void glutInitWindowPosition(int x, int y); ...................................................................................................... 31 void glutInitDisplayMode(unsigned int mode); ............................................................................................ 31 int glutCreateWindow(char *name); .............................................................................................................. 31 int glutCreateSubWindow(int win, int x, int y, int width, int height); ......................................................... 32 void glutSetWindow(int win); ......................................................................................................................... 32 int glutGetWindow(void); ............................................................................................................................... 32 void glutDestroyWindow(int win); ................................................................................................................. 32 void glutPositionWindow(int x, int y); ........................................................................................................... 32 void glutReshapeWindow(int width, int height); .......................................................................................... 32 void glutFullScreen(void); ............................................................................................................................... 32 void glutShowWindow(void); .......................................................................................................................... 32 void glutHideWindow(void); ........................................................................................................................... 32 void glutIconifyWindow(void); ....................................................................................................................... 32 void glutSetWindowTitle(char *name); .......................................................................................................... 32 void glutSetIconTitle(char *name); ................................................................................................................ 32 void glutSetCursor(int cursor); ...................................................................................................................... 32 Alcune funzioni per la gestione degli eventi ................................................................................................... 33 void glutDisplayFunc(void (*func)(void)); ...................................................................................................... 33 void glutReshapeFunc(void (*func)(int width, int height)); .......................................................................... 33 void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); ....................................................... 33 void glutSpecialFunc(void (*func)(int key, int x, int y)); ............................................................................... 33 void glutMouseFunc(void (*func)(int button, int state, int x, int y)); .......................................................... 33 void glutMotionFunc(void (*func)(int x, int y)); ............................................................................................ 33 void glutPassiveMotionFunc(void (*func)(int x, int y)); ................................................................................ 33 void glutIdleFunc(void (*func)(void)); ............................................................................................................ 33 void glutTimerFunc(unsigned int msecs, void (*func)(int value), value); ................................................... 33 void glutMainLoop(void); ............................................................................................................................... 33 Funzioni per la gestione dei menu ................................................................................................................... 34 int glutCreateMenu(void (*func)(int value)); ................................................................................................. 34 void glutSetMenu(int menu); ......................................................................................................................... 34 int glutGetMenu(void) .................................................................................................................................... 34 void glutDestroyMenu(int menu); .................................................................................................................. 34 void glutAddMenuEntry(char *name, int value); .......................................................................................... 34 void glutAddSubMenu(char *name, int menu); ............................................................................................ 34 void glutChangeToMenuEntry(int entry, char *name, int value); ................................................................ 34 void glutChangeToSubMenu(int entry, char *name, int menu); ................................................................. 34 void glutRemoveMenuItem(int entry); ........................................................................................................... 34 void glutAttachMenu(int button); .................................................................................................................. 34 void glutDetachMenu(int button); ................................................................................................................. 34 Funzioni per il testo ........................................................................................................................................... 34 void glutBitmapCharacter(void *font, int character); ................................................................................... 34 int glutBitmapWidth(GLUTbitmapFont font, int character) .......................................................................... 34 void glutStrokeCharacter(void *font, int character); .................................................................................... 34 int glutStrokeWidth(GLUTstrokeFont font, int character) ............................................................................ 35 Funzioni per il colore ......................................................................................................................................... 35 void glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); .............................................. 35 void glClear( GLbitfield mask); ................................................................................................................... 35 Funzioni per la definizione di coordinate ........................................................................................................ 35 void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); ............................... 35 void glMatrixMode(GLenum mode); .............................................................................................................. 35 void glLoadIdentity(void); .............................................................................................................................. 35

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 81/83
Ultimo aggiornamento: 26/03/2014 02:00

void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); ....................... 35 void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); ............................................................... 36 Funzioni primitive per il disegno ...................................................................................................................... 36 void glPointSize(GLfloat size); ....................................................................................................................... 36 void glVertex{D}{T}(GLType red, GLType green, GLType blue[, GLType alpha]]); ...................................... 36 void glBegin(GLenum mode); ......................................................................................................................... 36 void glVertex{D}{T}(GLType x, GLType y[, GLType z[, GLType w]]); ............................................................ 36 void glBegin(GLenum mode); ....................................................................................................................... 37 void glFlush(void); .......................................................................................................................................... 37 void glRect{T}(GLType x1, GLType y1, GLType x2, GLType y2); ..................................................................... 37 Struttura di un programma OpenGL ................................................................................................................. 37 Ovviamente possibile definire strutture per le coordinate dei vertici. ....................................................... 37 Pu essere utile definire una serie di funzioni. ............................................................................................... 37 Suggerimenti per i poligoni regolari e cerchi .................................................................................................. 37 Gestione del ridimensionamento della finestra ............................................................................................... 40 Tiling della finestra con un motivo ................................................................................................................... 40 Trasformazioni di modellazione ....................................................................................................................... 40 Librerie GLUI per linterfaccia grafica................................................................................................................... 41 Definizioni .......................................................................................................................................................... 41 Funzioni .............................................................................................................................................................. 41 Rappresentazione di curve mediante spline polinomiali di ordine m a nodi semplici .................................... 44 Curve 2D ............................................................................................................................................................. 44 Esempi di curve in forma parametrica .......................................................................................................... 44 Rappresentazione nel calcolatore ................................................................................................................. 44 Funzioni spline polinomiali a nodi semplici .................................................................................................... 45 Definizione 1.1: spline polinomiale a nodi semplici.................................................................................... 45 Teorema: la dimensione dello spazio delle spline m+k ................................................................ 45 Definizione 1.2: Funzione base B-spline ...................................................................................................... 45 Formule di Cox per la valutazione di una B-spline ...................................................................................... 45 Partizione nodale estesa ................................................................................................................................ 46 Risultato importante....................................................................................................................................... 46 Propriet delle B-spline .................................................................................................................................. 46 Propriet delle spline valutate mediante B-spline ........................................................................................ 46 Propriet di variation diminishing di una spline espressa s(x) nella base delle B-spline normalizzate .. 47 Interpolazione mediante funzioni spline polinomiali a nodi semplici ....................................................... 47 Teorema di Schoemberg Whitney .................................................................................................................. 47 Condizione di spline cubica naturale ............................................................................................................ 48 Condizione sulla derivata prima.................................................................................................................... 48 Condizione sulla derivata seconda ............................................................................................................... 48 Condizione di periodicit ............................................................................................................................... 48 Propriet di convergenza delle funzioni spline di interpolazione .............................................................. 49 Curve spline interpolanti................................................................................................................................ 49 Parametrizzazione ............................................................................................................................................. 50 Parametrizzazione uniforme ......................................................................................................................... 50 Parametrizzazione mediante corda............................................................................................................... 50 Parametrizzazione di Foley ......................................................................................................................... 50 Parametrizzazione centripeta ........................................................................................................................ 50 Regolarit della curva ..................................................................................................................................... 51 Interpolazione di classe C1.................................................................................................................................... 52 Funzioni base di Hermite .................................................................................................................................. 52 Polinomio interpolatore di Hermite .................................................................................................................. 52 Metodi numerici per il calcolo delle derivate ................................................................................................... 53 Shape preserving ................................................................................................................................................ 53

Metodi numerici per la grafica (13209)


Prof.ssa Damiana Lazzaro damiana.lazzaro@unibo.it Appunti di Nicola Gentili nicola.gentili2@studio.unibo.it

A.A. 2013/2014
Pag. 82/83
Ultimo aggiornamento: 26/03/2014 02:00

Curve interpolanti di Hermite............................................................................................................................ 54 Curve di Bezier ....................................................................................................................................................... 54 Propriet dei polinomi di Bernstein di grado n ................................................................................................ 56 Ricorsivit ........................................................................................................................................................ 56 Non negativit................................................................................................................................................. 57 I polinomi di Bernstein formano una partizioni dellunit .......................................................................... 57 Combinazione lineare convessa .................................................................................................................... 57 Il numero di variazioni di segno di un polinomio espresso nella base di Bernstein minore o uguale al numero di variazioni di segno dei suoi coefficienti ..................................................................................... 57 Approssimazione uniforme di un polinomio ad una funzione ................................................................... 57 Interpretazione geometrica dei coefficienti di un polinomio nella base di Bernstein .................................. 57 Inviluppo convesso ............................................................................................................................................ 58 Definizione ...................................................................................................................................................... 58 Propriet dellapprossimazione di forma ..................................................................................................... 58 Valutazione di un polinomio nella base di Bernstein e algoritmo di De Casteljau ................................... 58 Interpretazione geometrica dellalgoritmo di De Casteljaue per curve di Bezier ...................................... 60 Propriet dellalgoritmo di De Casteljau ....................................................................................................... 60 Elevamento di grado di un polinomio nella base di Bernstein (Degree Elevation) .................................... 61 Riduzione di grado di un polinomio nella base di Bernstein ...................................................................... 62 Derivata prima di un polinomio nella base di Bernstein ............................................................................. 62 Cambiamento di base .................................................................................................................................... 63 Esempio (n=2) ................................................................................................................................................. 64 Esempio ........................................................................................................................................................... 64 Propriet delle curve di Bezier .......................................................................................................................... 65 Svantaggi delle curve di Bezier ......................................................................................................................... 65 Curve Spline polinomiali di ordine m a nodi multipli ......................................................................................... 66 Spline polinomiali a nodi multipli ..................................................................................................................... 66 Funzione B-Spline normalizzate ........................................................................................................................ 67 Partizione nodale estesa ................................................................................................................................ 67 Propriet delle funzioni B-Spline con nodi multipli normalizzate .................................................................. 68 Formano una base per lo spazio ....................................................................................................... 68 Sono non negative sul loro supporto ............................................................................................................ 68 Costituiscono una partizione dellunit ........................................................................................................ 68 Propriet di variation diminishing ................................................................................................................ 68 Curve B-Spline..................................................................................................................................................... 69 Valutazione di una funzione spline .................................................................................................................. 69 Algoritmo di inserimento di un nuovo nodo in una partizione nodale gi esistente (Knot Insertion) ........ 71 Algoritmo di Knot-Insertion (caso curve B-Spline) ....................................................................................... 73 Esempio 1........................................................................................................................................................ 74 Esempio 2........................................................................................................................................................ 74 Derivata prima della curva B-Spline .................................................................................................................. 75 Propriet delle curve B-Spline ............................................................................................................................ 76 Esempio ........................................................................................................................................................... 76 Le curve di Bezier sono un caso speciale delle curve B-Spline .................................................................... 77 Se i nodi aggiuntivi sono coincidenti con gli estremi dellintervallo, la curva B -Spline interpola il primo e lultimo punto di controllo ............................................................................................................................. 77 Invarianza per trasformazioni affini .............................................................................................................. 77 Propriet forte del guscio convesso (strong convex hull property)............................................................ 77 Propriet di variation diminishing ................................................................................................................. 77 Il vantaggio di utilizzare Curve B-Spline ........................................................................................................... 78