Iteration durch Scene-Graph
-
Ich habe einen Scene Graph mit der Node-Klasse
class SceneNode { SceneNode* mParent; std::vector<std::unique_ptr<SceneNode>> mChildren; };
Funktionen wie update() und draw() lassen sich ja einfach rekursiv implementieren. Nun möchte ich aber Kollisionsabfrage einbauen. Mir ist bewusst, dass es hier partitionierende Ansätze gibt (wie Quadtree oder einfach ein Grid), da ich aber nur sehr wenige Einheiten habe, möchte ich es hier ohne probieren.
Ich muss mir also überlegen, wie ich nun die Position jeder Node mit jeder anderen vergleichen kann, um auf Kollisionen zu testen. Wie würdet ihr das implementieren? Würdet ihr euch eine Iteratorklasse schreiben, die in depth-first Manier den Baum entlang hangelt?
for (auto x = sceneGraph.begin(); x != sceneGraph.end(); ++x) { for (auto y = x; y != sceneGraph.end(); ++y) { if (collision(*x, *y)) ... } }
Oder sollte ich einfach
bool SceneNode::collision(SceneNode& other);
schreiben und dann
this
und alle Kinder mit Kollision aufother
vergleichen? Das Problem hier ist, dass ich jedes Paar zwei Mal prüfe.Ideen?