Глубина узла от кода местоположения октодерева

В статье Advanced Octrees 2: представления узлов указано:

AABB узла может храниться в явном виде, как и раньше, или он может быть вычислен из глубины дерева узла, неявно хранящейся внутри кода локации. Чтобы получить глубину дерева в узле из его кода местоположения, требуется бит флага, чтобы указать конец кода местоположения. Без такого флага было бы невозможно различить, например, между 001 и 000 001. Используя 1 бит для отметки конца последовательности, 1 001 можно легко отличить от 1 000 001. Использование такого флага эквивалентно установке код местоположения корня Octree к 1.

Код местоположения - это 32-битное слово. То есть, ... 001 а также ... 000 001 может быть равным, как говорит автор, если все биты, следующие за первым примером, равны битам второго примера.

Как маркировка конца последовательности помогает нам найти глубину узла в дереве?

Автор использует пример ... 1 001 а также ... 1 000 001, Первый узел имеет глубину 1, а второй - 2? Если так, откуда я знаю? Код местоположения является 32-битным словом, поэтому биты, следующие за "флагом конца", могут следовать как ... 001 001 который также является действительным узлом.

Так что я действительно не понимаю, как хранить в 32-битном слове и код местоположения, и глубину узла в дереве.

1 ответ

Я только что прочитал эту статью и у меня был тот же вопрос. Я думаю, что ответ заключается в том, что, определяя корневой узел с индексом "001", вы можете гарантировать, что первый (самый значимый) 1 бит, который вы видите в коде местоположения, указывает на корень. Так:

... 000 001 000 001 can be read as <root> <0,0,0> <0,0,1>, level 2
... 000 000 001 001 can be read as <root> <0,0,1>, level 1
... 000 000 000 001 can be read as <root>, level 0
Другие вопросы по тегам