Motor de física que pode lidar com múltiplos atratores?

9

Estou montando um jogo que será jogado principalmente com gravidade tridimensional.

Com isso quero dizer que múltiplos planetas / estrelas / luas se comportam de maneira realista, e plotagem de caminhos e previsão de caminhos no campo gravitacional.

Eu observei uma variedade de mecanismos de física, como Bullet , tokamak ou Newton , mas nenhum deles parece ser adequado, pois eu teria que reescrever o mecanismo de gravidade em sua estrutura.

Você conhece um mecanismo de física capaz de lidar com vários corpos, todos atraídos um pelo outro?

Não preciso de gerenciamento de gráficos de cenários, nem de renderização, apenas de física básica. (a detecção de colisão seria um bônus, assim como a dinâmica corporal rígida).


Minha formação é em física, então eu seria capaz de escrever um mecanismo que usa a integração Verlet ou RK4 (ou mesmo a integração Euler, se necessário), mas prefiro adaptar uma solução pronta para uso.

[edit]: Existem ótimos recursos para simulação física de problemas de n corpos, on - line e no stackoverflow

brice
fonte
7
Você não pode simplesmente usar o Bullet e optar por não usar sua força de gravidade padrão? (por exemplo, evite chamar applyGravity, chame setGravity com um vetor zero, use BT_DISABLE_WORLD_GRAVITY ...) Só porque o efeito desejado é uma forma de gravidade, não significa que você precise alcançá-lo através das APIs "gravidade" de o mecanismo de física subjacente.
Neverender
Você poderia usar algum tipo de molas inversas
Roy T.
11
@RoyT. Uma mola em si tem uma força proporcional a d, enquanto a gravidade é d ^ (- 2) (nem mesmo d ^ (- 1)). Você pode obter órbitas de ambos, mas com características muito diferentes. Se você apenas quer dizer “use uma restrição baseada em distância fornecida pelo mecanismo”, então sim - se ela tiver uma quadratura inversa.
22812 Kevin Reid
@ KevinReid você provavelmente está certo, mas não tenho certeza se entendi sua explicação. Você quer dizer que as forças da mola são lineares dependentes da distância e a gravidade é dependente do quadrado inverso?
Roy T.
11
Osmos é um ótimo joguinho. o melhor que eu poderia encontrar era esta entrevista
Brice

Respostas:

2

Eu não acho que você será capaz de usar um mecanismo físico de divisão do tempo convencional, porque o problema dos três corpos não permitirá órbitas estáveis.

Você pode arrancar o mecanismo de física do Stellarium ou de algum outro pacote de astronomia.

No entanto, acho que o melhor curso de ação é simplesmente assar nos caminhos do seu planeta e tirá-los de uma mesa. A menos que seu jogador possa realmente afetar a trajetória dos planetas por suas ações, não faz sentido fazer uma simulação completa.

servetus
fonte
Na verdade, com o problema do corpo N, você pode obter órbitas estáveis. Depende do seu método de integração. Eu gerenciei órbitas estáveis ​​com o verlet e o RK4.
Brice
É uma sugestão justa para pré-calcular os caminhos, mas eu gostaria de gerar dinamicamente os sistemas em tempo real, e também, os planetas não são realmente o que me preocupa. Na verdade, eu quero que as naves sejam afetadas pela gravidade e, uma vez que elas estarão sob controle do jogador, não podem pré-calcular os caminhos.
26612 brice
A maneira de obter órbitas estáveis, para o registro, é criar sistemas simétricos. Além disso, os prazos de instabilidade são muito maiores do que a duração de um jogo médio. (100s mais instável para 1000s das órbitas planetárias, enquanto o jogo não iria durar mais tempo do que 4/5)
Brice
Para exemplos de órbitas estáveis, ter um olhar para este (usa Verlet)
Brice
1

Existe alguma limitação de plataforma? Porque o PhysX , da nVidia, tem exatamente o que você está procurando e muito mais .

YuriAlbuquerque
fonte
Felicidades @YuriAlbuquerque que é uma vantagem bastante interessante. Estou planejando fazer o lado do servidor de física e o lado do cliente de renderização, então terei que verificar se é adequado, mas isso soa bem.
Br26