2016-05-24 10 views
4

Ich implementiere meine eigene Raycasting-Bibliothek, um zu lernen, wie es funktioniert. Als Ausgangspunkt habe ich eine Box, die sich dreht und mit Hilfe von Strahlen die verschiedenen Hindernisse erkennt, denen sie auf ihrem Weg begegnet. Erwähnenswert: Ich habe dies funktioniert mit der Linie AABB Schnittpunkt-Methode. Die folgende Abbildung zeigt, wie es funktioniert:Line Intersection mit gedrehtem Box Collider-Objekt

Line Intersection with AABB

Mein Problem kommt, wenn ich eine der oben genannten Wände drehen und versuchen, die gleiche Methode zu verwenden, um die Kollision der Strahlen zu überprüfen:

Rotated Object collision

Ich habe nach einer möglichen Lösung gesucht, um das zu korrigieren, indem ich verschiedene Algorithmen wie den Trennachsensatz und Cohen-Sutherland verwende, aber ich konnte nichts finden, was ähnlich wie AABB-Schnittpunkt funktioniert, aber mit OBB. Irgendwelche Ideen, wie man das Problem im zweiten Bild rundet, wo es mit den Grenzen des Objekts kollidiert, wenn es gedreht wird? Ich verwende Unity und C#.

Antwort

0

Ich glaube nicht, dass Sie einen Algorithmus ähnlich AABB für gedrehte Objekte finden. Sie könnten versuchen, das Koordinatensystem (dh die gesamte Welt) zu drehen, bevor Sie eine gedrehte Wand überprüfen, um die Achse der Achse auszurichten, und dann das Ergebnis wieder in das ursprüngliche Koordinatensystem zurückdrehen, aber meiner Meinung nach wäre dies der Fall Am Ende wird es unordentlicher, als wenn man seine Wände in Linien zerlegt und Linienkreuzungstests durchführt.

Das Ändern von etwas wie dem Trennachsensatz könnte auch funktionieren - der Strahl ist keine konvexe Hülle, Sie können also den Algorithmus nicht direkt verwenden, aber Sie können ähnliche Prinzipien verwenden: projizieren Sie die Punkte der Wand auf eine Linie senkrecht zu der Strahl, und Sie werden dann in der Lage sein, die Entfernungen der äußersten Enden der Wand zu Ihrem Strahl zu berechnen, und so, ob die Wand den Strahl überlappt oder nicht. Mit diesen Informationen sollten Sie auch die "Schatten", die Sie in Ihrem Screenshot haben, berechnen können. Ob das einfacher ist als eine Linienkreuzung oder nicht, müssen Sie selbst sehen!