Как правильно настроить дерево для графа сцены? - PullRequest
0 голосов
/ 10 января 2019

У меня есть граф сцены для моего приложения OpenGL. Мой текущий график сцены работает нормально, за исключением одного: дети не настроены правильно.

Я рекурсивно перебираю граф сцены и соответственно устанавливаю матрицы преобразования мира. Эта часть сама работает нормально и дает правильный вывод. Но мне нужны матрицы где-то еще в моем коде. Однако матрицы дочерних узлов любого узла не верны. Я думаю, это потому, что я неправильно настроил их в графе сцены. Я думаю, что эта проблема из-за того, что они копируются, когда я перебираю граф сцены. Я сильно сократил свой класс.

 class Node {
     public:
          Node::Node();
          Node(std::string aName);

          void setName(std::string aName);    
          std::string getName();  

          void addChildren(Node& node);
          Node &getChild(std::string aName);
          std::vector<Node> &getChildrenList();

          void setParent(Node* node);
          Node* &getParent();

          void toString();

     private:
          Node* parent;
          std::vector<Node> children;

          std::string name;
};

// inside another file
void recursRender(Node& it, glm::fmat4& mat) {    

    if (it.getName() != sg->getName()) {
        it.setWorldTransform(mat);
        drawPlanet(it);              
    }

    if (!it.getChildrenList().empty()) {

        for (Node itChild : it.getChildrenList()) {
            recursRender(itChild, it.getWorldTransform());
        }
    }
}

Это оригинальный код. Я пробовал совсем немного разных вещей, например изменение

std::vector<Node> children

до

std::vector<Node*> children

Но это тоже не сработало. В конце концов я хочу иметь возможность изменить

Node itChild 

в каждом цикле

Node& itChild

Однако, если я сделаю это сейчас, мои объекты больше не будут видны. Любая помощь высоко ценится. Я извиняюсь за то, что не объяснил себя достаточно хорошо, трудно описать проблему, оставляя ее "короткой"

...