使用CGAL实现平面分割三维模型

关于cgal的使用就不介绍了。安装了也很麻烦,但是可以直接使用库,可以去我的上一篇文章下载,cgal下载
这里只简单的说说实现切割模型的方法。
判断所有的顶点在面的哪一面,如果一个面的所有点都在切割面的正面,那么这个面就是在切割面的positive部分,反之,如果一个面的所有点都在切割面的负面,那么这个面就是在切割面的negative部分,其余的面就是和切割面相交了。根据这个简单的原理,我们就可以用切割面把模型分为三部分。以下是我用cgal实现的效果。


从图片来看,效果基本还行,只是切割处不光滑,但是对于这么简单的算法能实现的效果,已经不错了,性价比很高。
如果想进一步平滑分割处,有什么办法了?我们既然已经把模型内部的面分成三部分了,那么我们只需要计算会和切割面相交的面和切割面的交点,面和面的交点应该是一条直线,那么应该有2个交点,我们再沿着这条相交线,对模型内部的面进行分割就行了。如果分割后出现非三角面,我们还可以进行三角面片化。具体的实现也不会难如上青天。