如何正确设置场景图树?

时间:2019-01-10 17:15:24

标签: c++ pointers reference scenegraph

我的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

但是,如果现在执行此操作,我的对象将不再可见。 非常感谢您的帮助。对不起,我对自己的解释不够充分,很难在简短的同时描述问题。

0 个答案:

没有答案