Corso di Programmazione Grafica e Laboratorio Introduzione a OpenGL Prof. Daniele Marini OpenGL Cos’è OpenGL - La libreria grafica OpenGL è definita come un’interfaccia software per l’hardware grafico - Non è un linguaggio di programmazione - E’ una libreria runtime, scritta in C, che fornisce delle funzioni di interfaccia – API (Application Programming Interfaces) per la creazione di grafica tridimensionale - Indipendente dalla piattaforma e dall’hardware - Non fornisce funzioni per la gestione di finestre e controlli, I/O e gestione dei file - Non esiste un formato per la descrizione dei modelli geometrici in OpenGL - E’ pensato per lavorare direttamente con l’hardware grafico ma esistono anche numerose implementazioni software Programmazione Grafica aa2007/2008 2 OpenGL Cos’è OpenGL - OpenGL è una macchina a stati I comandi delle API modificano lo stato corrente al fine di generare l’immagine Ad esempio, una volta specificato un colore con l’apposito comando, tale colore sarà utilizzato per tutte le operazioni di disegno finché non sarà specificato un colore differente … glColor3f(1.0f, 0.0f, 0.0f); glBegin(GL_POLYGON); glVertex3f(0.25f, 0.25f, 0.0f); glVertex3f(0.75f, 0.25f, 0.0f); glVertex3f(0.75f, 0.75f, 0.0f); glVertex3f(0.25f, 0.75f, 0.0f); glEnd(); … Programmazione Grafica aa2007/2008 3 OpenGL Un po’ di storia - - OpenGL nasce dalle librerie IRIS GL di Silicon Graphics a partire da metà anni ‘80 Originariamente IRIS GL era una libreria grafica 2D che si è poi evoluta poi come API di programmazione 3D per applicazioni funzionanti su workstations SGI OpenGL è il risultato degli sforzi di SGI per aumentare la portabilità di IRIS GL Le nuove API dovevano offrire la potenza di IRIS GL ma essere uno standard aperto, con il contributo di altri produttori di hardware, per meglio adattare la compatibilità con altre piattaforme hardware e sistemi operativi Dalla collaborazione di vari produttori nasce la OpenGL Architecture Review Board (ARB) I fondatori sono SGI, Digital Equipment Corporation, IBM, Intel e Microsoft Il 1 Luglio 1992 viene rilasciata la Versione 1.0 delle specifiche OpenGL Ora ARB consiste di molti altri membri molti dei produttori di hardware Programmazione Grafica aa2007/2008 4 Implementazione generica - Tutte le operazioni di disegno (rasterizzazione) vengono effettuate via software Una tale architettura può funzionare su qualsiasi sistema in grado di visualizzare output grafico Il sistema di rasterizzazione si appoggia sul Graphics Device Interface (GDI) del sistema operativo Programmazione Grafica aa2007/2008 5 Implementazione hardware - Il sistema di rasterizzazione di OpenGL si interfaccia con il driver della scheda video Il driver comunica direttamente con la scheda video senza passare dalla GDI Tali implementazioni vengono dette hardware accelerated Programmazione Grafica aa2007/2008 6 Pipeline - Con il termine pipeline intendiamo la descrizione di un processo che avviene per passi successivi Semplificando molto, la pipeline di esecuzione di un’applicazione che utilizza le librerie OpenGL può essere schematizzate come segue: - Il programma esegue delle chiamate alle funzione delle API (comandi) - Tali comandi vengono salvati in una memoria temporanea (buffer) - I comandi vengono poi processati a seconda dei dati che trattano e passati quindi alla fase successiva - Trasformazione: i dati legati ai vertici della geometria vengono trasformati e illuminati - Rasterizzazione: viene generata l’immagine finale in base alle informazioni legate alla geometria, alle texture, etc… - L’immagine finale viene salvata nel framebuffer che rappresenta la memoria del display grafico e mostrata sullo schermo Programmazione Grafica aa2007/2008 7