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.