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

OpenGL Particle System2008 Riccardo Petelin – EGD prof. Matjaž Hmeljak

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

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 d’artificio, le esplosioni, le fontane, la scia di un aereo…

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

Quake II (ID software 1997)

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

• 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 è l’idea?

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

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

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

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

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

Come si realizza in OpenGL?

Particle(float x, float y, float z, float r, float g, float b) {

// set positionposition[0] = x; position[2] = y; position[1] = z;

// set colorcolor[0] = r; color[1] = g; color[2] = b;

// create random directiondirection[0] = (10000 - rand()%20000)/10000.0f;direction[1] = (10000 - rand()%20000)/10000.0f;direction[2] = (10000 - rand()%20000)/10000.0f;

// set random lifespanlife = 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

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

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

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

• 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 sull’alpha 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.

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

• 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

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

• 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 l’orologio di sistema, che è proporzionale al frame rate

Appendice: uso di FrameTimer

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

• 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


Recommended