我正在尝试从存储在txt文件中的3D坐标点创建3D蒙版模型。我使用行进立方体算法。似乎无法链接各个点,因此在模型中创建了孔。
步骤:(按list of semantically similar items)
首先,从文件中将3D点加载为vtkPolyData。
然后,使用vtkVoxelModeller
将voxelModeller输出到MC算法并最终可视化
https://lorensen.github.io/VTKExamples/site/Cxx/Modelling/MarchingCubes/
有什么想法吗?
谢谢
答案 0 :(得分:0)
该示例采用球形网格(也称为一组形成密封3D形状的三角形),将其转换为体素表示(3D图像,其中网格外部的体素为黑色,而内部的体素则为黑色),然后将其转换回使用Marching Cubes算法进行网格划分。实际上,示例的输入和输出是非常相似的网格。
在您的情况下,您加载点并尝试为其创建体素表示。问题在于您的点集不足以定义体积,它们不是密封的网格,而只是点列表。
为了复制示例,您应该执行以下操作:
1)根据您的点构建3D网格(您未提供有关点表示/表示的信息,因此我无法为您完成此任务。)换句话说,您需要告诉这些点之间如何连接才能形成3D形状(vtkPolyData)。 VTK无法猜测您的点之间是如何连接的,必须告诉它。
2)有了网格后,如果需要它的体素表示(vtkImageData),则可以使用vtkVoxelModeller或vtkImplicitModeller。此时,您可以使用需要vtkImageData作为输入的vtk过滤器。
3)最后,为了将体素转换回网格(vtkPolyData),可以使用vtkMarchingCubes(或更好的vtkFlyingEdges3D,该算法非常相似,但速度更快)。
编辑: 目前尚不清楚您想要的形状是什么,但是您可以尝试使用vtkImageOpenClose3D,因此步骤如下:
首先,从文件中将3D点加载为vtkPolyData。
然后,使用vtkVoxelModeller
将voxelModeller输出输出到vtkImageOpenClose3D算法,然后将vtkImageOpenClose3D算法输出到MC(更改为vtkFlyingEdges3D)算法,最后进行可视化
vtkImageOpenClose3D的示例: https://www.vtk.org/Wiki/VTK/Examples/Cxx/Images/ImageOpenClose3D