Motore fisico in grado di gestire più attrattori?


9

Sto mettendo insieme un gioco che verrà giocato principalmente con gravità tridimensionale.

Con questo intendo più pianeti / stelle / lune che si comportano in modo realistico e che tracciano il percorso e predicono il percorso nel campo di gravità.

Ho esaminato una varietà di motori fisici, come Bullet , tokamak o Newton , ma nessuno di questi sembra essere adatto, dato che dovrei essenzialmente riscrivere il motore a gravità nella loro struttura.

Conosci un motore fisico in grado di gestire corpi multipli attratti l'uno dall'altro?

Non ho bisogno della gestione dello scenario, o del rendering, solo della fisica di base. (il rilevamento delle collisioni sarebbe un vantaggio, così come la dinamica del corpo rigido).


Il mio background è in fisica, quindi sarei in grado di scrivere un motore che utilizza l'integrazione di Verlet o RK4 (o anche l'integrazione di Euler, se dovessi), ma preferirei molto adattare una soluzione standard.

[modifica]: ci sono alcune grandi risorse per la simulazione fisica dei problemi di n-body online e su stackoverflow


7
Non puoi semplicemente usare Bullet e rinunciare alla sua forza di gravità standard in qualche modo? (ad esempio, evita di chiamare applyGravity, chiama setGravity con un vettore zero, usa BT_DISABLE_WORLD_GRAVITY ...) Solo perché l'effetto desiderato sembra essere una forma di gravità non significa che devi essere in grado di raggiungerlo attraverso le API "gravità" di il motore fisico sottostante.
Neverender,

Potresti usare una specie di molle inverse
Roy T.

1
@RoyT. Una molla di per sé ha una forza proporzionale a d mentre la gravità è d ^ (- 2) (nemmeno d ^ (- 1)). Puoi ottenere orbite da entrambi, ma con caratteristiche molto diverse. Se intendi semplicemente "usa un vincolo basato sulla distanza fornito dal motore", allora sì, se ha un quadrato inverso.
Kevin Reid,

@KevinReid probabilmente hai ragione, ma non sono sicuro di avere la tua spiegazione. Vuoi dire che le forze della molla dipendono linearmente dalla distanza e la gravità dipende dal quadrato inverso?
Roy T.

1
Osmos è un gran bel gioco. la migliore che ho potuto trovare è stata questa intervista
brice

Risposte:


2

Non penso che sarai in grado di utilizzare un motore fisico a timeslice convenzionale a causa del problema dei tre corpi che non permetterà orbite stabili.

Potresti essere in grado di strappare il motore fisico da Stellarium o da qualche altro pacchetto di astronomia.

Tuttavia, penso che il miglior modo di agire sia semplicemente quello di infornare i percorsi del tuo pianeta ed estrarli da un tavolo. A meno che il tuo giocatore non possa effettivamente influenzare la traiettoria dei pianeti con le sue azioni, non ha senso fare una simulazione completa.


In realtà, scrivendo il problema N-body, puoi ottenere orbite stabili. Dipende dal tuo metodo di integrazione. Ho gestito orbite stabili sia con verlet che con RK4.
brice,

È un buon suggerimento per pre-calcolare i percorsi, ma mi piacerebbe generare dinamicamente i sistemi al volo, e inoltre, i pianeti non sono davvero ciò di cui sono preoccupato. Voglio davvero che le navi siano influenzate dalla gravità, e poiché saranno sotto il controllo del giocatore, non posso pre-calcolare i percorsi.
brice il

Il modo per ottenere orbite stabili, per la cronaca, è creare sistemi simmetrici. Inoltre, i tempi per l'instabilità sono molto più lunghi rispetto alla lunghezza di un gioco medio. (instabile tra le 100 e le 1000 orbite planetarie, mentre il gioco non sarebbe durato più di 4/5)
brice

Per esempi di orbite stabili, dai un'occhiata a questo (usa Verlet)
brice il

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.