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:
- eine Eingabetransformation, die die Position, Geschwindigkeit (und möglicherweise Größe und Gewicht) eines Objekts in das Zielkoordinatensystem und transformiert
- Eine Ausgabetransformation, die Kräfte zurück in das ursprüngliche System des Objekts transformiert.
(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.