基于八进制的LOD中基于体素的semless网格

时间:2019-06-13 11:42:23

标签: graphics 3d mesh voxel octree

Octree

保留体素水平的八角树,单个Octant具有16x16x16体素。

需要在所有6个面(相邻对象不能有子对象)上获取Octant的相邻体素,以为无缝网格创建正确的网格边界。

面孔可以有几个邻居或邻居的一部分。

例如:

  1. 十进位制的缩放比例为64,一个近邻的缩放比例为32->一个八分位数的侧面体素是根据4(2x2)个相邻的体素进行计算的,

  2. 另一个邻居的标尺为16->一个八度方的体素从16(4x4)个体素计算。

  3. 第三邻居的标度为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
}

1 个答案:

答案 0 :(得分:0)

我发现更好的解决方案#3: Octant边界体素为空->孩子的8个体素之一为空。 邻居仅连接到具有相同比例的八分圆。 如果缺少邻居,则从父母的邻居那里获取边界体素。