Вопрос

Может кто-нибудь предложить fast , эффективный метод хранения и доступа к редкому октерию?

Предпочтительно то, что можно легко реализовать в HLSL.(Я работаю приложение Raycasting / Voxel)

В этом случае дерево может быть предварительно отключено, поэтому я в основном обеспокоен размером и вариантом поиска.

<Сильное> Обновление

Для любого, кто ищет это, более эффективное решение может состоять в том, чтобы хранить узлы в виде линейного октерирования, генерируемого с кривой Z-заказа / деревом Morton.Это исключает хранение внутренних узлов, но может потребоваться перекрестная ссылка на линейное массив деревьев с второй «текстурой данных», содержащая информацию об индивидуальном вокселе.

Это было полезно?

Решение

Я не очень опыт в HLSL, поэтому я не уверен, что это будет соответствовать вашим потребностям, вот мои мысли. Дайте мне знать, если что-то здесь не вменяемое для ваших потребностей - я хотел бы обсудить, так что, возможно, я могу узнать что-то себя.

  1. Каждый узел в октере может существовать как вектор3, где компонент (x, y, z) представляет центральную точку узла. Компонент W может использоваться в качестве поля флагов. а. Поле W-FLAGS может обозначать, какого октантных детских узлов следуют текущему узлу. Это потребует 8 битов значения.
  2. Каждая сущность, хранящаяся в вашем октерее, может быть сохранена в виде ограничительной коробки, где R, B, B могут быть измерительными размерами Box, а W можно использовать для чего-то.
  3. Определите специальный вектор, обозначающий, что список объектов следует. Например, если (W + Z) - это некоторое волшебное значение. Некоторые функциональные функции (x, y) могут сказать, быть количеством следующих объектов. Или, что бы ни работает. а. Каждый узел потенциально сопровождается этим особым вектором, указывая на то, что в узле хранятся объекты объекты. Следующие X векторы все просто идентификаторы объекта или что-то подобное. б. В качестве альтернативы, у вас может быть один узел, который просто указывает список объектов в памяти. Опять же, не уверены, что нужно здесь или ограничения о том, как получить доступ к объектам.
  4. Итак, сначала построить октери и прокладывайте его своими объектами. Затем, просто пройдите все октери, вывод векторов в буфер памяти.

    Я думаю, что текстура 512x512 может удерживать полностью упакованные октеризованные 5 уровни глубоких (32 768 узлов), каждый из которых содержит 8 объектов. Или полностью упакованный 4-уровня Octree с 64 объектами каждый.

Другие советы

Есть отличная статья о редких октерах, фокусирующихся на графическом графике: Эффективный редкий воксельOCTSEES - Анализ, расширения и внедрение

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top