本文讨论使用Octree(八叉树)重建表面的问题。
3 Continuous isosurfaces
讨论连续性问题。
如果在Octree上储存数据,那么在不同大小的格子交界的地方,数据可能会不连续。
本文采用的方法:在大小格子交界处,让大格子在小格子上sample数值:
也就是用方块节点插值出来三角节点的值,把原来的扔掉。这样一来,小格子上的数值就是线性的,那么marching cubes就会在大小格子上得到同样的intersection point,也就是说数值是连续的。
但是,虽然数值连续,但算出来的表面不一定连续。如图3:
本文的方法,首先算法保证相邻的叶子格子不会相差超过一层(one generation,应该是这个意思)。也就是都是图3这种情况:一个大格子和四个小格子相邻。然后如图6所示:在marching cubes用大格子算出来的三角形重心处加一个点,把这个三角形切成一堆“扇叶”,把小格子算出来的那些交点加到这堆“扇叶”的外圈,切得更细就行了。