bounding volume transformieren



  • Ich habe grade ein bisschen zu viel Freizeit und versuche mich an einem kleinen 3d-Spielchen.
    Ich bin etwas unentschlossen wie ich das mit den bounding volumes mache. Sinnvoll währen wahrscheinlich an den Achsen ausgerichtete Quader oder alternativ Kugeln.
    Kugeln sind sehr einfach zu transformieren, so lange es nur um Rotation und Translation geht. Sobald ich allerdings damit anfange wild in alle möglichen Richtungen rum zu skalieren, weiß ich nicht wie ich den Radius der Kugel anpassen muss. Wenn ich einen octree benutze verschwende ich mit den Kugeln auch ein bisschen Raum im vergleich zu einem Würfel. Jedenfalls solange nicht rotiert wird. Und im vergleich zu einem Quader sowieso.
    An den Achsen ausgerichtete Quader sind denke ich die besser Lösung. Aber wie transformiere ich so einen Quader? Ich könnte die Eckpunkte transformieren. Das Ergebnis ist dann aber möglicherweise kein Quader mehr und meistens nicht mehr an den Achsen ausgerichtet. Ich könnte eine neue bounding-box um die transformierten Eckpunkte berechnen. Aber so ganz zufrieden bin ich damit nicht.
    Gibt es da vielleicht elegantere Lösungen?



  • Achsen-ausgerichtet / AABB bedeutet normalerweise, das die Box auf das Weltkoordinatensystem ausgerichtet bleibt und nicht auf das transformierte Objekt. Das wäre dann eine "object oriented bounding box" / OOBB. Meinst du das evtl?



  • Transformier Punkte, die du gegen deine OBB testen willst, in das lokale Koordinatensystem der Box...



  • Die Box soll schon auf das Weltkoordinatensystem ausgerichtet bleiben. Aber ich kann nun mal nur ein OBB vorberechnen. Eine komplette Neuberechnung der Bounding-Box nach Transformation des Objektes wäre zu aufwändig. Und ich wüsste auch nicht wie die Bounding-Box nach einer beliebigen (oder affinen) Transformation am Weltkoordinatensystem ausgerichtet bleiben könnte.


Anmelden zum Antworten