Ich bin auf der Suche nach einem vereinfachten Algorithmus, um den Schnittpunkt zwischen einem OBB und einer Kugel zu testen. Es gibt Algorithmen, die ich gesehen habe, aber die meisten komplizieren die Dinge, weil sie alle 3 Drehachsen auf der OBB berücksichtigen müssen. In meinem Fall rotiert der OBB nur auf der Z-Achse, so dass ich das Gefühl habe, dass etwas zwischen dem Standard Circle/Rotated Rectangle-Algorithmus und den Sphere/OBB-Algorithmen wahrscheinlich optimaler wäre.Intersect Sphere mit OBB mit nur 1 Rotationsachse
Als Referenz wird der OBB als Vector3
für das Zentrum gespeichert, eine andere Vector3
für die Halb Dimensionen und einer Matrix33
für die Orientierung - unter Berücksichtigung, dass wir garantieren, dass, wenn Euler Rotation übersetzt, zwei der Achsen werden 0 und nur die Z-Achse wird sich ändern. Die Kugel ist nur eine Vector3
für die Mitte und eine float
für Radius.
Ich vermute, dass ein solches Ding möglich sein kann, indem man einfach die Radien der Kugelquerschnitte ermittelt, die der Ober - und Unterseite der OBB entsprechen, und auch den maximalen Radius der Kugel, wenn ihr Mittelpunkt zwischen den Oben und unten, und dann eine Kollisionskontrolle Kreis/Rotated Rectangle auf jedem dieser zwei (oder drei) Radien. Was ich nicht sicher bin, ist, ob das (sowohl hinsichtlich der Codierung als auch der Leistung) einfacher ist als der vollständige Sphere/OBB-Test.
(Ich werde diese sprachunabhängig verlassen. Ich in C++ gerade arbeite, aber ich werde einen Algorithmus in jeder gemeinsamen Sprache zur Verfügung gestellt werden es einfach genug ist, um C++. Zu übersetzen)