Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht

Slides:



Advertisements
Presentazioni simili
BUMP MAPPING dott.ing.jun Alex Zupan –
Advertisements

© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Recupero debito quarto anno Primo incontro
Procedure e funzioni A. Ferrari.
CONOSCIAMO IL WINDOWS '95.
Cinematica diretta Un manipolatore è costituito da un insieme di corpi rigidi (bracci) connessi in cascata tramite coppie cinematiche (giunti). Si assume.
Cinematica del braccio di un robot
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
Funzioni definite dall’utente
Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Texture Mapping.
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
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.
1 Costruzione di Interfacce Primi passi in OpenGL
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
FEM -2 Gabriella Puppo.
OPEN OFFICE e IMPRESS Masucci Antonia Maria.
LE EQUAZIONI DI SECONDO GRADO
Rotazione di un corpo rigido attorno ad un asse fisso
INFORMATICA GRAFICA – SSD ING-INF/05 Sistemi di elaborazione delle informazioni a.a. 2007/2008 Esercitazione OpenGL.
Applicazioni progettuali di grafica computerizzata a.a. 2008/2009 Rendering grafico.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Smoothing Daniele Marini.
1 Effetti impressionistici Daniele Marini. 2 Tecniche discrete di manipolazione del frame buffer: –Texture mapping –Antialiasing –Compositing –Alpha blending.
Lavorare con le matrici in OGL
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
Relatore: Laureando: Prof. Luca Zaccarian Roberto Antonelli
INTRODUZIONE A MATLAB LEZIONE 4 Sara Poltronieri slide3.4 matlabintro
Illuminamento e Shading
VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1.
Effetti fotorealistici
Daniele Marini, Maurizio Rossi
Display list e scene graph Daniele Marini Dipartimento di Informatica e Comunicazione.
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Le trasformazioni Daniele Marini.
Trasformazioni in OGL Daniele Marini.
Le proiezioni e la prospettiva
Le proiezioni e la prospettiva
Controllare le proiezioni
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Trasformazioni Daniele Marini.
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.
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Corso Di Programmazione Grafica
Rotazioni e quaternioni
Controllare la prospettiva
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Primitive OpenGL Corso di Programmazione Grafica e Laboratorio Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
INSEGUITORE SOLARE CON ARDUINO
Ricorsione CORDA – Informatica A. Ferrari Testi da Alessandro Bugatti
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Acquisizione ed elaborazione di dati cinematici
Costruzione di Interfacce
Informatica e Informatica di Base
Daniele Marini Con contributi di Maurizio Rossi
1 Smoothing Daniele Marini. 2 Calcoli sui vettori Vettore normale equazione del piano: ax+by+cz+d=0; si può anche scrivere come luogo: e p è un qualunque.
1 SISTEMI INFORMATIVI TERRITORIALI LABORATORIO L’APPLICAZIONE AUTODESK MAP UNIVERSITA’ DEGLI STUDI DI NAPOLI FEDERICO II CORSO DI LAUREA IN SCIENZE GEOLOGICHE.
SST- SuperSpin Theory TEORIA DEL SUPERSPIN RELAZIONI DIMENSIONALI ED INDETERMINAZIONE Corrado Malanga - Luciano Pederzoli SST- SuperSpin Theory TEORIA.
LE TRASFORMAZIONI GEOMETRICHE
Transcript della presentazione:

Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht

La programmazione dei videogiochi Contesto di programmazione molto specializzato e complesso Ricco di “sfide” informatiche (gestione memoria-prestazioni, periferiche, rete…) Richiede la conoscenza della fisica e della geometria Elemento trainante dell’evoluzione tecnologica del PC (in particolare della grafica) Settore in forte espansione

Industria dei videogiochi Fatturato italiano 2007 (fonte AESVI): oltre 1 miliardo di euro (+37% rispetto al 2006) 2.374.057 console vendute in Italia nel 2007 (5 al minuto) Fatturato globale stimato nel 2007 di 37 miliardi di dollari (fonte Price Waterhouse)

Perché il C++ Linguaggio maturo e stabile Adatto alla programmazione sia a basso livello che ad alto livello Supporto al paradigma di programmazione orientato agli oggetti Supporto alla programmazione generica Larga disponibilità di compilatori e librerie anche gratuiti

Perché OpenGL Libreria per la grafica 3D (solo grafica) Libreria open, guidata da un comitato (ARB) formato da un insieme di aziende, con specifiche pubbliche Matura (esiste dal 1992, adesso è alla versione 2.1) Multipiattaforma (Windows, Linux/UNIX, MacOSX,…)

Giochi che utilizzano OpenGL Call of Duty Doom 3 Flight Gear Half-Life Quake I, II, III e IV Unreal Wolfestein Return to Castle …

