Octree для хранения уровней лодов вокселей, одиночный Octant имеет 16x16x16 вокселей.
Необходимо получить соседние воксели для октанта на всех 6 гранях (у соседа не должно быть дочерних элементов), чтобы создать правильные границы сетки для бесшовной сетки.
Грань может иметь несколько соседей или часть соседа.
Например:
Октант имеет масштаб 64, один сосед имеет масштаб 32 -> один воксель стороны октанта вычисляется из 4 (2x2) соседних вокселей,
Другой сосед имеет масштаб 16 -> один воксель стороны октанта вычисляется из 16 (4x4) вокселей.
Третий сосед имеет масштаб 1 -> Воксель стороны одного октанта вычисляется из 4096 (64 * 64) вокселей.
Octant может иметь слишком много соседей, нужно добавить некоторые ограничения.
При обновлении соседа - установить флаг "границы сетки устарели"
Текущее плохое решение: не получать соседей, поэтому визуализировать все боковые воксели.
Мои идеи:
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
}