La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht"— Transcript della presentazione:

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

2 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

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

4 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

5 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,…)

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

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

8 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,…)

9 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

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

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

12 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

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

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

15 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

16 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

17 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

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

19 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

20 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

21 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

22 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

23 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.

24 OpenGL Mode

25 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

26 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

27 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

28 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

29 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

30 Prodotto matrice per vettore
Il prodotto matrice per vettore è così definito: ux vx wx tx uy vy wy ty uz vz wz tz 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 =

31 Matrice di traslazione
tx ty tz

32 Traslazione applicata
Supponendo di voler traslare il punto di 3 unità secondo l’asse delle x: 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 =

33 Matrice di scalatura sx 0 sy sz 0

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

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

36 Esempi di quadriche Ellissoide Cilindro Sfera

37 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

38 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

39 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

40 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”

41 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

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

43 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

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

45 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


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

Presentazioni simili


Annunci Google