Обход сцен графа

112
28 ноября 2019, 11:30

Здравствуйте у меня есть SceneGraph состоящий из Node:

class Node
{
public:
     ...
     GLvoid addChild(Node* child) noexcept;
     GLboolean isExistChildren() const noexcept;
     GLvoid childrenForEach(std::function<GLvoid(Node* child)> callback) noexcept;
     ...
private:
     Node* mChild = nullptr;
     Node* mNextNode = nullptr;
}
GLvoid Node::addChild(Node* child) noexcept
{
    child->mNextNode = mChild;
    mChild = child;
}
GLboolean Node::isExistChildren() const noexcept
{
    return mChild != nullptr;
}
GLvoid Node::childrenForEach(std::function<GLvoid(Node* child)> callback) noexcept
{
    Node* iterator = mChild;
    while (iterator)
    {
        callback(iterator);
        iterator = iterator->mNextNode;
    }
}

На данный момент обход делается следующим образом и только га один уровень графа от корня:

Node* mRootNode = ...;
if (mRootNode->isExistChildren())
{
    mRootNode->childrenForEach([&shader](Node* child)
    {
        ...
    });
}

Хотелось бы написать свой кастомный итератор для этого, так не хочу использовать коллбеки, но не знаю как обойтись без ссылки на родительский узел(не хочу занимать лишнюю память под указатель для каждого узла)... Может кто-нибудь подскажет как лучше реализовать обход с минимальным использованием памяти и наибольшей производительностью в данном случае?

READ ALSO
Скажите плиз как реализовать [закрыт]

Скажите плиз как реализовать [закрыт]

Нужно найти разницу между суммой всех цифр использованных для записи всех нечетных чисел от 1 до х и суммой всех цифр использованных для записи...

124
QT не может найти lineEdit

QT не может найти lineEdit

QT не может найти lineEditЯ пытаюсь забрать текст из lineEdit так: ui->lineEdit->text() Причём он не видит и не выводит lineEdit и даже когда я пытался вставить...

93
Выбрасывание исключения в блоке Catch (Java)

Выбрасывание исключения в блоке Catch (Java)

Есть проблемка: при возникновении исключения IOException нужно его обработать и в блоке Catch выбросить моё исключение ServerRunningException, которое будет...

108