Corso di Grafica Computazionale

Documenti analoghi
Grafica Computazionale

Grafica Computazionale

Corso di Grafica Computazionale

Introduzione SOMMARIO

Computer Graphics. Realtà Virtuale: il presente, il passato, 3D il Graphics futuro

Texture. Tessitura si può considerare come il ves$to dei nostri ogge7 3D. Si tra;a di un array di pixel che vengono adagia?

Cenni al rendering di ombre

INFORMATICA GRAFICA!

Cenni al rendering di ombre

Corso di grafica 3D con C++ e OpenGL. Alessandro Bugatti ITIS B. Castelli

Introduzione. Costruzione di Interfacce Primi passi in OpenGL. Sierpinski Gasket. Sierpinski gasket. Event driven programming. Stuttura del programma

Principi elementari di illuminazione

Open Source 3D Engine. OpenGL Rendering System. Il Framework

Bump Mapping & Under-Water Effects. Dott. Stefano Tubini

BLENDER LEZIONI DI LABORATORIO

Introduzione al Many/Multi-core Computing

INFORMATICA GRAFICA. 5 Maggio Interattività. Michele Antolini

Grafica al calcolatore - Computer Graphics

Strutture dati e loro organizzazione. Gabriella Trucco

OpenGL: visualizzazione 3D

UNIVERSITÀ DEGLI STUDI DI PAVIA Facoltà di Ingegneria Dipartimento di Ingegneria Industriale e dell Informazione

Le ombre in OpenGl. Daniele Varin LS Ing. Informatica Corso di Elementi di Grafica Digitale

INFORMATICA GRAFICA. 20 Aprile Introduzione a OpenGL. Michele Antolini michele.antolini@mail.polimi.it

Colori e Illuminazione

Costruzione di Interfacce Lezione 4 Sistemi di riferimento e trasformazioni. cignoni@iei.pi.cnr.it

Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht. Alessandro Bugatti ITIS B. Castelli

La composizione di isometrie

DEFINIZIONE Un vettore (libero) è un ente geometrico rappresentato da un segmento orientato caratterizzato da tre parametri:

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Progettazione Multimediale REGOLE DI COMPOSIZIONE GRAFICA. Parte 3. Lo spazio. Prof. Gianfranco Ciaschetti

Grafica al calcolatore - Computer Graphics

Caveat. Sintesi di Immagini. Sintesi di Immagini. Rendering: Approccio Fisico

