La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Alessandro Bugatti – ITIS B. Castelli Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht.

Presentazioni simili


Presentazione sul tema: "Alessandro Bugatti – ITIS B. Castelli Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht."— Transcript della presentazione:

1 Alessandro Bugatti – ITIS B. Castelli Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht

2 Alessandro Bugatti – ITIS B. Castelli 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 dellevoluzione tecnologica del PC (in particolare della grafica) Settore in forte espansione

3 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli Applicazioni che utilizzano OpenGL Autodesk 3ds Max Blender Cinema 4D LightWave 3D Maya (Il signore degli Anelli, Harry Potter, …) Rhino3D, SketchUp, SolidThinking …

8 Alessandro Bugatti – ITIS B. Castelli Cosè OpenGL Nasce come libreria per la grafica 2D/3D per macchine high-end allinterno dei laboratori di Silicon Graphics È unAPI 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 Alessandro Bugatti – ITIS B. Castelli Cosa serve per creare unapplicazione 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli Cosa utilizzeremo in Linux Ambiente di sviluppo CodeBlocks 8.02 gcc (g++) Mesa (clone OpenGL per Linux) SDL per tutti gli altri aspetti

12 Alessandro Bugatti – ITIS B. Castelli Differenze grafica 2D-3D La grafica 2D assomiglia ai cartoni animati di una volta (Biancaneve) Leffetto di movimento si ottiene spostando velocemente oggetti precedentemente disegnati Esiste il solo punto di vista frontale

13 Alessandro Bugatti – ITIS B. Castelli Differenze grafica 2D-3D La grafica 3D assomiglia ai cartoni animati moderni realizzati al computer (da Toy Story in poi)

14 Alessandro Bugatti – ITIS B. Castelli Aspetti tipici della grafica 3D Vengono creati dei modelli tridimensionali Esistono infiniti punti di vista, basta spostare la telecamera Lambiente 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli Come funziona OpenGL Per il programmatore OpenGL è unAPI grafica che lo astrae dallhardware 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 Alessandro Bugatti – ITIS B. Castelli OpenGL + SDL SDL (Simple DirectMedia Layer) è una libreria per laccesso allhardware 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 dellutente, comunicazioni di rete, …) –si eseguono altri task (AI, simulazione del modello fisico,…) –si disegna a video

21 Alessandro Bugatti – ITIS B. Castelli Vengono date una serie di istruzioni fra un blocco di inizio e uno di fine, che vengono eseguite immediatamente glBegin(MODE); …… glEnd(); Disegno in immediate mode ISTRUZIONI

22 Alessandro Bugatti – ITIS B. Castelli 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 x y z (3, 3, 3)

23 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli OpenGL Mode

25 Alessandro Bugatti – ITIS B. Castelli Colorare una figura I colori possono essere rappresentati in formato RGB o RGBA Listruzione glColor (in tutte le sue versioni) modifica il colore di tutte le primitive disegnate da quellistruzione in poi A seconda dello shade model viene applicata uninterpolazione fra i colori

26 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli Vettori Nella geometria tridimensionale i punti si rappresentano utilizzando le coordinate omogenee, che utilizzano vettori a 4 dimensioni perché è comodo X / W Y / W Z / W XYZWXYZW XYZXYZ XYZ1XYZ1

29 Alessandro Bugatti – ITIS B. Castelli 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 nellultima riga i valori

30 Alessandro Bugatti – ITIS B. Castelli 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 x= ux*px + vx*py + wx*pz + tx uy*px + vy*py + wy*pz + ty uz*px + vz*py + wz*pz + tz 1

31 Alessandro Bugatti – ITIS B. Castelli Matrice di traslazione tx ty tz

32 Alessandro Bugatti – ITIS B. Castelli Traslazione applicata Supponendo di voler traslare il punto di 3 unità secondo lasse delle x: x= 1*3 + 0*5 + 0* *3 + 1*5 + 0* *3 + 0*5 + 1*

33 Alessandro Bugatti – ITIS B. Castelli Matrice di scalatura sx sy sz

34 Alessandro Bugatti – ITIS B. Castelli Matrici di rotazione cos( ) -sin( ) 0 0 sin( ) cos( ) cos( ) -sin( ) 0 0 sin( ) cos( ) cos( ) 0 -sin( ) sin( ) 0 cos( ) Rotazione intorno allasse Z Rotazione intorno allasse X Rotazione intorno allasse Y

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

36 Alessandro Bugatti – ITIS B. Castelli Esempi di quadriche Ellissoide CilindroSfera

37 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Alessandro Bugatti – ITIS B. Castelli 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 Lilluminazione consente agli oggetti di proiettare dei riflessi che ci permettono di intuirne il volume

40 Alessandro Bugatti – ITIS B. Castelli Differenti tipi di luce Luce ambiente: luce che riempie lambiente e provvede lilluminazione 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 Alessandro Bugatti – ITIS B. Castelli Semplice modello di illuminazione dove: K a,K s e K d 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 Alessandro Bugatti – ITIS B. Castelli Vettori di illuminazione Osservatore (V) Sorgente luminosa(L) Normale (N) Luce riflessa (R)

43 Alessandro Bugatti – ITIS B. Castelli Illuminazione in OpenGL OpenGL si occupa di implementare la formula corretta, noi dobbiamo semplicemente inserire i parametri dellilluminazione e dei materiali che compongono i nostri oggetti Dobbiamo inoltre specificare la normale alle superfici per ottenere leffetto desiderato

44 Alessandro Bugatti – ITIS B. Castelli Funzioni per lilluminazione 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 Alessandro Bugatti – ITIS B. Castelli Funzioni per lilluminazione 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 "Alessandro Bugatti – ITIS B. Castelli Corso di programmazione videogiochi 3 D con C++, OpenGL e Irrlicht."

Presentazioni simili


Annunci Google