La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

OpenGL Particle System

Presentazioni simili


Presentazione sul tema: "OpenGL Particle System"— 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 d’artificio, le esplosioni, le fontane, la scia di un aereo…

3 Quake II (ID software 1997)

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

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

6 Come si realizza in OpenGL?
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

7 Come si realizza in OpenGL?
Ogni particella ha una posizione, un vettore direzionale e un tempo di vita. 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; } Dopo ogni istante questi valori possono venire aggiornati in base al fenomeno da modellare

8 Come si realizza in OpenGL?
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

9 Gli effetti 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 The image is created by John Tsiombikas, using the free-software 3D visualization system ( and placed in the public domain.

10 Ricapitolando 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

11 Appendice: uso di FrameTimer
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

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


Scaricare ppt "OpenGL Particle System"

Presentazioni simili


Annunci Google