Cineprese e luci. Cineprese. Informatica Grafica ][ Cineprese. Cineprese. Cineprese. Cineprese

Primi passi col linguaggio C

Grafica al calcolatore - Computer Graphics

Strumento di impostazione dello spegnimento automatico

Modelli MilkShape 3D e OpenGL ES

Introduzione alla Computer Graphics

Informatica Grafica. Prof. Massimiliano Dellisanti Fabiano Vilardi. (2a parte) a.a. 2011/2012

Capitolo 6 Interazione luce-materia

INFORMATICA GRAFICA!

OpenGL: Textures & Models collection di Federico NinjaCross Coletto

1. Il formato obj. Tipo di dato Keyword Descrizione. Coordinate texture Direzione delle normali Punto Elementi grafici

High Dynamic Range Rendering in OpenGL

C C B B. Fig. C4.1 Isometria.

Modelli per i materiali

Vettori e geometria analitica in R 3 1 / 25

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Università degi studi di Bergamo Facoltà di Ingegneria. Progettazione Funzionale di Sistemi Meccanici e Meccatronici Prof.

Si consideri il sistema a coefficienti reali di m equazioni lineari in n incognite

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

1 La traslazione. 2 La composizione di traslazioni. 3 La rotazione

Introduzione a API e game engine per la programmazione grafica

Progettazione e realizzazione di un editor grafico per il rendering di scene tridimensionali mediante OpenGL

Abilità Informatiche. Lezione II. Creazione di modelli 3D. arch. Gabriella Rendina

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

teoria delle ombre - generalità 12corso tecniche di rappresentazione dello spazio docente Arch. Emilio Di Gristina

PRESENTAZIONI VECTORWORKS: LUCI

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Scuola Politecnica - DICGIM ANNO ACCADEMICO CORSO DI LAUREA MAGISTRALE Ingegneria Informatica INSEGNAMENTO

Esercizi Riepilogativi Svolti. = 1 = Or(v, w)

Codifica. Rappresentazione di numeri in memoria

Grafica computazionale

Architettura degli elaboratori Docente:

Array multidimensionali e stringhe

Modelli di illuminazione

Caratteristiche dei linguaggi per Database

Informatica Grafica. Un introduzione

SketchUp. Al termine del percorso formativo verrà rilasciato un ATTESTATO DI FREQUENZA. Verranno rilasciati 16 CFP ai geometri.

FONDAMENTI DI ALGEBRA LINEARE E GEOMETRIA

Grafica computazionale Lezione 2

Linguaggio C: le funzioni. Introduzione e sintassi

Rappresentazione di Numeri Reali. Rappresentazione in virgola fissa (fixed-point) Rappresentazione in virgola fissa (fixed-point)

Grafica al Calcolatore Fotorealismo - 1. Introduzione

I sistemi di numerazione. Informatica - Classe 3ª, Modulo 1

GESTIRE LA FORMA CON LA MODELLAZIONE PER SUPERFICI. Progettare con Rhinoceros V4.

Proiezione Stereoscopica

Sviluppo di un ambiente software per la visualizzazione multiplanare di immagini biomedicali

CORSO DI DISEGNO TECNICO EDILE LEZIONE 2 TEORIA DELLE OMBRE

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Corso di Access. Modulo L2 A (Access) 1.4 Le maschere

Informatica Grafica. (III anno Laurea Triennale - Corso di Laurea in Informatica) Donato D Ambrosio

Geometria BIAR Esercizi 2

EQUAZIONE DELLA RETTA

Corso di INFORMATICA GRAFICA. Modulo 2 (CAD) Stefano Cinti Luciani. Altre applicazioni informatiche per la progettazione

Funzioni reali di variabile reale

Macchine combinatorie: encoder/decoder e multiplexer/demultiplexer

MODULO DI DISEGNO C.D.L. INGEGNERIA CIVILE, AMBIENTALE E EDILE

SISTEMI LINEARI: APPROFONDIMENTI ED ESEMPI

Pipeline di rendering. Pipeline di rendering. Outline. Grafica off-line vs Grafica real-time

Rappresentazione dell Informazione

Fondamenti di Informatica T1 Mappe

CORSO BASE DI AUTOCAD

Gestione di files Motivazioni

perror: individuare l errore quando una system call restituisce -1

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Grafica al calcolatore - Computer Graphics

L2 Operazioni su buffer di memoria. Corso di Visione Artificiale A.A. 2016/2017

Transcript:

Corso di Grafica Computazionale OpenGL Docente: Massimiliano Corsini Laurea Specialistica in Informatica Università degli Studi di Siena

Introduzione Open Graphics Language Libreria C Cross-platform Qualche centinaio di routines Specifiche definite dall ARB Sito di riferimento: www.opengl.org 2

Breve Storia Inizialmente sviluppato da Silicon Graphics Ora: OpenGL Architecture Review Board mantiene e aggiorna le specifiche versione attuale: 3.0 una compagnia, un voto ARB Ci sono anche le estensioni private Soprattutto e... 3

GLU e GLUT OpenGL è il layer di base GLU (GL Utilites) insieme di funzioni di utility costruite sopra OpenGL, piu comode da usare esempio void glulookat(eyex,eyey,eyez, cx,cy,cz, upx, upy, upz); GLUT e il Toolkit di interfaccia con il SO Wgl e GLx sono i sottoinsiemi di OpenGL che dipendono dal SO 4

Sintassi Tutte le funzioni di OpenGL hanno la sintassi tipo: glfunctionxxx XXX specifica il tipo dei parametri Esempio: glcolor3f(float, float, float); glcolor3fv(float*); f: float d: double v: vettore b: byte i: integer ecc Non e C++ 5

Macchina a Stati L OpenGL funziona come una macchina a stati: colore corrente posizione luci Matrici di trasformazione fanno parte dello stato corrente Molti comandi OpenGL modificano soltanto lo stato corrente 6

Matrici in OpenGL Sono memorizzate per colonne => column-major order a0 a4 a8 a12 a 1 a5 a9 a13 a2 a6 a10 a14 a3 a7 a11 a15 7

Matrici e stato Lo stato comprende due matrici (e due stacks) Matrice Model-View Matrice di Proiezione Una di queste è sempre la matrice di lavoro (matrice corrente sulla quale avvengono le operazioni) Per cambiare la matrice di lavoro si utilizza glmatrixmode(gl_modelview); glmatrixmode(gl_projection); 8

Matrici e stato Per rimpiazzare la matrice di lavoro glloadidentity(); glloadmatrixf(float *m); Tutti i comandi che operano sulla matrice di lavoro la modificano moltiplicandola per un altra matrice 9

Trasformazioni geometriche Rotazioni glrotatef(angle, ax, ay, az); Traslazioni gltranslatef(tx,ty,tz); Scalature (non uniformi) glscalef(sx,sy,sz); Generica glmultmatrixf(float f*); 10

Operazioni su Matrici Vista: void glulookat(eyex,eyey,eyez, cx,cy,cz, upx, upy, upz); Proiezione: glortho2d(left, right, bottom, top); void gluperspective(fovy, aspect, znear, zfar); 11

Stack di Matrici Operazioni sullo stack glpushmatrix(); glpopmatrix(); Esempio di utilizzo: glmatrixmode(gl_projection); Push M prsp Carico una matrice di proiezione ortogonale per disegnare uno sfondo Disegno lo sfondo Pop M prsp Disegno la scena sullo sfondo 12

Inviare triangoli glbegin(gl_triangles); glvertex3d(x1,y1,z1); glvertex3d(x2,y2,z2); glvertex3d(x3,y3,z3); glvertex3d(x4,y4,z4); glvertex3d(x5,y5,z5); glvertex3d(x6,y6,z6); glvertex3d(x7,y7,z7); glvertex3d(x8,y8,z8); glvertex3d(x9,y9,z9);... glend(); primo triangolo secondo triangolo terzo triangolo 13

Inviare punti e linee 14

Inviare Fan e Strip 15

Inviare Quads 16

Face Culling void glfrontface(glenum mode); Determina come una faccia viene considerata frontface oppure back-face. La modalità GL_CCW, considera come front-face quelle i cui vertici proiettati sono ordinati in senso antiorario. GL_CW in senso orario. void glcullface(glenum mode); Permette di settare su quali tipi di facce deve essere eseguito il culling. Le possibili modalità sono GL_FRONT, GL_BACK e GL_FRONT_AND_BACK. Il comando glenable(gl_cull_face) abilita il culling. gldisable(gl_cull_face) lo disabilita. 17

Materiali ed Illuminazione Generalità sulla gestione del colore Come già detto lavoriamo nello spazio RGB Se una luce ha colore (LR, LG, LB), ed il materiale ha colore (MR, MG, MB), il colore risultante (il colore della luce che arriva all osservatore) sarà ottenuto moltiplicando i due colori: (LR*MR, LG*MG, LB*MB). Se due fonti luminose risultano nei colori osservati (già moltiplicati per il materiale) (R1, G1, B1) ed (R2, G2, B2), l OpenGL sommerà tali contributi ottenendo (R1+R2, G1+G2, B1+B2). Valori maggiori di 1 vengono troncati ad 1. Infatti il valore uno corrisponde idealmente al massimo dell intensità che il dispositivo di visualizzazione può riprodurre per quel dato colore. 18

Materiali ed Illuminazione 1. Calcolo delle normali (per facce o per vertice). Noi assumiamo le normali ai vertici già definite e calcolate correttamente. 2. Creazione e posizionamento delle sorgenti di luce. 3. Definizione delle proprietà del materiale e dei parametri del modello di illuminazione. 19

Creazione e posizionamento sorgenti di luce void gllight{if}(glenum light, GLenum pname, TYPE param); void gllight{if}v(glenum light, GLenum pname, TYPE *param); Crea la sorgente di luce specificata dal tag light: GL_LIGHT0, GL_LIGHT1,..., GL_LIGHT7. Si possono definire al massimo 8 luci. pname specifica il parametro da settare. La versione che usa i vettori deve essere utilizzata quando i dati relativi alla luce (ad esempio il colore) sono memorizzati appunto in un vettore. 20

Creazione e posizionamento sorgenti di luce (esempi) Settaggio della posizione della luce: GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; gllightfv(gl_light0, GL_POSITION, light_position); Settaggio della componente di ambiente della: GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0}; gllightfv(gl_light0, GL_AMBIENT, light_ambient); 21