Applicazioni che utilizzano OpenGL Autodesk 3ds Max Blender Cinema 4D LightWave 3D Maya (“Il signore degli Anelli”, “Harry Potter”, …) Rhino3D, SketchUp, SolidThinking …

Cos’è OpenGL Nasce come libreria per la grafica 2D/3D per macchine high-end all’interno dei laboratori di Silicon Graphics È un’API grafica che espone al programmatore una serie di funzioni per la manipolazione di scene 3D Possiede delle estensioni per altri aspetti (gestione delle periferiche, finestre,…)

Cosa serve per creare un’applicazione Un compilatore C/C++ La libreria OpenGL con gli header Una o più librerie per la gestione di ciò che non è pura grafica (window management, input handling, ecc.) Opzionalmente un ambiente di sviluppo Tools per la creazione delle “grafica” se si vuole fare qualcosa di professionale

Cosa utilizzeremo in Windows Ambiente di sviluppo CodeBlocks 8.02 che contiene: compilatore mingw32, porting del noto gcc in ambiente windows Libreria OpenGL (e estensioni) Libreria SDL per maneggiare tutti gli altri aspetti (da installare separatamente)

Cosa utilizzeremo in Linux Ambiente di sviluppo CodeBlocks 8.02 gcc (g++) Mesa (clone OpenGL per Linux) SDL per tutti gli altri aspetti

Differenze grafica 2D-3D La grafica 2D assomiglia ai cartoni animati di una volta (Biancaneve) L’effetto di movimento si ottiene spostando velocemente oggetti precedentemente disegnati Esiste il solo punto di vista frontale

Differenze grafica 2D-3D La grafica 3D assomiglia ai cartoni animati moderni realizzati al computer (da Toy Story in poi)

Aspetti tipici della grafica 3D Vengono creati dei modelli tridimensionali Esistono infiniti punti di vista, basta spostare la “telecamera” L’ambiente e tutto ciò che contiene devono comunque essere proiettati su una superficie bidimensionale Effetti come sfumature, ombre, luci, trasparenze ecc. vengono realizzati a costo zero (per il programmatore)

Pipeline grafica La geometria e le texture passano attraverso queste fasi Determinazione della visibilità Clippling Culling Occlusion testing Determinazione della risoluzione (LOD) Trasformazioni geometriche e illuminazione Rasterizzazione

Come funziona OpenGL Per il programmatore OpenGL è un’API grafica che lo astrae dall’hardware sottostante, permettendo di dichiarare degli oggetti geometrici e le operazioni che devono essere effettuate su di essi. E’ come una macchina a stati e ogni istruzione va a modificarne lo stato interno

OpenGL + SDL SDL (Simple DirectMedia Layer) è una libreria per l’accesso all’hardware che utilizzeremo insieme a OpenGL per gestire tutti gli aspetti non legati alla grafica Questo ci permetterà di creare programmi che gireranno su tutte le piattaforme che supportano SDL e OpenGL semplicemente ricompilandoli

Struttura di un programma Inizializzazione SDL Inizializza la libreria SDL_Init( SDL_INIT_VIDEO ) Abilita il double buffering SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); Setta la modalità video SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, videoFlags );

Struttura di un programma Inizializzazione OpenGL Vengono impostati una serie di parametri secondo ciò che si desidera ottenere Esempi: Settare il colore di sfondo Impostare i vari buffer Abilitare alcuni test Scegliere la prospettiva

Struttura di un programma Main loop: è un ciclo che termina generalmente quando si chiude il programma e al cui interno: si processano gli eventi (input dell’utente, comunicazioni di rete, …) si eseguono altri task (AI, simulazione del modello fisico,…) si disegna a video

Disegno in immediate mode Vengono date una serie di istruzioni fra un blocco di inizio e uno di fine, che vengono eseguite immediatamente glBegin(MODE); …… glEnd(); ISTRUZIONI

Disegno in immediate mode Le istruzioni possono rappresentare i vertici di una figura, espressi con le coordinate x,y,z in un piano cartesiano tridimensionale y (3, 3, 3) x z

Disegno in immediate mode A seconda del mode prescelto vengono interpretate le istruzioni in modo diverso Esistono 10 mode: GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON.

OpenGL Mode

Colorare una figura I colori possono essere rappresentati in formato RGB o RGBA L’istruzione glColor (in tutte le sue versioni) modifica il colore di tutte le primitive disegnate da quell’istruzione in poi A seconda dello shade model viene applicata un’interpolazione fra i colori

Trasformazioni in 3D Esistono tre trasformazioni che possono essere applicate ad una figura nello spazio tridimensionale Traslazione: spostamento secondo una o più direzioni parallele agli assi coordinati Rotazione: rotazione di un certo angolo attorno ad un vettore di riferimento Scalatura: modifica delle dimensioni rispetto ai tre assi coordinati

