Ich habe eine einfache 3D-Spielphysik-Engine implementiert. Ich habe bereits eine anständige Kollisionserkennung eingerichtet, jetzt versuche ich, den Teil der Kollisionsreaktion herauszufinden. Ich verwende eine impulsbasierte Methode, um die Geschwindigkeiten nach der Kollision zu berechnen. Dies funktioniert ziemlich gut, verhindert jedoch nicht vollständig, dass sich die Körper weiter gegenseitig durchdringen. Ich habe also zusätzlichen Code, um das Eindringen zu beheben. Derzeit bewege ich die Körper nur entlang der Kontaktnormalen um die Hälfte der Eindringtiefe - erster Körper in Richtung der Kontaktnormalen, zweiter Körper in entgegengesetzter Richtung.
Dies ist die meiste Zeit in Ordnung, aber es gibt einige unerwünschte Effekte. Stellen Sie sich zum Beispiel einen engen Korridor und ein Objekt vor, das sich durch ihn bewegt. Wenn das Objekt auf eine der Wände des Korridors trifft, verschiebt die Durchdringungsauflösung es in die gegenüberliegende Wand, dann im nächsten Bild zurück in die erste Wand und so weiter. Der Effekt ist, dass das Objekt zwischen den Wänden sehr schnell vibriert, was nicht schön ist.
Meine Frage ist also, ob es einen besseren Weg gibt, um das Eindringen zu beheben. Vielleicht bewegen Sie die Körper nicht, sondern passen ihre Geschwindigkeiten (zusätzlich zur Impulsberechnung) an, damit sie sich nicht mehr aufeinander zu bewegen und die Penetration sich in den nächsten paar Bildern von selbst auflöst. Ich rate nur hier. Irgendwelche Ideen?
Schauen Sie sich diesen Artikel an, der schon oft hier veröffentlicht wurde. Durchsuchen Sie einfach die mit Fragen und Antworten gekennzeichneten Kollisionserkennungen. Er zeigt Ihnen, wie Sie die "kontinuierliche" Kollisionsauflösung durchführen, von der Stephelton gesprochen hat:
http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3
Grundsätzlich lösen Sie einige grundlegende kinematische Gleichungen für den genauen Zeitpunkt, zu dem sich Ihre beiden Begrenzungsrahmen zu schneiden begannen. Sie lösen Ihre Kollisionen genau in diesem Moment und fahren dann mit der verbleibenden Zeit in Ihrem Frame fort. Möglicherweise müssen Sie erneut simulieren, was nach dem Moment der Kollision passiert, da sich die Geschwindigkeiten / Beschleunigungen Ihrer Objekte geändert haben. Aber da ist trotzdem dein Ausgangspunkt ... Prost!
quelle