Creazione e posizionamento della luce (esempi) Settaggio della componente diffusiva: GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; gllightfv(gl_light0, GL_DIFFUSE, light_diffuse); Settaggio della componente speculare: GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; gllightfv(gl_light0, GL_SPECULAR, light_specular); 22

Luci puntuali e direzionali Esistono due tipi di luci: posizionali e direzionali. La posizione della luce è data in coordinate omogenee. Quindi è possibile posizionare luci all infinito luci direzionali. Le luci direzionali sono utili per modellare il sole o comunque sorgenti luminose che, per la loro elevata distanza, incidono uniformemente sulla superficie del modello. 23

Attenuazione della luce Settaggi dell attenuazione della luce: gllightf(gl_light0, GL_CONSTANT_ATTENUATION, 2.0); gllightf(gl_light0, GL_LINEAR_ATTENUATION, 1.0); gllightf(gl_light0, GL_QUADRATIC_ATTENUATION, 0.5); Per una luce direzionale non ha senso... 24

Spotlight Le sorgenti luminose di tipo spotlight modellano sorgenti luminose che concentrano la luce lungo una direzione privilegiata (e.g. i fari di un automobile) Angolo di cutoff 25

Spotlight ed OpenGL E possibile settare la posizione dello spotlight (GL_POSITION), l angolo di cut-off (GL_SPOT_CUTOFF), la direzione dello spot (GL_SPOT_DIRECTION) e l attenuazione della luce dal centro al bordo dello spot (GL_SPOT_EXPONENT). La formula che regola l illuminazione all interno del cono di luce è la seguente: 26

