Octree для хранения уровней вокселей, в одном Octant есть 16x16x16 вокселей.
Необходимо создать соседние вокселы для Octant на всех 6 гранях (у соседа не должно быть дочерних элементов), чтобы создать правильные границы сетки для бесшовной сетки.
У лица может быть несколько соседей или часть соседа.
Например:
Октант имеет шкалу 64, один сосед имеет шкалу 32 -> один воксел со стороны Октанта вычисляется из 4 (2x2) соседних вокселей,
Другой сосед имеет шкалу 16 -> один воксел со стороны Октанта вычисляет из 16 (4x4) вокселей.
Третий сосед имеет шкалу 1 -> Один воксел со стороной октанта вычисляет из 4096 (64 * 64) вокселей.
У Октанта может быть слишком много соседей, нужно добавить некоторые ограничения.
При обновлении соседа - установить флаг «Границы сетки устарели»
Текущее плохое решение: не получайте соседей, поэтому визуализируйте все боковые воксели.
Мои идеи:
solution 1:
{
p_neighbours[Face::FACE_COUNT] in Octant
create Octant neighbours for all childs on creating
create Octant neighbours when childs are removed
update meshs_borders flag when neighbour changed
Octant with childs has invalid Octant neighbours
problems:
Octant can have too many neighbours with different scales, or part of neighbour
hard to code and maintain, too much cases to solve
Octant still can have too many neighbours
}
solution 2:
{
don't store neighbour pointers in childs
instead get neighbour every time by coordinates
same problems as in prev solution, and new:
can't update "mesh borders out of date" flag when creating or removing childs
}