Begrenzungsrahmen in Oktrees

9

Ich habe gesehen, dass Octrees häufig für Dinge wie Kegelstumpf-Keulen und Kollisionserkennung in 3D verwendet werden. Aber ich bin mir einfach nicht sicher, wie der Algorithmus überhaupt funktioniert. Sicherlich bricht das gesamte Prinzip des Octree, wenn Sie versuchen, Begrenzungsrahmen zu verwenden, da jeder gegebene Rahmen in einem Knoten gespeichert werden könnte, aber tatsächlich den von einem anderen Knoten dargestellten Raum überlappt. Darüber hinaus bin ich mir nicht sicher, wie dies möglicherweise zum Nachschlagen von Begrenzungsrahmen anstelle von Punkten funktionieren kann, da Sie wiederum möglicherweise in praktisch alle Knoten blicken und den Zweck zunichte machen.

Wie um alles in der Welt gehen Octrees mit Begrenzungsrahmen um?

DeadMG
quelle

Antworten:

12

Ein Octree (3D) verwendet dieselben Konzepte wie ein Quadtree (2D). Wenn Sie den Wikipedia-Artikel über Quadtrees lesen und verstehen, sollten Sie in der Lage sein, dieselben Konzepte in 3D anzuwenden.

Mit diesen beiden Bäumen können Sie bereichsbezogene Suchvorgänge verwenden, mit denen die Anzahl der erforderlichen Vergleiche erheblich reduziert werden kann, um herauszufinden, welche Objekte sich in einem bestimmten Bereich befinden. Dies kann je nach Spiel nützlich sein, um Vis-Culling oder sogar Kollisionen durchzuführen.

Das Grundkonzept besteht darin, dass der Weltraum in "Eimer" unterteilt ist: Quadrate für 2D oder Würfel für 3D. Bei einer leeren Welt beginnen Sie mit einem einzelnen Quadrat- oder Würfeleimer, der die gesamte Welt abdeckt. Wenn Sie der Welt Objekte hinzufügen, beginnen Sie am Stammknoten und arbeiten sich basierend auf der Position und Größe des Objekts in den Baum hinein. Wenn der Zielbereich die Kapazität erreicht, unterteilen Sie ihn, indem Sie Quadrate in 4 kleinere Quadrate (Quadtree) oder Würfel in 8 kleinere Würfel (Octree) aufteilen. Jedes Objekt, das Sie der Welt hinzufügen, wird nur so tief in den Baum eingefügt, wie es physisch vollständig in die Grenzen des Eimers passt. Wenn ein Objekt nicht in die Grenzen des aktuellen Buckets passt, müssen Sie das Objekt in den kleinsten übergeordneten Bucket verschieben, in den es vollständig passt.

Beachten Sie, dass die Verwendung eines Quadtree oder Octree zu viel des Guten ist, wenn Sie nicht viele Objekte in Ihrer Welt haben. Für beide gibt es auch Open-Source-Lösungen.

John McDonald
quelle
Ich denke er weiß das. Ich glaube, die Verwirrung besteht darin, wie man mit einem Volume umgeht, das nicht gut in eine Unterteilung passt.
ClassicThunder
2
Ich erwähne, dass "Wenn ein Objekt nicht in die Grenzen passt, muss es eine Schicht höher gespeichert werden". Und es klang auch so, als wäre das OP ein wenig verwirrt darüber, wie Octrees im Allgemeinen funktionierte, basierend auf seinem zweiten Satz.
John McDonald
Verstößt das nicht gegen die grundlegende Einschränkung von Oktrees, dass es in jedem Knoten nur sieben oder weniger gibt?
DeadMG
Ich meine, wenn ich N Objekte hätte, die entlang der Grenze liegen, würde ich mir O (N) Schecks ansehen, um sie mit jedem von ihnen zu vergleichen.
DeadMG
@DeadMG, "Oct" wie in Eight (Octagon, Octane usw.). Wenn sich der Wurzelknoten teilt, hat er 8 Kinder: North East Up, North East Down, NWU, NWD, SEU, SED, SWU und SWD für insgesamt 9 Knoten inkl. die Wurzel. Wenn sich einer dieser untergeordneten Knoten teilt, hat dieser Knoten auch 8 Unterknoten, einen für jeden Quadranten wie zuvor, was insgesamt 8 + 8 + 1 = 17 Knoten ergibt. Wenn alle Ihre Objekte genau an die Grenze des Wurzelknotens passen und nicht in einen der 8 Quadranten passen, ist dies O (N), und Sie müssen gegen jedes Objekt prüfen, und Sie können keine Objekte speichern vergleicht, in der Tat wird es wahrscheinlich Kosten.
John McDonald
3

n-Bäume sind das bekannteste, aber nicht das einzige verfügbare räumliche Partitionierungssystem. Es gibt viele, viele andere. Ein bisschen mehr Informationen über die Daten, über die Sie verfügen, tragen wesentlich dazu bei, die beste Wahl zu finden. Ändern Ihre Boxen ihre Größe oder bewegen sie sich? Wie gross sind sie? Wie viele sind es? Haben Sie viele Einfügungen / Entfernungen?

SpeziesUnbekannt
quelle