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

Slides:



Advertisements
Presentazioni simili
Massa Laura Mela Enrica
Advertisements

GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
OpenGL Libreria grafica composta da circa 150 comandi. Realizzata in vari linguaggi (noi useremo quella in C). Sviluppato dalla Silicon Graphics. Originariamente.
Gerarchie di Oggetti Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire un modello come una gerarchia di oggetti.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 5 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Recap sul C Marco D. Santambrogio – Ver. aggiornata al 11 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
1 Costruzione di Interfacce Primi passi in OpenGL
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Matrici di Proiezione Prospettica
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Lezione 7: rasterizzazione la fabbrica dei frammenti Università dellInsubria Facoltà di Scienze MFN - Varese Corso di Laurea.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
1 Costruzione di Interfacce Primi passi in OpenGL
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
I Thread.
Analisi di Immagini e Dati Biologici
Lavorare con le matrici in OGL
1 Programmazione grafica 1 Daniele Marini. 2 Linguaggio di riferimento OpenGL: libreria di procedure che realizza un API (application programmers interface)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Le proiezioni e la prospettiva
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Trasformazioni in OGL Daniele Marini.
Le proiezioni e la prospettiva
Programmazione grafica 1
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Controllare le proiezioni
Corso di Programmazione Grafica e Laboratorio Introduzione a OpenGL Prof. Daniele Marini.
Trasformazioni in OGL Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Sistemi di riferimento
Primitive grafiche e interazione Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Display list e picking Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Controllare la prospettiva
Controllare la prospettiva
1 Programmazione grafica: l’Interazione Daniele Marini.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Transcript della presentazione:

Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione 5: prepariamoci ad implementare

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 2/40 Ambiente di sviluppo Chiaramente va bene come qualunque altro. –Leggero (9 MB), simpatico e free software (GNU GPL) –Progetti in C e C++ –Include compilatore Mingw/GCC –Ha un un buon package downloader e manager che permette di istallare facilmente le librerie che usiamo (OpenGL, SDL...) e della ducumentazione "tools" -> "check for update/pakages" –Funziona Per info, sull'uso, potete scaricare la lez 1 del corso di lab linguaggi:

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 3/40 Simple DirectMedia Layer –cross-platform multimedia library –GNU LGPL –fornisce accesso (a livello abb basso) a audio, keyboard, mouse, joystick, windowing 3D hardware via OpenGL 2D video framebuffer. –gira su: Linux, Windows, BeOS, MacOS X... –completato di librerie "figlie" per vari scopo (e.g. SDL_png per file png) –C++

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 4/40 Struttura programma Struttura classica dei programmi a linea di comando: main() { init(); do_my_beautiful_algorithm(); exit(); } non va bene per applicazioni interattive !

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 5/40 Struttura programma Sistema a eventi –"a callback" (o "a message handlers" ecc) main() { init(); while (true) { get_event() ; process_event(); } eventi tipo: mouse, tastiera... sistema di finistre reshape, minimizzazione... generati dall'applicazione stessa o da thread differenti

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 6/40 La minima applicazione SDL: headers #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include #endif #include

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 7/40 La minima applicazione SDL: main int main(int argc, char **argv) { SDL_Init(SDL_INIT_VIDEO); SDL_SetVideoMode(640, 480, 0, SDL_OPENGL); int done = 0; while ( ! done ) /* Loop, drawing and checking events */ { myDrawGLScene(); /* Questa poi la vediamo */ SDL_Event event; SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT : done = 1; break ; case SDL_KEYDOWN : if ( event.key.keysym.sym == SDLK_ESCAPE ) done = 1; break; } SDL_Quit(); return 1; }

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 8/40 Meglio: Ridisegna la scena troppe volte Gestiamo anche levento necessita di ridisegnare Nel ciclo degli eventi: case SDL_VIDEOEXPOSE : myDrawGLScene(); break; E togliamo il myDrawGLScene dal ciclo degli eventi

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 9/40 La minima applicazione SDL: la parte che disegna void DrawGLScene() { glClear(GL_COLOR_BUFFER_BIT); /* disegna tutto */ glFinish(); /* aspetta che sia tutto finito */ SDL_GL_SwapBuffers(); /* questa fra un sec */ }

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 10/40 Double buffering frammenti (candidati pixels) frame buffer A [ pronto ] Vertici proiettati (punti in R 2 ) rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up Piccolo trucco utile alle applicazioni interattive –nascondere il frame buffer mentre viene riempito frame buffer B [ in costruzione ] al video A

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 11/40 Double buffering frammenti (candidati pixels) frame buffer A [ in costruzione ] Vertici proiettati (punti in R 2 ) rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up Piccolo trucco utile alle applicazioni interattive –nascondere il frame buffer mentre viene riempito frame buffer B [ pronto ] al video B

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 12/40 frammenti (candidati pixels) Riassunto puntate precedenti 1/3 Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento x y z v0v0 v1v1 v2v2 set- up v0v0 v1v1 v2v2 rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice ora di qui sappiamo tutto

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 13/40 Struttura Applicazione OpenGL+SDL OpenGL OpenGL Application Operative System Graphical User Interface API SDL Graphics Hardware Driver OpenGL API Graphics Hardware

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 14/40 Non lo studiamo qui, ma esiste Direct3D –Parte di DirectX Microsoft –Stessi scopi di OpenGL un API per usare lo stesso hardware dtruttura non dissimile –L'alternativa piu' comune a OpenGL

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 15/40 Open Graphic Language Libreria C –Cross platform –Qualche centinaio di routines –specifiche Specifiche ver 2.0

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 16/40 inizialmente sviluppato da Silicon Graphics ora: OpenGL A rchitecture R eview B oard –mantiene e aggiorna le specifiche –versione attuale: 2.0 –una compagnia, un voto ci sono anche le estensioni private –Soprattutto e Storia ARB...

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 17/40 Vicini di casa OpenGL e il layer di base GLU (GL utilites) –insieme di funzioni di utility costruite sopra OpenGL, piucomode 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

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 18/40 Syntax Tutte le funzioni di Opengl si chiamano: glSomethingXXX –Dove XXX specifica (numero) il tipo dei parametri: –esempio: glColor3f(float, float, float); glColor3fv( float*); f: float d: double... v: vettore –Non e C++…

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 19/40 Syntax Ma anche: glColor3b, glColor3d, glColor3f, glColor3i, glColor3s, glColor3ub, glColor3ui, glColor3us, glColor4b, glColor4d, glColor4f, glColor4i, glColor4s, glColor4ub, glColor4ui, glColor4us, glColor3bv, glColor3dv, glColor3fv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv,glColor3usv, glColor4bv, glColor4dv, glColor4fv, glColor4iv, glColor4sv, glColor4ubv, glColor4uiv, glColor4usv

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 20/40 Basato sullo stato Una state machine –ad esempio current color posizione luci matrici fanno parte dello stato corrente Molti comandi OpenGL non fanno nulla –se non cambiare lo stato

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 21/40 Basato sullo stato Stato comprende 2 matrici (e due stacks) –Model-View –Projection Una di queste e sempre la matrice di lavoro –la matrice corrente I comandi che modificano matrici lavorano su questa matrice

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 22/40 Matrici Nota: assume che siano memorizzate per colonne –detto anche in column major order

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 23/40 Matrici Per cambiare quale é la matrice di lavoro: glMatrixMode(***); GL_MODELVIEW GL_PROJECTION Per rimpiazzare la matrice di lavoro –glLoadIdentity(); –glLoadMatrixf( float* m ); Tutti gli altri comandi modificano (moltiplicano per un altra matrice) la matrice corrente.

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 24/40 Matrici Rotazioni –glRotatef(angle,ax,ay,az); Traslazioni –glTranslatef(dx,dy,dz); Scalature (non uniformi) –glScalef(ax,ay,az); Generica –glMultMatrixf(float f*); in gradi asse di rotazione passante per l'origine

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 25/40 Matrici Vista: void gluLookAt(eyex,eyey,eyez, cx,cy,cz, upx, upy, upz); centro. La direzione e' (c – eye)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 26/40 Operazione sullo Stack: glPushMatrix() glPopMatrix() Matrici

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 27/40 Matrici di proiezione: glOrtho2D (left, right, bottom top); void gluPerspective( fovy, aspect, zNear, zFar); Matrici di proiezione in gradi

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 28/40 Per settare il viewport: glViewPort(int x, int y, int w, int h); reminder: il rapporto fra w e h deve essere lo stesso specificato nella matrice di proiezione! Viewport

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 29/40 Evento Window Reshape Succede all'inizio –e ogni volta che l'utente cambia dimensioni alla finestra –devo permettere all'utente di farlo, durante l'inizializzazione: –gestione dell'evento: (devo fare di nuovo il set up del video) SDL_SetVideoMode(640,480,0, SDL_OPENGL | SDL_RESIZABLE)... case SDL_VIDEORESIZE : SDL_SetVideoMode(event.resize.w,event.resize.h, 0, SDL_OPENGL |SDL_RESIZABLE); myReshapeFunc(event.resize.w,event.resize.h);

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 30/40 Adattare la camera alla finestra: proiezione ortografica void myReshapeFunc(GLsizei w, GLsizei h) { glMatrixMode (GL_PROJECTION); glLoadIdentity (); float ratio=(float)h/(float)w; glOrtho2D(-1,1,-ratio,ratio); glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_MODELVIEW); }

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 31/40 Ricordare sempre: OpenGL = state machine primitive qui pixels tutto il pipeline (proiezione, setup, rasterizzazione...) stato di OpenGL manipolazioni di stato (es. settare la matrice)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 32/40 Come si "sparano" i triangoli nel pipeline 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

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 33/40 Come si "sparano" i triangoli nel pipeline glVertex3d(x,y,z); oppure glVertex3f(x,y,z); oppure glVertex3i(x,y,z); oppure glVertex2d(x,y); oppure glVertex4d(x,y,z,w); oppure glVertex4dv(vett); oppure... coordinata z =0 sottointesa! coordinata w=1 sottointesa!

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 34/40 Non solo glBegin (GL_TRIANGLES); linea finale quando si fa la glEnd()

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 35/40 Non solo glBegin (GL_TRIANGLES); quanti triangoli rasterizzati per quanti vertici proiettati ? Le specifiche OpenGL non prescrivono quale diagonale usare (quindi dipende dall'implementazione