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