1 Costruzione di Interfacce Primi passi in OpenGL

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Process synchronization
Java Enterprise Edition (JEE)
Massa Laura Mela Enrica
Le gerarchie di tipi.
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Introduzione al linguaggio C Dr. Francesco Fabozzi Corso di Informatica.
Modellazione per addizione: denti posteriori
Caratteri e stringhe di caratteri
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.
Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Capitolo 2: Semplificazione, Ottimizzazione e Implicazione.
Algoritmo di Ford-Fulkerson
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 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.
Costruzione di Interfacce Lezione 4 Sistemi di riferimento e trasformazioni
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 10 Dal Java al C++ parte 1
1 Costruzione di Interfacce Primi passi in OpenGL
Matrici di Proiezione Prospettica
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.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 30 MMeditor e collision detection
Costruzione di interfacce Paolo Cignoni
2 Dicembre 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 23 Scene Graphs, Object Loading
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
INFORMATICA GRAFICA – SSD ING-INF/05 Sistemi di elaborazione delle informazioni a.a. 2007/2008 Esercitazione OpenGL.
I Thread.
I numeri by iprof.
Interazione utente-programma
File di testo, file binari
1 Programmazione grafica: lInterazione Daniele Marini.
1 Gestione della Window Daniele Marini. 2 Definire una Window: GLUT o altro WM /* Standard GLUT initialization */ glutInit(&argc,argv); glutInitDisplayMode.
Smoothing Daniele Marini.
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
1 Programmazione grafica 1 Daniele Marini. 2 Linguaggio di riferimento OpenGL: libreria di procedure che realizza un API (application programmers interface)
Progettazione multimediale
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.
Roberto Ariani Presidente Comm. Supporto e sviluppo informatico I Siti in cui dobbiamo navigare per crescere SINS - Seminario Istruzione Nuovi Soci - Arezzo,
Primitive grafiche e interazione Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
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 Daniele Marini
Corso di Programmazione Grafica e Laboratorio Introduzione a OpenGL Prof. Daniele Marini.
Primitive grafiche e interazione Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
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
Primitive OpenGL Corso di Programmazione Grafica e Laboratorio Daniele Marini.
1 Programmazione grafica: l’Interazione Daniele Marini.
Modulo 6 Test di verifica
Il linguaggio Fortran 90: 3. Procedure e Funzioni
Programmazione in linguaggio C
Microsoft Word Interfaccia grafica
Costruzione di Interfacce Lezione 18 MFC e OpenGL
Costruzione di interfacce Paolo Cignoni
I Sistemi Operativi. Definizione Per Sistemi Operativi (di seguito SO) si intendono quei pacchetti software, a loro volta costituiti da più sottoprogrammi.
Transcript della presentazione:

1 Costruzione di Interfacce Primi passi in OpenGL

2 Introduzione Abbiamo visto Cosa significa rendering Lapproccio object viewer Mettiamo in pratica qualcosa Scriviamo la prima applicazione che usa opengl Siccome non sappiamo ancora nulla ci terremo sul semplice.

3 Sierpinski gasket Si parte da un triangolo equilatero Si rimuove quello centrale Si procede ricorsivamente per I tre triangoli rimasti.

4 Sierpinski Gasket Approccio Generativo dellinsieme di punti P che appartengono al gasket: p =punto a caso del triangolo while true vi = vertice a caso del triangolo p = (p+vi)/2 P=P U {p}

5 Stuttura del programma Struttura classica dei programmi a linea di comando: main() { init(); do_my_beautiful_algorithm(); exit(); } Non ha molto senso per i programmi con uninterfaccia utente. Come avviene il processo di interazione tra lutente e lapplicazione?

6 Event driven programming Gestione interazione applicazione- utente tramite callback (message handlers ecc) funzioni che sono attivate in risposta a vari eventi (messaggi) gestiti dal sistema operativo (pressione di un tasto del mouse o della tastiera, reshape della finestra, necessita di ridisegnare il contenuto della finestra ecc) Il flusso principale dellapplicazione e in mano allutente o meglio al sistema operativo.

7 Approccio minimale per fare grafica Per quello che ci riguarda la cosa piu importante e la gestione dellevento:Necessita di disegnare il contenuto della finestra Che fondamentalmente utilizzera OpenGL.

8 Struttura Windows OpenGL App OpenGL OpenGL Application Graphics Hardware Windows API WGL subset

9 Struttura Applicazione OpenGL+Glut OpenGL OpenGL Application Operative System Graphical User Interface API GLUT Graphics Hardware

10 GLUT GLUT is a window system independent toolkit for writing OpenGL programs. It implements a simple portable windowing application programming interface (API) for OpenGL. GLUT provides a portable API so you can write a single OpenGL program that works on both Win32 PCs and X11 workstation

