¿Motor de física que puede manejar múltiples atractores?


9

Estoy armando un juego que se jugará principalmente con gravedad tridimensional.

Con eso me refiero a múltiples planetas / estrellas / lunas que se comportan de manera realista, y trazado de ruta y predicción de ruta en el campo de gravedad.

He visto una variedad de motores de física, como Bullet , tokamak o Newton , pero ninguno de ellos parece ser adecuado, ya que esencialmente tendría que volver a escribir el motor de gravedad en su marco.

¿Conoces un motor de física que sea capaz de manejar múltiples cuerpos, todos atraídos entre sí?

No necesito el manejo o renderizado de escenas gráficas, solo física básica. (la detección de colisión sería una ventaja, al igual que la dinámica del cuerpo rígido).


Mi experiencia es física, por lo que podría escribir un motor que use la integración Verlet o RK4 (o incluso la integración de Euler, si fuera necesario), pero preferiría adaptar una solución estándar.

[editar]: Existen algunos recursos excelentes para la simulación física de problemas de n-cuerpos en línea y en stackoverflow


77
¿No puedes simplemente usar Bullet y optar por no usar su fuerza de gravedad estándar de alguna manera? (por ejemplo, evite llamar a applyGravity, llame a setGravity con un vector cero, use BT_DISABLE_WORLD_GRAVITY ...) El hecho de que su efecto deseado sea una forma de gravedad no significa que deba poder lograrlo a través de las API de "gravedad" de El motor de física subyacente.
Neverender

Podría usar algún tipo de resortes inversos
Roy T.

1
@RoyT. Un resorte per se tiene una fuerza proporcional a d, mientras que la gravedad es d ^ (- 2) (ni siquiera d ^ (- 1)). Puede obtener órbitas de ambos, pero con características muy diferentes. Si solo quiere decir "usar una restricción basada en la distancia proporcionada por el motor", entonces sí, si tiene una cuadratura inversa.
Kevin Reid

@KevinReid probablemente tengas razón, pero no estoy seguro de obtener tu explicación. ¿Quiere decir que las fuerzas de resorte dependen linealmente de la distancia y la gravedad depende del cuadrado inverso?
Roy T.

1
Osmos es un pequeño gran juego. lo mejor que pude encontrar fue esta entrevista
brice

Respuestas:


2

No creo que pueda utilizar un motor de física convencional de división temporal debido a que el problema de los tres cuerpos no permitirá órbitas estables.

Es posible que pueda sacar el motor de física de Stellarium o algún otro paquete de astronomía.

Sin embargo, creo que el mejor curso de acción es simplemente hornear en los caminos de su planeta y sacarlos de una mesa. A menos que su jugador pueda afectar la trayectoria de los planetas por sus acciones, no tiene sentido hacer una simulación completa.


En realidad, el problema WRT N-cuerpo, usted puede conseguir órbitas estables. Depende de su método de integración. He manejado órbitas estables con verlet y RK4.
Brice

Es una sugerencia justa calcular previamente los caminos, pero me gustaría generar dinámicamente los sistemas sobre la marcha, y además, los planetas no son realmente lo que me preocupa. Realmente quiero que las naves se vean afectadas por la gravedad, y dado que estas estarán bajo el control del jugador, no puedo calcular previamente las rutas.
brice

La forma de obtener órbitas estables, para el registro, es hacer sistemas simétricos. Además, los plazos para la inestabilidad son mucho más largos que la duración de un juego promedio. (inestable de más de 100 a 1000 de órbitas planetarias, mientras que el juego no duraría más de 4/5)
brice

Para ver ejemplos de órbitas estables, eche un vistazo a esto (usa Verlet)
brice

1

¿Hay alguna limitación de plataforma? Porque PhysX , de nVidia, tiene exactamente lo que estás buscando y más .


Saludos @YuriAlbuquerque que es una pista bastante interesante. Estoy planeando hacer el lado del servidor de física y el lado del cliente de representación, así que tendré que verificar si es adecuado, pero eso suena bien.
Brice
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.