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 auf other vergleichen? Das Problem hier ist, dass ich jedes Paar zwei Mal prüfe.

    Ideen?


Anmelden zum Antworten