Physik-Engine, die mehrere Attraktoren verarbeiten kann?

9

Ich stelle ein Spiel zusammen, das hauptsächlich mit dreidimensionaler Schwerkraft gespielt wird.

Damit meine ich mehrere Planeten / Sterne / Monde, die sich realistisch verhalten, sowie Pfadaufzeichnung und Pfadvorhersage im Gravitationsfeld.

Ich habe mir eine Vielzahl von Physik-Engines wie Bullet , Tokamak oder Newton angesehen , aber keine davon scheint geeignet zu sein, da ich die Schwerkraft-Engine in ihrem Rahmen im Wesentlichen neu schreiben müsste.

Kennen Sie eine Physik-Engine, die in der Lage ist, mit mehreren von einander angezogenen Körpern umzugehen?

Ich brauche kein Szenegraph-Management oder Rendering, nur Kernphysik. (Kollisionserkennung wäre ein Bonus, ebenso wie die Dynamik des starren Körpers).


Mein Hintergrund liegt in der Physik, daher könnte ich eine Engine schreiben, die Verlet-Integration oder RK4 (oder sogar Euler-Integration, wenn ich müsste) verwendet, aber ich würde viel lieber eine Standardlösung anpassen.

[Bearbeiten]: Es gibt einige großartige Ressourcen für die physikalische Simulation von n-Körper-Problemen online und zum Stackoverflow

brice
quelle
7
Können Sie Bullet nicht einfach verwenden und die normale Schwerkraft irgendwie deaktivieren? (Vermeiden Sie z. B. den Aufruf von applyGravity, rufen Sie setGravity mit einem Nullvektor auf, verwenden Sie BT_DISABLE_WORLD_GRAVITY ...) Nur weil Ihr gewünschter Effekt zufällig eine Form der Schwerkraft ist, müssen Sie ihn nicht über die "Schwerkraft" -APIs von erreichen können die zugrunde liegende Physik-Engine.
Neverender
Sie könnten eine Art inverse Federn verwenden
Roy T.
1
@ RoyT. Eine Feder an sich hat eine Kraft proportional zu d, während die Schwerkraft d ^ (- 2) ist (nicht einmal d ^ (- 1)). Sie können Umlaufbahnen von beiden erhalten, aber mit sehr unterschiedlichen Eigenschaften. Wenn Sie nur "eine vom Motor bereitgestellte entfernungsbasierte Einschränkung verwenden" meinen, dann ja - wenn sie eine inverse quadratische hat.
Kevin Reid
@ KevinReid Sie haben wahrscheinlich Recht, aber ich bin nicht sicher, ob ich Ihre Erklärung bekomme. Meinen Sie damit, dass die Federkräfte linear von der Entfernung und die Schwerkraft vom Quadrat abhängen?
Roy T.
1
Osmos ist ein tolles kleines Spiel. Das Beste, was ich finden konnte, war dieses Interview
Brice

Antworten:

2

Ich glaube nicht, dass Sie eine konventionelle Zeitscheiben-Physik-Engine verwenden können, da das Drei-Körper-Problem keine stabilen Umlaufbahnen zulässt.

Möglicherweise können Sie die Physik-Engine aus Stellarium oder einem anderen Astronomie-Paket herausziehen.

Ich denke jedoch, dass die beste Vorgehensweise darin besteht, einfach auf den Pfaden Ihres Planeten zu backen und sie von einem Tisch zu ziehen. Wenn Ihr Spieler die Flugbahn von Planeten nicht durch seine Aktionen beeinflussen kann, macht es keinen Sinn, eine vollständige Simulation durchzuführen.

Servetus
quelle
Eigentlich wrt das N-Körper - Problem, Sie können stabile Umlaufbahnen erhalten. Dies hängt von Ihrer Integrationsmethode ab. Ich habe sowohl mit verlet als auch mit RK4 stabile Umlaufbahnen geschafft.
Brice
Es ist ein fairer Vorschlag, die Pfade vorab zu berechnen, aber ich möchte die Systeme im laufenden Betrieb dynamisch generieren, und auch die Planeten sind nicht wirklich das, worüber ich mir Sorgen mache. Ich möchte eigentlich, dass die Schiffe von der Schwerkraft beeinflusst werden, und da diese unter der Kontrolle des Spielers stehen, kann ich die Pfade nicht vorberechnen.
Brice
Der Weg, um stabile Umlaufbahnen zu erhalten, besteht darin, symmetrische Systeme zu erstellen. Außerdem sind die Zeitskalen für die Instabilität viel länger als die Länge eines durchschnittlichen Spiels. (instabil über 100s bis 1000s Planetenbahnen, während das Spiel nicht länger als 4/5
dauern
Beispiele für stabile Bahnen, auf einen Blick des (verwendet Verlet)
Brice
1

Gibt es eine Plattformbeschränkung? Weil PhysX von nVidia genau das bietet , wonach Sie suchen, und vieles mehr .

YuriAlbuquerque
quelle
Cheers @YuriAlbuquerque, das ist ein ziemlich interessanter Hinweis. Ich habe vor, die Physik-Server-Seite und die Rendering-Client-Seite zu machen, also muss ich prüfen, ob es geeignet ist, aber das hört sich gut an.
Brice