填充体素模型内的封闭空间/空气 - 任何快速算法?

时间:2016-02-03 13:54:39

标签: java algorithm 3d modeling wavefront

我为.obj模型创建了一个Voxelizer,到目前为止工作得非常好。但是,它只会将模型的表面转换为体素而不会填满它。之后填写对于进一步导出和优化非常重要。

我正在考虑填补空间的选项,但是我无法将手指放在有效的算法上。

这就是“猫”内部的样子,再次出口为.obj。 enter image description here

是否有任何快速算法用于检测体素形状内的封闭空间?

使用

存储我的体素
List<Voxel> //Voxel contains 4 integers for x,y,z,rgb OR
Map<int[], java.awt.Color>.

我需要一种能够非常有效地使用其中一种算法的算法。

1 个答案:

答案 0 :(得分:0)

这是迄今为止我提出的最佳方法: 1)它假设您只有一个体积:没有单独的多边形网格。这很容易检查。如果不成立,则需要额外的步骤,但过程仍然是相同的。

2)取网格中不属于壳体素的任何体素。光线跟踪它到网格上最近的点,以确定它是否是内部或外部体积的一部分。

3)递归地洪水到所有不在shell中的邻居,直到没有生长的地方。当发生这种情况时,您已经识别出网格的外部或内部(取决于您开始的位置)。

4)找到相反的体积是一个简单的减法操作:vol_2 = all_voxels - shell - vol_1。如果vol_2为空,那么你的炮弹是打开的,洪水作业渗透了这些空隙。