体素化多边形网格

Voxelize a Polygon Mesh

我已经实现了 Marching Cube 和 Marching Tetrahedron 算法以将体素网格转换为多边形网格。现在我有兴趣做相反的事情,采用多边形网格并在体素网格中对其进行近似。

我目前正在研究我的方法,想知道是否有人有任何指导方针。我可以很容易地找到与任何体素立方体相交的三角形列表,但是如何将三角形转换为体素顶点所持有的值?

步骤

  1. 确定哪些立方体在里面、外面和在边界上。边界很容易确定,因为如果立方体包含任何三角形,它就在边界上。

  2. 从那里我想我需要遵循三角形法线并沿着体素网格投影以确定 inside/outside。将所有完全被内部包围的顶点标记为1,所有被外部包围的顶点标记为-1。

  3. ??这是我感到困惑的部分。我需要获取三角形并以某种方式将它们的值插入到顶点值中。我的猜测是我需要找到与体素子单元的 AABB 或在其中碰撞的三角形的所有点,并将其投影到所有子单元轴上。从那里我需要获取那些累积的位置,并通过设置 [-1,1] 之间的值来找出应该基于什么值,这样插值将最接近边界单元内的船体。 <--- 这部分是我不是 100% 理解的。

如果我理解正确,你应该关联到体素角的值是到表面的带符号距离(外部正,内部负),因此表面本身处于零级。

如果体素被单个三角形切割,您可以将距离分配给三角形的平面。如果有几个三角形交叉,情况就更复杂了。你可能会考虑角点在三角形上的正交投影,看看它们属于哪个三角形。