我需要将网格导入一个只能处理一个每个对象的网格的应用程序。因此,我被迫将网格分为几个零件,直到所有pics都低于最大顶点计数为止。分裂必须在运行时发生,因此我不能使用外部应用程序将网格分开。
我对网格的分裂方式不需要任何要求,但是它应该保存所有面孔,正常和紫外线。
是否有任何已知算法可以这样做?
您需要使用三角形邻接图。从三角形开始,然后访问。然后从每个三角形一侧,移动未访问的相邻三角形,并将其标记为访问。顶点计数达到极限后,创建一个新的网格并重新开始。
一种既简单的代码又可以给出相当不错的结果的可能性是将三角形与希尔伯特排序进行空间分类[1]。然后,您将遍历三角形的有序列表,将它们分组为n个元素的簇,并生成网格的不同部分。我的地理图编程库[2]中有实现。请参阅函数mesh_partition()[3]。如果要优化零件的"紧凑性"(即最大程度地减少每个零件中连接的组件的数量),则可以使用诸如Metis [4]或Scotch [5]之类的图划分算法,应用于方面(每个刻面节点和一个连接相邻面的边缘的节点)。但是,它更昂贵(就时间和记忆消耗而言)。
[1] https://en.wikipedia.org/wiki/hilbert_curve
[2] http://alice.loria.fr/software/geogram/doc/html/index.html
[3] http://alice.loria.fr/software/geogram/doc/html/mesh__partition_8h.html
[4] http://glaros.dtc.umn.edu/gkhome/metis/metis/metis/metis/overview
[5] http://www.labri.fr/perso/pelegrin/scotch/