Ich versuche, den Satz der Trennachse in C # zu implementieren. Ich habe eine Funktion, die den minimalen Translationsvektor zwischen zwei Polygonen berechnen kann. Ich kann jedoch scheinbar keine Funktion erstellen, die den minimalen Übersetzungsvektor zwischen einem Polygon und mehreren anderen Polygonen berechnet. Ehrlich gesagt, ich arbeite seit Monaten daran und bin einer Lösung nicht näher gekommen und konnte online keine Lösung finden. Es gibt immer einige Randfälle, die nicht das richtige Ergebnis liefern, was zu Fehlern mit hoher Priorität in meinem Spiel führt.
Hier sind häufige Randfälle, die nicht richtig funktionieren:
Gibt es eine bekannte Lösung für dieses Problem? Alles, was ich finden kann, sind Leute, die sagen "Führe einfach den SAT für jedes Polygon aus", aber dies erzeugt selten den minimalen Übersetzungsvektor.
Jede Hilfe wäre sehr dankbar.
quelle
Antworten:
Idealerweise bauen Sie Ihre Umgebung nicht aus Polygonen auf. Sie bauen es aus Kanten (die Sie vielleicht aus einer Reihe von Polygonen berechnen). In Ihrem ersten Beispiel gibt es beispielsweise eine einzelne diagonale Kante. Im letzten Beispiel ruht die Box auf einer einzelnen horizontalen Kante.
Die Tatsache, dass Ihr Editor oder Ihre Werkzeuge kleinere, individuelle Formen zum Erstellen einer Ebene verwenden, sollte sich nicht auf die Laufzeit auswirken.
Ein etwas einfacherer Ansatz würde einfach "innere" Kanten der Grundformen entfernen. In Ihrem letzten Beispiel gibt es zwei Kanten zwischen den "Boden" -Boxen. Ignorieren Sie diese während der Kollisionserkennung.
Weitere bessere Bilder und Implementierungsideen finden Sie in Abschnitt 4.5 (Kanten und Kantenketten) in der Box2D-Dokumentation .
quelle