保留体素水平的八角树,单个Octant具有16x16x16体素。
需要在所有6个面(相邻对象不能有子对象)上获取Octant的相邻体素,以为无缝网格创建正确的网格边界。
面孔可以有几个邻居或邻居的一部分。
例如:
十进位制的缩放比例为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
}
答案 0 :(得分:0)
我发现更好的解决方案#3: Octant边界体素为空->孩子的8个体素之一为空。 邻居仅连接到具有相同比例的八分圆。 如果缺少邻居,则从父母的邻居那里获取边界体素。