Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Obiettivo: creazione di un sistema particellare con simulazione di alcuni parametri fisici (gravità, attrito, urti tra particelle...)
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Impostazione lavoro Adotteremo un approccio incrementale, aggiungendo feature ad ogni nuova versione Caratteristiche iniziali oggetti: Dimensione Posizione Velocità Caratteristiche iniziali ambiente: Gravità
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Struttura sketch Classe Ball descrive le palline e i loro movimenti nello spazio Main definisce le proprietà dell'ambiente tiene traccia delle palline in esso contenute tramite una lista dinamica Alcune variabili di supporto: t : durata in s di un frame ( 1/frameRate ) ppm : pixel per metro
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Simulazione fisica - moto Presenza di gravità moto accelerato In realtà conviene risolvere l'accelerazione come cambio di velocità istantanea, considerando uniforme il moto tra un frame e il successivo
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls La classe PVector Inserita nelle ultime versioni di Processing all'interno della libreria standard, permette di gestire in maniera facile e veloce i calcoli vettoriali (sia 2D che 3D) Moto pallina in 2 righe di codice! :) Void move(PVector field, float t) { vel.add(PVector.mult(field,t)); pos.add(PVector.mult(vel,ppm*t)); }
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Versione 0: ultimi ritocchi Aggiunta di semplice interazione: Mouse click sx crea pallina Definizione di un limite superiore al numero di palline presenti ( maxBalls) CODICE
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Gestione collisioni Due possibili approcci: A priori Calcolo preciso dell'urto con equazioni differenziali PRIMA che esso avvenga A posteriori Gestione urto DOPO che esso è avvenuto Ci concentreremo sul secondo poiché di più facile trattazione
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto con le pareti Se la distanza tra il centro della pallina e la parete è inferiore al raggio, la componente della velocità perpendicolare alla parete viene invertita di segno e moltiplicata per un coeff. tra 0 e 1, che regola l'elasticità dell'urto
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Fix up Fase fondamentale nella collision response a posteriori, corregge la compenetrazione tra oggetti (che è già avvenuta) Parte delicatissima, nonché fonte di instabilità e comportamenti indesiderati In genere si tratta di un processo per tentativi ed errori, alla ricerca di un risultato sufficientemente verosimile
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Rotolamento contro le pareti Ogni volta che la pallina si trova in contatto con una parete, la componente della velocità parallela alla parete viene decrementata del suo valore moltiplicato per un coefficiente d'attrito tra 0 e 1
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Versione 1: ultimi ritocchi Aggiunta rotazione del campo gravitazionale Aggiunta di un semplice puntatore triangolare per indicare la direzione del campo gravitazionale CODICE
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto tra particelle E' la parte più complessa, sia a livello concettuale che computazionale Per ogni pallina si calcola la distanza con ogni altra pallina, e se essa è minore della somma dei raggi c'è una collisione La complessa interazione tra gli oggetti è approssimata calcolando singolarmente gli urti per ogni coppia di palline
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto elastico (masse uguali) E' la parte più complessa, sia a livello concettuale che computazionale Per ogni pallina si calcola la distanza con ogni altra pallina, e se essa è minore della somma dei raggi c'è una collisione La complessa interazione tra gli oggetti è approssimata calcolando singolarmente gli urti per ogni coppia di palline
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto elastico (masse uguali) 1. E' comodo cambiare sistema di riferimento e considerare fermo uno dei due oggetti, sottraendo la sua velocità a entrambe le entità in gioco
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto elastico (masse uguali) 2. La velocità dell'oggetto in moto viene scomposta rispetto all'angolo di incidenza dell'urto
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto elastico (masse uguali) 3. La componente normale è la velocità finale dell'oggetto inizialmente fermo, mentre l'altra componente è la velocità finale dell'oggetto in collisione
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls Urto elastico (masse uguali) 4. Occorre infine tornare al vechio sistema di riferimento, aggiungendo a entrambi gli oggetti la velocità iniziale di quello che avevamo fermato CODICE
Corso di Laurea in Comunicazione Digitale Corso di Realtà Virtuali - a.a. 2009/10 Prof. Paolo Pasteris Tutor: Stefano Baldan Bouncing Balls E se le masse non sono uguali? Se l'urto è elastico ma le masse non sono uguali, allora è il momento che si conserva, mentre consideriamo fermo il centro di massa Per ulteriori approfondimenti: e CODICE FINALE