Proprietà dei Materiali Si utilizza principalmente il comando glmaterialfv(...); Ad esempio, volendo settare la risposta del materiale alle componenti di ambiente, diffusiva e speculare si può scrivere: GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; glmaterialfv(gl_front, GL_AMBIENT, mat_ambient); glmaterialfv(gl_front, GL_DIFFUSE, mat_diffuse); glmaterialfv(gl_front, GL_SPECULAR, mat_specular); In pratica questi sono i famosi Ka, Kd e Ks che avevamo visto nel modello di illuminazione di Phong. 27

Proprietà dei Materiali Ricordiamoci che la specularità del materiale è caratterizzata anche dall esponente di riflessione speculare (n) Per specificarlo: GLfloat mat_shininess[] = {50.0f}; glmaterialfv(gl_front, GL_SHININESS, mat_shininess); 28

Abilitazione del lighting Si utilizza il solito glenable(..) / gldisable(..) Si deve anche speficare quali luci devono essere abilitate Esempio: glenable(gl_lighting); glenable(gl_light0); glenable(gl_light1);... gldisable(gl_light0);gldisable(gl_light1); gldisable(gl_lighting); 29

Texture Mapping 1. Creare una texture (texture object) e specificarne i parametri. 2. Indicare la modalità di applicazione della texture. 3. Abilitare il Texture Mapping 4. Disegnare la scena inviando oltre alle primitive geometriche le coordinate textures. 30

Creazione Texture A. Generazione del nome (handle) della texture. B. Bind (creazione) del texture object con i dati, incluse le proprietà. C. Settare le priorità nel caso l hardware supporti un working set di textures ad elevate performances. D. Durante l uso dell applicazione si effettuano operazioni di bind e rebind degli oggetti texture, per rendere tali dati disponibili durante la fase di visualizzazione della scena. 31

Nomi della Texture void glgentextures(glsizei n, GLuint *texturenames); Restituisce n nomi di texture inutilizzati. I codici restituiti possono non essere contigui. Il valore zero è riservato e non può mai essere restituito come texture name. Esempio: GLUint texhandle = 0; glgentextures(1, &texhandle); 32

Creazione ed uso Texture void glbindtexture(glenum target, GLuint texturename); Quando texturename è utilizzato per la prima volta, un nuovo oggetto texture è creato e collegato a tal nome. Quando il binding riguarda una texture precedentemente creata essa diventa attiva. Quando il valore di texturename è zero, OpenGL interrompe l uso delle textures. fault texture. 33

Esempio Creazione Texture e Settaggio Parametri GLuint texname = 0; glgentextures(2, &texname); glbindtexture(gl_texture_2d, texname); // SETTAGGIO PARAMETRI DI WRAPPING gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_CLAMP); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_CLAMP); // SETTAGGIO PARAMETRI DI FILTRAGGIO gltexparameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_NEAREST); gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // SETTAGGIO DEI DATI glteximage2d(gl_texture_2d, 0, GL_RGBA, checkimagewidth, checkimageheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkimage); 34

Abilitare Texture Mapping Si utilizza il solito glenable(..) / gldisable(..) Esempio: glenable(gl_texture_2d);...uso il texture mapping... gldisable(gl_texture_2d); 35

