# 2D Spielphysik mit RigidBodies



## JVTH (11. Jan 2013)

Hi Leute,
ich wollte mal wissen, ob jemand mich in die für mich unverständlichen Formeln der Starrkörperphysik einweihen kann, da ich vorhabe so etwas mal in klein zu schreiben. Habe jetzt seit zwei Tagen nach anfängerfreundlichen Formeln gesucht, bin aber irgendtwie zu doof, um das zu verstehen, gibt es da so ein "For Dummies"-Buch?. Habe bereits grundlegendes physikalisches Wissen und wüsste, wie man eine Partikelsimulation schreibt. Die Rotation bereitet mir im Moment am meisten Probleme. Spieleprogrammierungs Grundlagen sind mir bekannt.
Oder meint ihr, dass so etwas viel zu umfangreich ist?
Danke JVTH


----------



## Marco13 (12. Jan 2013)

~"Nature is as complex as it needs to be - and not more" (oder so ähnlich). Es IST kompliziert. Bei Drehung meinst du wohl die Rotation mit Trägheitstensor und so... ? Ich hatte das irgendwann mal ausgehend von Physically Based Modeling für 3D ziemlich dumpf (und OHNE die ganzen Formeln, die es dort im Übefluß gibt, auch nur Ansatzweise nachzuvollziehen) runterprogrammiert, und das funktionierte AFAIR recht gut. Vielleicht hilft es ja. Ansonsten gibt's das natürlich alles schon fertig, Box2D | A 2D Physics Engine for Games und sein Java-Port JBox2D: A Java Physics Engine , oder PulpCore & Co...


----------



## Kr0e (12. Jan 2013)

Rigidbody Dynamics ist eines der schwersten Themen überhaupt. Hab eine meiner Abschlussarbeiten darüber geschrieben.

Die Formeln sind noch das einfachste. Das Problem ist das Integrieren deiner Bewegungsglecihungen. Einfach alle 33ms eine Beschleunigung auf eine Geschwindigkeit auf die Position zu addieren klappt nicht gut.

Im Fachbereich nennt man diese Art der manuellen Integration Eulersche Integration und ist die ungenaueste.


Kleiner Tipp: Suche nach ODE Solvern wenn du es selbst versuchen möchtest. Da haben viele begabte Mathematiker schon vieles zu verfasst. Das sollte ein Informatiker nicht nochmal machen 


Ein weiteres großes Problem ist die Kollisionerkennung und deren Behandlung. Wenn du nur mit Kugeln arbeitest, ist der Test trivial. Da reicht eine binäre Erkennung (Also in halbier-Schritten die Entfernung verringern.)

Da du 2D sagtest wird die Sache mit der Kollision um einiges einfacher aber noch lange nicht trivial. Bei der Physik wird durch 2D die Rotation fast kinderleicht. Im 3D Bereich kann das haarig werden.


Die Endfrage: Möchtest du das aus akademischer Sicht lernen oder praktisch nutzen ? Bei 2terem nimm eine Engine. Diese Engine sind gut getuned und da PCs leider so unperfekt sind was Kommazahlen angeht sind solche Engines weißt Frikkelmeisterwerke durch perfekt abgestimmte Faktoren und Toleranzen die man selbst nur mit viel Aufwand und viel Testerei hinbekommt.

Box2D (wie Marco schon erwähnt hat) ist sehr gut. Du kannst natürlich auch Bullet nehmen. Davon gibts auch einen Javaport. Eine 3D Physikengine auf 2D zu limitieren geht eigentlcih immer von Haus aus. PhysX hat damals so "Locking" Mechanismen gehabt womit man bestimmte Achsen fix halten konnte.

Wenn du nochmal genaue Infos fürs Selbermachen brauchst, sag Bescheid


----------



## JVTH (12. Jan 2013)

Danke für eure Antworte, lese mir jetzt mal den Link von Marco13 durch.
Ich habe eher nicht vor, meine Engine auch in einem Spiel zu verwenden. Es geht mir eher darum, das grundlegende Prinzip dahinter zu verstehen. jBox2D kenne ich schon, die würde ich auch verwenden. Wie lange würdet ihr denn den Arbeitsaufwand, für einen Physik-Noob, einer solchen, zB auf nur auf Dreiecke beschränkte Engine, schätzen? Es können ja ruhig mal Körper "tunneln", also es muss nicht perfekt sein.


