La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

OpenGL Particle System 2008 Riccardo Petelin – EGD prof. Matjaž Hmeljak.

Presentazioni simili


Presentazione sul tema: "OpenGL Particle System 2008 Riccardo Petelin – EGD prof. Matjaž Hmeljak."— Transcript della presentazione:

1 OpenGL Particle System 2008 Riccardo Petelin – EGD prof. Matjaž Hmeljak

2 Cosè? A cosa serve? E un modello matematico per rappresentare su calcolatore fenomeni naturali con particolari caratteristiche Sono fenomeni in cui è possibile individuare una sorgente e un numero molto grande di costituenti elementari Esempi tipici sono i fuochi dartificio, le esplosioni, le fontane, la scia di un aereo…

3 Quake II (ID software 1997)

4 Molti fenomeni naturali sono costituiti da un numero arbitrariamente grande di costituenti elementari (particelle) Ogni particella ha un comportamento nello spazio e un ciclo di vita descritti da una variabile aleatoria con densità di probabilità nota e dipendente del fenomeno da modellare Ogni realizzazione del modello è quindi sempre diversa ma tutte le particelle nascono dalla stessa sorgente Qual è lidea?

5 Come si realizza ? Y X Z X, Y, Z sono variabili aleatorie. Nella mia realizzazione ho usato la distribuzione di probabilità uniforme, ma qualsiasi altra distribuzione andrebbe ugualmente bene. T=0 Y X Z T=1 Y X Z T=2 E possibile inserire forze esterne che agiscono sulle particelle, come la gravità.

6 Nel mio esempio ho utilizzato le liste concatenate (facendo uso dei puntatori, tipici del C) Esempi più complessi fanno uso dei Vertex array (o Vertex buffer), ma la realizzazione è analoga Come si realizza in OpenGL?

7 Particle(float x, float y, float z, float r, float g, float b) { // set position position[0] = x; position[2] = y; position[1] = z; // set color color[0] = r; color[1] = g; color[2] = b; // create random direction direction[0] = ( rand()%20000)/ f; direction[1] = ( rand()%20000)/ f; direction[2] = ( rand()%20000)/ f; // set random lifespan life = rand()%15000/9500.0f; } Ogni particella ha una posizione, un vettore direzionale e un tempo di vita. Dopo ogni istante questi valori possono venire aggiornati in base al fenomeno da modellare

8 Ad ogni istante si creano nuove particelle che vengono appese in cima alla lista Le particelle con tempo di vita < 0 devono essere periodicamente eliminate da un garbage collector, e la struttura della lista deve essere aggiornata di conseguenza Esplorando la lista è possibile disegnare tutte le particelle nella loro posizione corrente Come si realizza in OpenGL?

9 In base ai valori intrinseci di ogni particella è possibile applicare degli effetti in fase di disegno. Esempio: Quando il tempo di vita è prossimo allo 0 agisco sullalpha channel per creare una dissolvenza Gli effetti The image is created by John Tsiombikas, using the free-software 3D visualization system (http://engfx3d.berlios.de) and placed in the public domain.

10 Esempio: Un possibile modello matematico per i fireworks potrebbe essere (X,Y,Z) unif. su tutto [0,1] 3, T gaussiana con m=3 secondi Ricapitolando

11 Estensione di terze parti che serve a garantire un frame rate costante indipendente dalla dimensione della finestra di visualizzazione Si include FrameTimer.h e si usano i 3 metodi: InitFrameTimer(); SortFrameTimer(); FrameTime(); In pratica FrameTime() fornisce il valore del differenziale dt calcolato secondo lorologio di sistema, che è proporzionale al frame rate Appendice: uso di FrameTimer

12 Rob Bateman, An introduction to Particle Systems (http://www.robthebloke.org/) EGD3D_26X1SFERA.cpp Materiale fornito durante il corso prof. Matjaž Hmeljak The Particle Systems API - David K. McAllister Ringraziamenti e Bibliografia


Scaricare ppt "OpenGL Particle System 2008 Riccardo Petelin – EGD prof. Matjaž Hmeljak."

Presentazioni simili


Annunci Google