Inviare Coordinate Texture glbindtexture(gl_texture_2d, &texname); glbegin(gl_triangles); // primo triangolo gltexcoord2f(u1,v1); glvertex3f(x1,y1,z1); gltexcoord2f(u2,v2); glvertex3f(x2,y2,z2); gltexcoord2f(u3,v3); glvertex3f(x3,y3,z3); // secondo triangolo gltexcoord2f(u4,v4); glvertex3f(x4,y4,z4); gltexcoord2f(u5,v5); glvertex3f(x5,y5,z5); gltexcoord2f(u6,v6); glvertex3f(x6,y6,z6); glend(); 36

Modalità di applicazione della Texture void gltexenv{if}(glenum target, GLenum pname, TYPE param); void gltexenv{if}v(glenum target, GLenum pname, TYPE *param); Setta la modalità di applicazione della texture. Il parametro target deve essere GL_TEXTURE_ENV. Se pname vale GL_TEXTURE_ENV_MODE, param può assumere i valori GL_DECAL, GL_REPLACE, GL_MODULATE, o GL_BLEND, andando a specificare come i valori di colore delle texture devono essere combinati con i valori di colore dei frammenti processati. Se pname vale GL_TEXTURE_ENV_COLOR, param deve essere un array composto da quattro floating-point rappresentati le componenti R, G, B, and A. Questa modalità è utilizzata in caso GL_BLEND sia stata precedentemente specificata. 37

Modalità di applicazione delle Texture L effetto dipende anche dal formato interno della texture (GL_RGB, GL_RGBA, ecc). Tendenzialmente GL_DECAL sostituisce il colore della texture. GL_REPLACE compie operazioni simili. GL_MODULATE usa il colore della texture per modulare quello del frammento. Nello specifico le funzioni potete consultarle sul RedBook. 38

Modalità di applicazione delle Texture REPLACE: GL_RGB C = Ct, A = Af GL_RGBA C = Ct, A = At DECAL: GL_RGB C = Ct, A = Af GL_RGBA C = Cf (1 At) + Ct At, A = Af MODULATE GL_RGB C = CfCt, A = Af GL_RGBA C = CfCt, A = AfAt 39

Blending È una tecnica di imaging che ci permette di mescolare i colori di più immagini Per la precisioni i colori del framebuffer vengono mescolati con i colori della nuova immagine che si sta generando Utilizzo immediato gestione della trasparenza 40

Semitrasparenza vecchia: (già sul framebuffer) nuova: che sovrascrivo risultato (1-α) x + α x = α = 0.25 (1-α) x + α x = α = 0.5 (1-α) x + α x = α = 0.75 41

Alpha Blending I colori hanno 4 componenti: R,G,B, α Quando arriva un frammento (sopravvissuto al depth test) invece di sovrascriverlo lo miscelo con la formula: ( r, g, b) ( r, g, b) (1 α) + ( r, g, b) ( α) finale = vecchio nuovo NOTA: Alpha blending e Z-buffer bisticciano... l ordine di rendering è determinante per il risultato finale. 42

Alpha Blending & OpenGL Per attivare l alpha blending si utilizza il comando glenable(gl_blend); Per settare la funzione di blending si utilizza il comando glblendfunc(source_factor, dest_factor); Esempio: glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA); Per source si intende l alpha del frammento, per dest l alpha di destinazione, ossia quello del framebuffer Ci sono molte combinazioni possibili per le funzioni di blending: GL_ZERO, GL_ONE, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR 43

Per-fragment Operations Una volta uscito in output, il frammento subisce delle operazioni dette per-fragment operations prima di arrivare al framebuffer Alcune di queste operazioni sono Scissor Test Alpha Test Stencil Test Depth Test Blending Dithering 44

Per-fragment Operations 45

Alpha Test Se un frammento é troppo trasparente, scartiamolo: if ( frammento.alpha < k) then scarta frammento Al solito, può essere abilitato o disabilitato con i soliti comandi OpenGL glenable(...), gldisable(...) glenable(alpha_test); Anche la funzione di test può essere settata: glalphafunc(gl_greater, 0.01); 46

Approfondimenti Redbook manuale di riferimento fondamentale Nehe s Tutorial piccoli programmi di esempio su ogni aspetto della pipeline www.opengl.org sito ufficiale di riferimento OpenGL 47

Domande? 48