Come simulare la caduta delle piume in box2d?


10

Sto lavorando con AndEngine con estensione Box2d, ma anche la risposta generale o un'idea concettuale saranno apprezzate.

Ho oggetti simili a piume in un mondo di vista laterale 2D che voglio far parte della simulazione fisica. Sto usando uno smorzamento lineare per far cadere lentamente la "piuma". Potrebbe non essere una buona idea, forse dovrei piuttosto applicare la forza in ogni aggiornamento, ma tuttavia funziona e fa sembrare l'oggetto "leggero" e sembra che ci sia aria con resistenza.

Ora, come posso rendere gli oggetti realmente come piume che cadono nell'aria?

In particolare sto cercando due tipi di oggetti: lunghi con bassa densità, che dovrebbero spostarsi verso il basso con un movimento oscillante lento e oggetti quadrati che cambieranno casualmente traiettoria. Sarebbe bello se questa potesse essere una simulazione e la lunghezza sarebbe un parametro: più è lungo l'oggetto, più oscilla. In questo momento voglio simulare piume, foglie e fiocchi di neve in un mondo di cartoni animati.

Percorsi di oggetti che cadono


2
Che ne dici di uno screenshot o di uno schizzo concettuale o qualcosa del genere? Dopotutto, ci sono tonnellate di cose diverse che potresti considerare una piuma, e direi che la maggior parte si comporterà diversamente in base alla tua situazione.
Mario,

Aggiunte ulteriori informazioni e un'immagine.
MartinTeeVarga,

Risposte:


6

Proprio come l'atterraggio sulla luna, dovresti fingere . La fisica dell'autorotazione indotta da flutter, tumble e vortex è complessa. Ci sono articoli sulla simulazione di questo effetto e producono alcune adorabili animazioni Java .

Ma andrei anche oltre nel tuo finto e implementerei qualcosa come un'onda sinusoidale crescente per animare il movimento.

inserisci qui la descrizione dell'immagine

Ovviamente ti consigliamo di modificare i valori iniziali, il tasso di aumento indipendente dell'ampiezza e la frequenza fino a ottenere qualcosa che si avvicini a ciò che desideri. Vorresti buttare un po 'di casualità per renderlo interessante. Inoltre, man mano esempio mostra, oggetti molto leggeri con elevata superficie potrebbe effettivamente andare fino in prossimità dei bordi delle loro onde. Pertanto, le onde al di sopra di una certa ampiezza dovrebbero iniziare a considerare un valore di spazzamento, con un valore massimo limitato.

Meno massa e più superficie ha un oggetto, più aumenta l'ampiezza e la frequenza dell'onda sinusoidale. Più massa e meno superficie dovrebbero tradursi in una diminuzione dell'ampiezza e della frequenza.


3
** Cospiratore **
Mikolaj Marcisz,

Ok, quindi posso avere due funzioni, un'onda sinusoidale crescente che controllerà il movimento orizzontale, quindi una funzione che controllerà il movimento verticale e probabilmente dipenderà dalla distanza dal centro dell'oggetto e avrà un cappuccio che interromperà il movimento e rispedirlo ... Se trovo una tale funzione combinata che mi darà una forza, come posso applicare la forza? In ogni tick del motore un po 'in base al tempo trascorso? Non ho mai lavorato con box2d in precedenza.
MartinTeeVarga,

Sembra che funzionerà bene, lasciando che la gravità gestisca il resto. Esistono diversi modi per gestire la forza. Probabilmente sarebbe in ogni tick del motore, in base al tempo trascorso come dici tu. Sarebbero forze di impulso, il che significa momentaneo per quel telaio. Vedi questa domanda per saperne di più (è lo stesso anche se non stai usando Cocos2D come nella domanda).
MichaelHouse
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.