Grafica Computazionale



Похожие документы
Introduzione. Costruzione di Interfacce Primi passi in OpenGL. Sierpinski Gasket. Sierpinski gasket. Event driven programming. Stuttura del programma

GAME DEV: tools programming. Parte 2: programming

OpenGL: visualizzazione 3D

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

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

Introduzione SOMMARIO

Grafica 3D Interattiva

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

Processo di rendering

SOMMARIO. Programmazione orientata agli eventi. Programmazione orientata agli eventi. Programmazione orientata agli eventi

Introduzione Computer Graphics

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Architetture Applicative

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

Visualizzazione grafica. dell'output di un programma con GNUplot

GLUI: GLUT-based User Interface

Lezione1. Cos è la computer grafica. Lezione del 10 Marzo Michele Antolini Dipartimento di Ingegneria Meccanica Politecnico di Milano

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Computer Graphics. La disciplina fornisce metodi per creare elaborare memorizzare visualizzare. immagini di oggetti o scene mediante un computer

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

TachyCAD 8.0 Anno 2010

ELETTRONICA Tema di Sistemi elettronici automatici Soluzione

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

Trasformazioni 2D. Grande differenza rispetto alla grafica raster!

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Linguaggio C Compilazione, linking e preprocessor

Lezione 19: Grafica in tempo reale. I problemi del Real Time. I problemi del Real Time. I problemi del Real Time. I problemi del Real Time

Introduzione a ROOT. 1. Informazioni generali

Progettaz. e sviluppo Data Base

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Introduzione al sistema operativo Il file system: file, directory,...

L i n u B e s t a Mario Di Raimondo

Fondamenti di Informatica 2

PORTALE CLIENTI Manuale utente

Demo. La palette allinea. La palette Anteprima conversione trasparenza. Adobe Illustrator CS2

Modelli per i materiali

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Introduzione a Dev-C++

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Introduzione al Linguaggio C

Grafica al calcolatore - Computer Graphics

Gestione di una UART SOFTWARE.

Il Sistema Operativo. Introduzione di programmi di utilità. Elementi di Informatica Docente: Giorgio Fumera

Laboratorio di programmazione

Progettazione e realizzazione di una GUI multi-piattaforma per applicazioni mediche in 2D

Introduzione a OpenGL e alle GLUT

Processo di rendering

Il menu File contiene tutti i comandi relativi alle seguenti operazioni:

4. Proiezioni del piano e dello spazio

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

STRUMENTI DI PRESENTAZIONE MODULO 6

Usa lo sfoglialibro su Smart Notebook

Le operazioni di allocazione e deallocazione sono a carico del sistema.

La struttura dati ad albero binario

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il controllo della visualizzazione

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Informatica. Teoria. L architettura dei PC Storia dell informatica Periferiche Reti - Software. Marco Brama

INDICE. Proposta aggiornamento Aggiungi scritta 2. Proposta aggiornamento Sposta scritta 3. Proposta aggiornamento Ruota scritta 4

Proiezione Stereoscopica

Architettura del computer (C.Busso)

dall argomento argomento della malloc()

Linguaggio C. Fondamenti. Struttura di un programma.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

MODULO 02. Iniziamo a usare il computer

Транскрипт:

Grafica Computazionale OpenGl + SDL Fabio Ganovelli fabio.ganovelli@isti.cnr.it a.a. 2005-2006

Storia Specifica di libreria per la scrittura di applicazioni di grafica 3D Cross-Language Cross-Platform ora: OpenGL Architecture Review Board mantiene e aggiorna le specifiche versione attuale: 2.0 una compagnia, un voto ARB ci sono anche le estensioni private Soprattutto e...

Struttura Windows OpenGL App OpenGL Application OpenGL Windows API Graphics Hardware Siccome OpenGL è cross platform ho bisogno di un altra libreria che gestisca l interfaccia tra OpenGL e il sistema operativo

Simple DirectMedia Layer cross-platform multimedia library GNU LGPL fornisce accesso (a basso livello ) 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++ http://www.libsdl.org

Struttura Windows OpenGL App OpenGL Application OpenGL SDL Graphics Hardware Driver Graphics Hardware

Struttura programma Struttura classica dei programmi a linea di comando: main() { init(); do_my_beautiful_algorithm(); exit(); } non va bene per applicazioni interattive!

Sistema a eventi Struttura programma "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