11 Schema Minimo Applicazione Glut Inizializzare glutInit(&argc, argv) Definire e aprire una finestra glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH ); glutInitWindowSize(sizex,sizey); glutCreateWindow(char *title) preparare le funzioni callback che SO invocherà glutDisplayFunc(myRedrawFunc) Passare al SO/toolkit il controllo. glutMainLoop()

12 La minima applicazione glut #include void myRedrawFunc() { glClear(GL_COLOR_BUFFER_BIT); // Draw something } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutCreateWindow("sierp"); glutDisplayFunc(myRedrawFunc); glutMainLoop(); //Passare al SO il controllo. }

13 Dove si disegna? Ricordate la pipeline di rendering La prima cosa che fa il renderer e di spostare tutto nel sistema di riferimento della camera Poi taglia quel che non si vede Infine appiattisce il mondo sul piano di vista

14 Trasformazioni e Clipping Noi non abbiamo definito nessuna trasformazione quindi vedremo solo quello che si trova davanti alla camera. Più precisamente vedremo quello che si trova nel Volume di Vista: Porzione di spazio, nel sistema di riferimento della camera, che e visibile dalla camera.

15 Volume di Vista Normalmente ci si aspetta che il volume di vista sia una piramide infinita. Per ragioni di praticità si aggiungono due piani (front and back o near and far) che ulteriormente delimitano lo spazio dinteresse, e quindi il volume di vista è un tronco di piramide.

16 Proiezione Ortografica Se ci immaginiamo la camera posta ad una distanza infinita il volume di vista diventa un parallelepipedo. Questo genere di vista è detto ortogonale =

17 Proiezione Ortografica In una proiezione ortografica tutti i punti nel volume di vista vengono semplicemente proiettati perpendicolamente sul piano di vista. =

18 Creare il progetto

19 Setting progetto

20 Aggiungere un file al progetto

21 La minima applicazione glut #include void myRedrawFunc() { glClear(GL_COLOR_BUFFER_BIT); // Draw something } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutCreateWindow("sierp"); glutDisplayFunc(myRedrawFunc); glutMainLoop(); //Passare al SO il controllo. }

22 Disegno del sierpinski set Questioni principali Come si disegna un insieme di punti Dove si disegna?

23 Come si disegna in OpenGL Disegnare significa definire una scena da far passare nella pipeline glBegin(Primitiva) Dati della primitiva (Coordinate vertici, e attributi vari) glEnd() Le coordinate dei vertici si specificano con il comando glVertex*();

24 Primitive OpenGL

25 Note Su OpenGL Note OpenGL e il layer di base GLU eun insieme di funzioni di utility costruite sopra OpenGL, piucomode da usare GLUT e il toolkit di interfaccia con il sistema operativo Wgl e GLx sono i sottoinsiemi di OpenGL che dipendono dal SO e che permettono di dire al SO ad esempio che linterno di una certa finestra deve essere adatto a OpenGL. Per ora nascosto da GLUT Tutto quanto sopra e C (e non C++).

26 GL syntax Tutte le funzioni di Opengl si chiamano glSomethingXXX Dove XXX specifica (numero) il tipo dei parametri: glColor3f(float, float, float) f: float d: double ecc. Non e C++…

27 Disegnare il sierpinski gasket La generazione e facile, quindi si può evitare di memorizzare e disegnare durante il processo di generazione. GLfloat triangle[3][2]={ { -1.0f, -1.0f},{ 1.0f, -1.0f},{ 0.0f, 1.0f}}; GLfloat p[2]={0.0f, 0.0f}; int i, j; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); for(j=0;j<20000;j++) { i=rand()%3; p[0]=(p[0]+triangle[i][0])/2.0f; p[1]=(p[1]+triangle[i][1])/2.0f; glVertex2f(p[0],p[1]); } glEnd();

28 Gestione Reshape Il comportamento di default e che tutto il volume di vista viene mappato nella finestra. Aspect Ratio sbagliata

29 Viewport Di default si disegna su tutto la finestra, ma si puo specificare una sottporzione rettangolare della finestra (contesto) su cui si disegna glViewport(x,y,w,h)

30 Adattare la camera alla finestra In opengl una vista ortogonale, si specifica definendo il view volume glOrtho(left,right,bottom,top,near,far);

31 Adattare la camera alla finestra Il View Volume deve avere le stesse proporzioni della finestra Si usa unaltra callback quella in risposta allevento di Reshape (aka resize) della finestra. void myReshapeFunc(GLsizei w, GLsizei h) glutReshapeFunc(myReshapeFunc);

32 Adattare la camera alla finestra void myReshapeFunc(GLsizei w, GLsizei h) { glMatrixMode (GL_PROJECTION); glLoadIdentity (); float ratio=(float)h/(float)w; glOrtho(-1,1,-ratio,ratio,-1,1); glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_MODELVIEW); }