1 / 45

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

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

velma
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 0 0 0 1

  30. 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 =

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

  32. 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 =

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

  34. Matrici di rotazione cos(a) -sin(a) 0 0 sin(a) cos(a) 0 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

  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

More Related