La minima applicazione SDL: headers #ifdef WIN32 #include <windows.h> #endif #include <GL/gl.h> // OPENGL #include <GL/glu.h> // OPENGL Utilities #include <stdlib.h> #include <SDL.h> //Simple Direct media Layer

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 */ { Display(); /* Disegna la scena */ SDL_Event event; SDL_WaitEvent(&event);/* aspetta che arrivi un evento */ 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; }

Meglio: Ridisegna la scena troppe volte Gestiamo anche l evento necessita di ridisegnare Nel ciclo degli eventi: case SDL_VIDEOEXPOSE : Display(); break; E togliamo Display() dal ciclo degli eventi

La minima applicazione SDL: la parte che disegna void Display() { glclear(gl_color_buffer_bit); /* disegna tutto */ } glfinish(); /* aspetta che sia tutto finito */ SDL_GL_SwapBuffers(); /* questa fra un sec */

Double buffering Piccolo trucco utile alle applicazioni interattive nascondere il frame buffer mentre viene riempito Vertici proiettati (punti in R 2 ) setup setup setup rasterizer punti rasterizer triangoli rasterizer segmenti frammenti (candidati pixels) computazioni per frammento frame buffer A [ pronto ] frame buffer B [ in costruzione ] al video A

Double buffering Piccolo trucco utile alle applicazioni interattive nascondere il frame buffer mentre viene riempito Vertici proiettati (punti in R 2 ) setup setup setup rasterizer punti rasterizer triangoli rasterizer segmenti frammenti (candidati pixels) computazioni per frammento frame buffer A [ in costruzione ] frame buffer B [ pronto ] al video B

Open Graphic Language Libreria C Cross platform Qualche centinaio di routines www.opengl.org specifiche Specifiche ver 2.0

Vicini di casa OpenGL e 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

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++

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

Syntax Tutte le costnti di Opengl si chiamano: GL_SOMETHING_ETC esempio: GL_MODELVIEW GL_PROJECTION

OpenGL = State Machine primitive qui manipolazioni di stato (es. settare la matrice) stato di OpenGL tutto il pipeline pixels

Stato di OpenGL Matrici di modello e trasformazione Proprietà del materiale Attributi: colore, posizione, normale, coordinate texture Funzionalità abilitate. Esegui o no: Lighting Z buffering Texturing.

Stato di OpenGL Modalità: Rasterizza solo gli spigoli dei polgoni Riempi i poligoni Calcola le coordinate texture per: reflection mapping sphere map Proiezione delle coordinate Molti comandi OpenGL non fanno nulla se non cambiare lo stato

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.

Differenza fondamentale Nota: assume che siano memorizzate per colonne detto anche in column major order Invece in SoftOgl le teniamo per righe Non ce ne importa niente, ma attenzionzione se si implementa: glmultmatrixf(float * a); glloadmatrixf(float * a); glgetmatrix(gl_modelview, float *a); glgetmatrix(gl_projection, float *a); a a a a Per mantenere la compatibilità occorre trasporre le matrici prima di sostituirle (o resituirle) 0 1 2 3 a a a a 4 5 6 7 a a a a 8 9 10 11 a a a a 12 13 14 15

Matrici in gradi Rotazioni glrotatef(angle,ax,ay,az); Traslazioni gltranslatef(dx,dy,dz); Scalature (non uniformi) glscalef(ax,ay,az); Generica glmultmatrixf(float f*); asse di rotazione passante per l'origine

Matrici Vista: void glulookat(eyex,eyey,eyez, cx,cy,cz, upx, upy, upz); centro. La direzione e' (c eye)

Matrici Operazione sullo Stack: glpushmatrix() glpopmatrix()

Matrici di proiezione Matrici di proiezione: glortho2d(left, right, bottom top); void gluperspective( fovy, aspect, znear, in gradi zfar);

Viewport 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!

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: SDL_SetVideoMode(640,480,0, SDL_OPENGL SDL_RESIZABLE) gestione dell'evento: (devo fare di nuovo il set up del video)... case SDL_VIDEORESIZE : SDL_SetVideoMode(event.resize.w,event.resize.h, 0, SDL_OPENGL SDL_RESIZABLE); myreshapefunc(event.resize.w,event.resize.h);

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);

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

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 w=1 sottointesa! coordinata z =0 sottointesa!

Non solo glbegin (GL_TRIANGLES); linea finale quando si fa la glend()

Non solo glbegin (GL_TRIANGLES); quanti triangoli rasterizzati per quanti vertici proiettati? Le specifiche OpenGL non prescrivono quale diagonale usare (quindi dipende dall'implementazione