Ich möchte eine Physik-Engine selber schreiben und brauche Hilfe bei der Physik!



  • Hallo, so verrückt es auch klingt, aber ich möchte ien Physik-Engine selber machen!
    Ich bitte niemanden, mich davon zu überzeugen eine fertige zu nehmen, weil ich den Entschluss getroffen habe es selber zu machen. Das hat 2 Gründe:

    1. Ich bezweifele sehr stark, dass es bereits eine Physik-Engine gibt, die meine Wünsche erfüllt. Ich brauche eben eine, die auf dem minimalsten Rechenlevel läuft (ich habe mit Pech ca. 1.000.000 Objekte gleichzeitig zu berechnen) und genau das kann, was ich für mein Spiel brauche.
    2. Es stckt auch ein gewisser Ehrgeiz dahinter sowas selber gemacht zu haben.

    Ich habe gute physikalische Kenntnisse in diesem Gebiet (mit 10 habe ich mir selbst den Schiefen Wurf und mit 12 den Ballistischen Wurf angeeignet (ich bin 16)) und bin sehr fix im Kopf, was heißen soll, dass ich die Art und Weise, wie man das berechnet, sicher verstehen werde.

    Für den anfang interessieren mich 2 Themen:

    1. Die Kollisionserkennung im 2(/3)-dimensionalen Raum
    2. Und wie man mit solch einer kollision umgeht.

    Ich hoffe ihr könt mir helfen.

    Ich danke euch allen, die mir dabei helfen können!

    Mit freundlichen Grüßen

    Die erinnerung

    P.S.: Das ist kein Scherz, das ist mein Ernst!!!



  • Bin auch gerade dabei, nur so just for fun (ich weiß es wird nichts, ich bin erst 13, aber Spaß macht es trotzdem :D)

    Guck mal hier: http://www.peroxide.dk/papers/collision/collision.pdf (fand ich ganz gut. )

    Für 2D: www.metanetsoftware.com/technique/tutorialA.html

    Allerdings denke ich nicht das eigene Implentierungen schneller sind als Physik Engines, die schon länger existieren und wo auch noch mehrere Leute dran arbeiten



  • Also wenn ich das schon höre, wie du dir ja den schiefen Wurf beigebracht haben willst(der bei leibe trivial ist) und ja schnellim Kopf bist, wieso schnappst du dir dann nicht z.B. den Demtröder über klassische Mechanik und arbeitest den durch?

    Ich denke du wirst das leider nicht hinkriegen mit 16.(Zumindestens ordentlich ;))



  • @pyhax: Danke ich schau mir die Links gleich an.

    @Namenloser342: Ich bin auf der Suche nach jeder Möglichen Hilfe.

    ich arbeite schon seit 2 Jahren mit Komplexen Zahlen, interessiere mich für alle möglichen Gebiete der Mathematik, bin in Mathe und Physik ein einser-Schüler (ohne zu lernen wohlgemerkt), programmiere seit ich 13 bin (in C++), habe Dinge geschafft, bei denen sogar Studierete Erwachsene nicht mehr mitkommen, und du behauptest, dass ich das nicht schaffe soll???

    Also wenn ich die Grundlagen nicht schaffen sollte, glaube ich würde es keiner schaffen. Ich habe im Gebiet der Logim einen IQ von 140! Und dass will was heißen!



  • Wenn das Sphärische Objekte sind, kann man dies über Lennard-Jones Potentiale ganz gut lösen,...
    Dazu solltest diese aber in einem Schritt vorher diskretisieren und nur die Werte in ein Array mit rund 1000 Abstufungen hinterlegen.

    Wenn du nun die Position der Partikel im Iterationsschritt x hast, summierst Du einfach die Potentiale auf und berechnest dann die wirkende Kraft. Daraus folgt dann auch noch Geschwindigkeit und Beschleunigung...

    Je nach performance wunsch:
    Willst Du es schnell haben, dann zerlege Dir zusätzlich dein Raum in Vertexes (Hier gemeint als kleines Raumvolumen). Der Vertex hat die information Koordinate, Array von Partikeln innerhalb dieses Raumvolumens. Dann Summierst Du innerhalb eines Radiuses die Potentiale der Partikel auf, falls mind. ein Partikel vorhanden ist. Der beschränkte Radius ergibt sich dadurch das das Potential ab einer gewissen Distanz vernachlässigbar klein ist.
    Daraus kannst Du dann die vektorielle Kraft berechnen (nur berechnen, nicht anwenden).
    Das machst Du über alle Raumelemente.
    Jetzt gehst Du nochmal alle Vertices durch und lässt die Kraft auf die Partikel wirken und verschiebst dadurch die Partikel, je nach Kraft, um einen oder mehr Vertices in richtung der Kraft.

    Fertig.

    Ich wollte mir auch etwas in diese richtung noch mit einem externen magnetischen Feld basteln,... wenn du lust hast können wir ja da etwas zusammen machen..

    Ich würde das mit C/C++,asm,WinAPI auf x86,x64 machen,..

    Sei gegrüßt



  • Wenn ich Zeit hätte, hätte ich dir geholfen, aber ich habe im moment drei Projekte und da ist Zeit knapp. Das Problem ist, ich arbeite mit Würfeln! und nicht mit Partikeln. Außerdem sollen später die Würfel zusammenkleben bleiben.

    Das ist nämlich eine 1000*1000*1000 große Welt aus Würfeln, in der man spielt. Und durch das Gameplay soll es möglich sein, dass man in der Welt "rumrandalieren" kann, aslo Würfel zerstören kann. Dadurch sollen Brüchstücke runterfallen können, so sieht das ganze nämlich realistischer aus.

    und @pyhax: Die Links sehe gut aus! ich werde sie mal bei Gelegenheit genauer studieren.

    Nur leider sind sie auf englisch, hast du die auch in Deutsch?
    Nicht dass ich Englisch nicht könnte, aber in Deutsch fällt es mir leichter sowas zu verstehen.



  • Die erinnerung schrieb:

    @pyhax: Danke ich schau mir die Links gleich an.

    @Namenloser342: Ich bin auf der Suche nach jeder Möglichen Hilfe.

    ich arbeite schon seit 2 Jahren mit Komplexen Zahlen, interessiere mich für alle möglichen Gebiete der Mathematik, bin in Mathe und Physik ein einser-Schüler (ohne zu lernen wohlgemerkt), programmiere seit ich 13 bin (in C++), habe Dinge geschafft, bei denen sogar Studierete Erwachsene nicht mehr mitkommen, und du behauptest, dass ich das nicht schaffe soll???

    Also wenn ich die Grundlagen nicht schaffen sollte, glaube ich würde es keiner schaffen. Ich habe im Gebiet der Logim einen IQ von 140! Und dass will was heißen!

    http://de.wikipedia.org/wiki/Dunning-Kruger-Effekt

    Zum Thema mal der erstbeste google Treffer:
    http://www.christianherta.de/physics.html

    Komm zurück wenn du eine konkrete Frage hast.



  • Auf deutsch fällt mit erstmal nur das ein: http://wiki.delphigl.com/index.php/Tutorial_Kollision1

    Sind die Kanten der Würfel parallel zur X-,Y- oder Z -Achse? Dann wäre es ja einfach denke ich 😃

    Ach ja, ein Tut zum Seperating Axis Theorem (2D) gibt es auf der Seite auch in Deutsch



  • Am Anfang ja, aber nach der Kollision nicht mehr, weil der Würfel doch über eine Kante abrollt...



  • Ist dir klar, dass deine Welt bei 4 Byte pro Würfel Speicherplatz 3,8 GB Speicherplatz belegt? Irgendwie stelle ich mir das selbst mit Physik-Hardware-Unterstützung nicht sehr performant vor all diese Würfel miteinander interagieren zu lassen, oder habe ich etwas übersehen?

    Edit: Ich befürchte du musst dich schnell an die englische Sprache gewöhnen. Quasi jedes fortgeschrittene Material das nicht gerade die Basis einer Universitätslehrveranstaltung an einer deutschen Uni bildet in englischer Sprache.

    MfG SideWinder



  • Mario Sandler schrieb:

    http://de.wikipedia.org/wiki/Dunning-Kruger-Effekt

    Lol :xmas1:



  • Die erinnerung schrieb:

    Also wenn ich die Grundlagen nicht schaffen sollte, glaube ich würde es keiner schaffen. Ich habe im Gebiet der Logim einen IQ von 140! Und dass will was heißen!

    Ratschlag für die Zukunft: Wenn man Hilfe braucht, nicht so tun als bräuchte man sie eigentlich nicht :D.



  • Die erinnerung schrieb:

    @pyhax: Danke ich schau mir die Links gleich an.

    @Namenloser342: Ich bin auf der Suche nach jeder Möglichen Hilfe.

    ich arbeite schon seit 2 Jahren mit Komplexen Zahlen, interessiere mich für alle möglichen Gebiete der Mathematik, bin in Mathe und Physik ein einser-Schüler (ohne zu lernen wohlgemerkt), programmiere seit ich 13 bin (in C++), habe Dinge geschafft, bei denen sogar Studierete Erwachsene nicht mehr mitkommen, und du behauptest, dass ich das nicht schaffe soll???

    Also wenn ich die Grundlagen nicht schaffen sollte, glaube ich würde es keiner schaffen. Ich habe im Gebiet der Logim einen IQ von 140! Und dass will was heißen!

    gott bist du eingebildet.
    Naja, viel Glück bei deinem Projekt, vielleicht hast du ja recht/bildest es dir nicht nur ein und du schaffst das wirklich. Gibts ja immer wieder solche Menschen.



  • Die erinnerung schrieb:

    Also wenn ich die Grundlagen nicht schaffen sollte, glaube ich würde es keiner schaffen.
    Ich habe im Gebiet der Logim einen IQ von 140! Und dass will was heißen!

    Man misst den IQ aber nicht nur in einem Gebiet 😉



  • Und 4 Byte pro Würfel, ist das nicht etwas wenig? Man braucht doch mindestens 4 Werte (Einmal die Position und dann noch die Länge der Kante).
    Und die einzelnen Werte werden wohl kaum nur ein Byte belegen.



  • Auch ich habe daran gedacht, dass man nicht alle Würfel in der Gesamten welt prüfen kann.

    Deshalb habe ich die elt (gedanklich) in 10*10*10 große Chunks eingeteilt.
    D.h., dass ich nur in den Chunks rechnen werde, in denen sich ein bewegliches Objekt befindet. Das heißt auch wiederum, dass die Möglichkeiten der Kollisionen mit anderen Flächen sehr gering ist, weil kaum Flächen da sind.

    Und noch ein Trick:

    Falls die Würfel noch nicht "abgebrochen" sind, befinden sie sich in einem festen Raster. und es werden nur die Flächen der Würfel mit in die Rechnungen einbezogen (und gerendert), die relevant sind, also sichtbar. Und sichbar sind nur die, die mit keinem Würfel kollidieren, aslo nur die Außenflächen, was die Rechenleistung deutlich reduziert!

    und @zeusosc: Gesamt bin ich auf 127. Ich bin mir aber nicht mehr sicher.



  • 3,8 GB? Naja, mein Rechner ist zwar schon etwas alt, aber in meinen RAM passt es nicht 😮



  • Walli schrieb:

    Die erinnerung schrieb:

    Also wenn ich die Grundlagen nicht schaffen sollte, glaube ich würde es keiner schaffen. Ich habe im Gebiet der Logim einen IQ von 140! Und dass will was heißen!

    Ratschlag für die Zukunft: Wenn man Hilfe braucht, nicht so tun als bräuchte man sie eigentlich nicht :D.

    Ich kann die Grundlagen aber noch nicht und deshalb bin ich hier. ich weiß auch nicht, wo ich mir solches Wissen aneignen kann.

    So ok. ich habe heute (leider) nicht genug zeit, um mir alles durchzulesen.

    Deshalb.

    1. Wir nehemen an, ich hätte das problem mit der Kollisionserkennung verstanden (das lese ich mir morgen durch und verstehe es dann 😃 )
    2. Wir nehmen an, ich hätte eine 2D-Raum
    3. Jetzt müsste ich wissen, wie amn berechenet, wenn ein solches Quadrat auf eine Kante fällt und überkippt, wie man das berechnent. (erstmal ohne Reibung und elastische Kollisionen) Also ein Quadrat fällt auf eine Kante und kippt über, ohne dass das Quadrat abrutscht, noch dass es wieder zurückspringt.

    kann mir da jemand helfen?



  • Für platzmangel gibt es ja virtuellen Speicher,..

    ist aber nicht gerade performant...



  • Passive Chunks (also, in denen nix passiert) kann man auslagern, den Rest kann man im RAM lassen.

    Mincraft machts ähnlich.


Anmelden zum Antworten