Text of OpenGL Particle System 2008 Riccardo Petelin – EGD prof. Matjaž Hmeljak
Slide 1
OpenGL Particle System 2008 Riccardo Petelin EGD prof. Matja
Hmeljak
Slide 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
Slide 3
Quake II (ID software 1997)
Slide 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?
Slide 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.
Slide 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?
Slide 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] = (10000 - rand()%20000)/10000.0f;
direction[1] = (10000 - rand()%20000)/10000.0f; direction[2] =
(10000 - rand()%20000)/10000.0f; // 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
Slide 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?
Slide 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.
Slide 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
Slide 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
Slide 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