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

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

Embed Size (px)

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