----------



## Kr0e (12. Jan 2013)

Schwer zu sagen. Jeder Programmierer is ja unterscheidlich. Einige machen sowas in ein paar Tagen andere arbeiten jede Woche nur einmal dran. Ich denke, wenn man eine KONKRETE Vorstellung hat und vor Vorfeld das gut vorbereitet... Dann sollte das in einer Woche mit viel Fleiß machbar sein. Geht bestimmt auch schneller  Jenachdem wieviel Zeit du hast und Interesse mitbringst.

Ist auf jedenfall nichts was 1 Jahr dauert  Für meine Abschlussarbeit damals hatte ich ne Lottoziehung mit eigener Physik geschrieben. Das hat 4 Wochen gedauert aber das Programm war halt auch recht umfangreich.


----------



## Marco13 (12. Jan 2013)

@Kr0e: Wie schwierig die Integration ist hängt von verschiedenen Faktoren ab - vordergründig natürlich von der Größe der auftretenden Kräfte und der Größe des Zeitschritts. Beides genügend klein machen und schon tut's der Euler  
Die Kollisions_erkennung_ ist nicht ganz einfach - vor allem, wenn man's effizient machen will und es nicht nur um wenige und/oder einfache Objekte geht. Da kommt man um BVHs schon nicht drumrum, und allein DArüber gibt's hundete von Forschungsarbeiten. Was aber IMHO nochmal eine ganze Größenordnung schwieriger ist, ist die Kollisionsantwort, bzw. beides zusammen, wenn man das unter dem Begriff "Kollisionsbehandlung" zusammenfassen will. Nicht umsonst sind aus Boxen gemauere Wände oder Kugelhaufen ein beliebter Benchmark für solche Dinge: Zu erreichen, dass so eine Szene wirklich irgendwann _zur Ruhe kommt_ und nicht einzelne Boxes oder Kugeln rum-zittern und hüpfen ist richtig, richtig (RICHTIG) schwierig (mein Test für die damals schnell runtergehackte Rigid Body Dynamics bestand aus gutem Grund aus einem einzelnen Würfel in der Schwerelosigkeit, der nur durch zufällige Kraftstöße immer wieder in Richtung des Ursprungs geschnickt wurde  )


----------



## Kr0e (12. Jan 2013)

Marco13 hat gesagt.:


> @Kr0e: Wie schwierig die Integration ist hängt von verschiedenen Faktoren ab - vordergründig natürlich von der Größe der auftretenden Kräfte und der Größe des Zeitschritts. Beides genügend klein machen und schon tut's der Euler



DAs stimmt natürlich. Gleichschwere Kugeln z.b. mit geringen Geschwindigkeit gehen in der Tat mit Euler.

Z.B. wenn du eine Kugel mit 500 kg und eine andere mit 0.1 kg  hast und die 500er fällt krass auf die andere drauf, so dürfte Euler massives "glitchen" verursachen. Das ist auch der Grund, warum Spiele meistens unrealistische Gewichtsverteilungen haben in Spielen. Autos werden oft als 100kg angenommen statt 1500 kg etc...

Ich denke auch die Highend Verfahren sind recht einfach praktisch betrachtet, da es dafür ja Libraries gibt. Apache hat mein ich ODE Solver als Teil von Commons oder als Extrapaket.

ODE Solver


----------



## JVTH (13. Jan 2013)

Ich werde wohl keine eigene Engine erstellen(eine halbe Engine ist ja auch irgendtwie doof), sondern lieber erstmal ein richtiges Spiel auf die Beine stellen. Aber Danke, werde jetzt die Box2D Engine mit Respekt betrachten.
Habe nähmlich jemanden gefunden, der was machen möchte


----------



## Rite (15. Jan 2013)

An andere delegieren, was man selbst nicht schafft, zeugt von deutlichen Führungsqualitäten


----------



## JVTH (15. Jan 2013)

Haha, oder von Faulheit 
Nein, der macht ein 3D Spiel mit mir (benutzen da jBullet)


----------

