1.模型细化
vtk中实现网格细化的累有vtkLinearSubdivisionFilter、vtkLoopsubdivisionFilter、vtkButterflySubdivisionFilter。这三个类都继承自vtkInterpolatingSubdivisionFilter。具体的类的继承关系图如下图所示:
vtkInterpolatingSunvisionFilter内部提供了SetNumberOfSubvisions()函数来设置细化的次数,其中每次细化后模型的三角面片的个数将是细化前的四倍。因此,在对网格模型进行n次细化后,该模型的面片个数将是原始模型面片数目的4*n倍。1.1 vtkLinearSubdivisionFilter
该类实现了一种线性细分算法,每次细分将每个三角形面片生成四个新的面片,该算法比较简单,速度快,但是细分后不能产生光滑的模型。1.2 vtkLoopSubdivisionFilter
该类实现的是Loop细分算法,每次细分会将一个三角面片生成4个三角面片,具体算法思想可以参考文献[1];该方法可以生成光滑的连续曲面,应用比较广泛。1.3 vtkButterflySubdivisionFilter
该类实现了蝶形细分算法,具体的算法思想可以参考文献[2].
2.网格模型细化实验
#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); VTK_MODULE_INIT(vtkRenderingFreeType); VTK_MODULE_INIT(vtkInteractionStyle); #include <vtkSmartPointer.h> #include <vtkPolyDataReader.h> #include <vtkPolyData.h> #include <vtkLinearSubdivisionFilter.h> #include <vtkL