Applicazione di trasformazioni Siccome un punto nello spazio tridimensionale è individuato dalle sue 3 coordinate e una figura è composta da un insieme di punti, applicare una trasformazione ad una figura è equivalente ad applicarla a tutti i punti che la compongono. Un punto viene rappresentato da un vettore

Vettori Nella geometria tridimensionale i punti si rappresentano utilizzando le coordinate omogenee, che utilizzano vettori a 4 dimensioni perché è “comodo” X Y Z W X Y Z 1 X / W Y / W Z / W X Y Z

Matrici di trasformazione Per trasformare un punto applicando una delle operazioni viste in precedenza è sufficiente moltiplicarlo per una matrice opportunamente definita Queste matrici sono 4x4 e sono fatte in modo da avere nell’ultima riga i valori 0 0 0 1

Prodotto matrice per vettore Il prodotto matrice per vettore è così definito: ux vx wx tx uy vy wy ty uz vz wz tz 0 0 0 1 px py pz 1 ux*px + vx*py + wx*pz + tx uy*px + vy*py + wy*pz + ty uz*px + vz*py + wz*pz + tz 1 x =

Matrice di traslazione 1 0 0 tx 0 1 0 ty 0 0 1 tz 0 0 0 1

Traslazione applicata Supponendo di voler traslare il punto di 3 unità secondo l’asse delle x: 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 3 5 9 1 1*3 + 0*5 + 0*9 + 1 0*3 + 1*5 + 0*9 + 0 0*3 + 0*5 + 1*9 + 0 1 x =

Matrice di scalatura sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1

Matrici di rotazione cos(a) -sin(a) 0 0 sin(a) cos(a) 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 cos(a) -sin(a) 0 0 sin(a) cos(a) 0 0 0 0 1 cos(a) 0 -sin(a) 0 0 0 0 1 sin(a) 0 cos(a) 0 0 0 0 1 Rotazione intorno all’asse Z Rotazione intorno all’asse X Rotazione intorno all’asse Y

Utilizzo di quadriche Una quadrica in 3D è ogni superficie rappresentata da un'equazione polinomiale del secondo ordine nelle variabili spaziali (coordinate).

Esempi di quadriche Ellissoide Cilindro Sfera

Libreria GLU La libreria GLU (GL Utility) racchiude una serie di funzioni “comode” Prima si crea una quadrica GLUquadricObj* gluNewQuadric( ) che crea memoria per i parametri della superficie e ritorna un puntatore Poi si sceglie il tipo

Esempio delle sfera void gluSphere(GLUquadricObj *qobj, GLdouble radius, GLint slices, GLint stacks) dove: radius è il raggio della sfera slices sono le fette in direzione longitudinale stacks sono le fette in direzione latitudinale

Illuminazione Serve a dare realismo agli ambienti e aumenta il senso di tridimensionalità Il nostro cervello per avere la senzazione di tridimensionalità sfrutta le informazioni prospettiche, ma non basta L’illuminazione consente agli oggetti di proiettare dei riflessi che ci permettono di intuirne il volume

Differenti tipi di luce Luce ambiente: luce che “riempie” l’ambiente e provvede l’illuminazione di base Luce diffusa: luce riflessa dalle varie superfici in tutte le direzioni Luce riflessa: luce riflessa dalle superfici secondo la “direzione dello specchio”

Semplice modello di illuminazione dove: Ka,Ks e Kd sono i pesi che vengono dati alle varie componenti (in generale la loro somma è uno) e Colore Ambiente, ColoreDiffuso e ColoreRiflesso sono i colori che vengono associati ai vari tipi di luce

Vettori di illuminazione Normale (N) Sorgente luminosa(L) Luce riflessa (R) a a Osservatore (V)

Illuminazione in OpenGL OpenGL si occupa di implementare la formula corretta, noi dobbiamo semplicemente inserire i parametri dell’illuminazione e dei materiali che compongono i nostri oggetti Dobbiamo inoltre specificare la normale alle superfici per ottenere l’effetto desiderato

Funzioni per l’illuminazione glEnable(GL_LIGHTING) Abilita il calcolo delle luci. Senza questa chiamata non funziona niente. glEnable (GL_LIGHTn) Abilita la luce n-esima, dove n va almeno da 0 a 9 (cioè si possono piazzare dieci luci diverse in una scena)

Funzioni per l’illuminazione glLightfv(GLenum luce, GLenum tipo_di_luce, GLfloat* parametri_luce) dove luce è il numero di luce che stiamo settando (GL_LIGHTn), tipo_di_luce definisce se è ambiente, diffusa o riflessa o di altri tipi e parametri_luce definiscono il colore della luce come vettore RGBA