Lassen Sie mich zuerst die Phasenverriegelung erklären: Wenn zwei Objekte mit einer Masse ungleich Null denselben Raum einnehmen, aber keine Energie haben (keine Geschwindigkeit).
Stoßen sie für immer mit Vektoren mit einer Geschwindigkeitsauflösung von Null zusammen oder bleiben sie nur miteinander verbunden, bis eine äußere Kraft interagiert?
In meinem selbst gebrauten Motor wurde mir klar, dass wenn ich einen Charakter in einen Baum lade und ihn bewege, er eine Kollision signalisiert und an seinen ursprünglichen Ort zurückspringt. Ich nehme an, ich könnte dies beheben, indem ich im Falle einer Kollision Impulse implementiere, anstatt einfach zum letzten Punkt zurückzuspringen, an dem ich mich befand (meine Implementierung ist zum Kotzen).
Aber während ich meinen Motor robuster mache, bin ich nur gespannt, wie die meisten anderen Physik-Motoren mit diesem Fall umgehen. Schießen Objekte, die an derselben Stelle ohne Bewegungsgeschwindigkeit beginnen, einfach in zufälliger Richtung voneinander ab? Oder sitzen sie da, bis etwas passiert? Welche Option ist im Allgemeinen der beste Ansatz?
quelle
Antworten:
Ich denke, diese Art von endet damit, dass es keine Antwort gibt ...
Ich denke, manchmal hängt es von der Implementierung und dem grundlegenden Ansatz für die Kollisionserkennung und -auflösung ab (was ungefähr 80% einer Starrkörperphysik-Engine entspricht, denke ich). Es ist lustig, weil ich dieses Problem neulich in meiner eigenen Physik-Engine getroffen und ein Objekt in den NaN-Raum geworfen habe.
Ich hatte ein Objekt an genau der gleichen Stelle wie ein anderes Objekt und beide hatten die gleiche Form. In diesem speziellen Fall hat der Kontaktgenerator sehr schlechte Werte gemacht. Ich habe es behoben, indem ich beliebige Werte für den Kontakt ausgewählt habe (im Grunde genommen ein kleineres / leichteres Objekt gerade nach oben schieben). Dies war jedoch ein ziemlich trockener Fall.
Wenn ein Stuhl in einem Tisch erscheinen würde, würde dies davon abhängen, welche Kontakte erzeugt wurden, ob sie auseinander flogen oder stecken blieben. In meinem Fall verwende ich kein auf Einschränkungen basierendes System (zumindest noch nicht), sodass das Objekt genauso wahrscheinlich auseinanderbricht wie schwingt und einschläft. In einem Penetrations- und Impulssystem wie dem, das ich benutze, ist es ziemlich einfach, all das Hässliche zu sehen und wie es entstehen wird. Ich habe keine Ahnung, wie ein auf Einschränkungen basierendes System dieses Problem löst oder ob es es überhaupt erkennt ... Die Einschränkung scheint mir ohne Eingreifen nicht erreichbar zu sein, und ich habe keine Ahnung, ob es einen Standardweg für diese Motortypen gibt.
Andere werden sicherlich klügere Dinge zu sagen haben, aber dies war zu lang für einen Kommentar.
quelle
Dies wird auf zwei Arten gehandhabt:
Dies funktioniert jedoch nur, wenn Sie Geschwindigkeit / Zeit unterscheiden. In einem auf Kacheln basierenden Spiel funktioniert dies nicht und führt zu sichtbaren Artefakten, z. B. wenn ein Objekt entweder durch ein Objekt tunnelt oder sichtbar aus dem anderen Objekt herausgeschoben wird.
Bei kachelbasierten Spielen können Sie einen prädiktiven Ansatz wählen, indem Sie überprüfen, wo sich das Objekt befindet, wenn es sich bewegt. Wenn die Bewegung eine Phasenverriegelung verursachen würde, verbieten Sie die Bewegung.
quelle