Ich möchte, dass sich Objekte zwischen zwei Physiksimulationen durch ein "Fenster" bewegen und mit denen beider Simulationen kollidieren, falls sie die Fensterebene schneiden.
Die Koordinatensysteme der Simulationen haben nicht den gleichen Ursprung und können eine andere Ausrichtung haben. Eine Simulation in sich selbst zu packen ist nicht notwendig, wäre aber ein Plus.
Wie verbinde ich die Systeme effizient, ohne die einzelnen Objekte zu klonen?
Bearbeiten:
Die Berechnungen sollten so genau wie möglich sein, damit Objekte nicht hängen bleiben, wenn sie gleichzeitig von entgegengesetzten Seiten über das Fenster laufen.
physics
collision-detection
Tamschi
quelle
quelle
Antworten:
Es gibt dieses coole Projekt namens Pseudoform, früher bekannt als "Portalized", das Physiksimulationen unter Verwendung von Portalen auf groovige Weise handhabt:
Pseudoform
Hör zu!
Besonders die Videos - es ist erstaunlich cool.
Es ist Open Source, so dass Sie sehen können, wie sie es tun.
Ich wette, das ist was du willst. :) :)
quelle
Okay - ich weiß nicht, ob das funktionieren würde.
Basierend auf den obigen Informationen würde ich Trigger auf die 'Fenster' setzen, damit ich erkennen kann, wann ein Objekt eine Welt verlässt. Erfassen Sie den aktuellen Geschwindigkeitsvektor zum Zeitpunkt der Kollision. Berechnen Sie den verbleibenden Zeitschritt basierend darauf, wo er den Auslöser gedrückt hat und wo er in diesem Frame gelandet ist (außerhalb der Welt würde Ihre Welt einen virtuellen Rand benötigen, um dies zu ermöglichen). Zu diesem Zeitpunkt kennen Sie die Geschwindigkeit und den verbleibenden Zeitschritt, sodass Sie ihn an der Grenze der Welt, in die er eintreten soll, neu positionieren und die Geschwindigkeit neu projizieren können. Dies würde jedoch zwei physikalische Aktualisierungen in einem Frame erfordern, und es würde den Grenzfall eines Objekts geben, der von a nach b geht, während ein anderes an derselben Position von b nach a geht - es würde überhaupt keine Kollision erkannt.
Ein bisschen lückenhaft,
quelle
Ich habe einige Infos zu Physiksimulationen gelesen und eine mögliche Lösung gefunden. Es funktioniert, indem jeder Physikschritt in drei Phasen aufgeteilt wird:
1. Vorschritt:
In jedem Physikschritt erstellt ein Fenster vier Transformationen, zwei für jede Seite der Verbindung:
(Statische Fenster müssen dies nur einmal tun.)
Zusätzlich werden Objekte in jedem Koordinatensystem in drei Gruppen unterteilt:
Physik-Gruppierung http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
Objekte vor dem Fenster (grün).
Ein Objekt wird auch zu dieser Gruppe gezählt, wenn es die Fensterebene schneidet oder sie wahrscheinlich hinter dem Fenster kreuzt (nicht gezeigt).
Objekte, die das Fenster schneiden oder wahrscheinlich in diesem Physikschritt schneiden (orange).
Objekte hinter dem Fenster (blau). Wenn ein Objekt zur Rückseite des Fensters fliegt, wird es weiterhin als Mitglied der dritten Gruppe markiert.
Die Gruppierung kann vereinfacht werden, wenn sich das Fenster am Rand der Simulation befindet.
2. Hauptschritt:
Die Physik wird mit wenigen Ausnahmen meist wie gewohnt berechnet:
Objekte aus der zweiten Gruppe kollidieren niemals mit Objekten aus der dritten und umgekehrt.
Die Eingabetransformation des Fensters wird für die Objekte aus der zweiten Gruppe verwendet, und die Ergebnisse werden anhand der Front- und Schnittobjekte aus dem Zielsystem ausgewertet. Die resultierende Kraft wird mithilfe der Ausgabetransformation transformiert und auf das ursprüngliche Objekt angewendet.
(Wenn ein Objekt während der Berechnung getroffen wird, muss es neu gruppiert werden!)
3. Nach dem Schritt:
Wenn ein Objekt aus der zweiten Gruppe das Fenster überquert hat, wird es mithilfe der Eingabetransformation in das Zielsystem verschoben.
Zusätzliche Gedanken:
Wenn die Transformationen nach der Berechnung der Physik erhalten bleiben, können sie zur Beschleunigung des Renderns und zur Erleichterung der KI-Berechnungen verwendet werden. Die Gruppierung kann verwendet werden, um Clip-Ebenen aus dem Renderprozess zu entfernen.
Der Nachteil dieser Lösung ist, dass die Fenster direkt in die Physik-Engine eingefügt werden müssen.
quelle