我为.obj模型创建了一个Voxelizer,到目前为止工作得非常好。但是,它只会将模型的表面转换为体素而不会填满它。之后填写对于进一步导出和优化非常重要。
我正在考虑填补空间的选项,但是我无法将手指放在有效的算法上。
是否有任何快速算法用于检测体素形状内的封闭空间?
使用
存储我的体素List<Voxel> //Voxel contains 4 integers for x,y,z,rgb OR
Map<int[], java.awt.Color>.
我需要一种能够非常有效地使用其中一种算法的算法。
答案 0 :(得分:0)
这是迄今为止我提出的最佳方法: 1)它假设您只有一个体积:没有单独的多边形网格。这很容易检查。如果不成立,则需要额外的步骤,但过程仍然是相同的。
2)取网格中不属于壳体素的任何体素。光线跟踪它到网格上最近的点,以确定它是否是内部或外部体积的一部分。
3)递归地洪水到所有不在shell中的邻居,直到没有生长的地方。当发生这种情况时,您已经识别出网格的外部或内部(取决于您开始的位置)。
4)找到相反的体积是一个简单的减法操作:vol_2 = all_voxels - shell - vol_1。如果vol_2为空,那么你的炮弹是打开的,洪水作业渗透了这些空隙。