VTK - создать 3D модель - PullRequest
       8

VTK - создать 3D модель

0 голосов
/ 13 ноября 2018

Я пытаюсь создать 3D-модель маски из трехмерных координатных точек, которые хранятся в текстовом файле. Я использую алгоритм Марширующих кубов. Похоже, что он не может связать отдельные точки, и поэтому в модели создаются отверстия.

Шаги: (по https://lorensen.github.io/VTKExamples/site/Cxx/Modelling/MarchingCubes/)

Сначала загрузите 3D-точки из файла как vtkPolyData.

Затем используйте vtkVoxelModeller

Поместите вывод voxelModeller в алгоритм MC и, наконец, визуализируйте

визуализация

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 13 ноября 2018

В примере берется сферическая сетка (она называется набором треугольников, образующих запечатанную трехмерную фигуру), преобразует ее в воксельное представление (трехмерное изображение, где вокселы вне сетки черные, а внутри нет), а затем преобразует ее обратно. в сетку, используя алгоритм Marching Cubes. На практике ввод и вывод примера очень похожи.

В вашем случае вы загружаете точки и пытаетесь создать их воксельное представление. Проблема в том, что ваш набор точек недостаточен для определения объема, это не запечатанная сетка, а просто список точек.

Чтобы повторить пример, вы должны сделать следующее:

1) построение трехмерной сетки из ваших точек (вы не дали никакой информации о том, что эти точки представляют / представляют, поэтому я не могу вам сильно помочь с этой задачей). Другими словами, вам нужно указать, как эти точки связаны между собой, чтобы сформировать трехмерную фигуру (vtkPolyData). VTK не может угадать, как ваши очки связаны, вы должны сказать это.

2) если у вас есть сетка, если вам нужно ее воксельное представление (vtkImageData), вы можете использовать vtkVoxelModeller или vtkImplicitModeller. На этом этапе вы можете использовать фильтры vtk, которым в качестве входных данных требуется vtkImageData.

3) наконец, чтобы преобразовать воксели обратно в сетку (vtkPolyData), вы можете использовать vtkMarchingCubes (или лучше vtkFlyingEdges3D, который очень похож на алгоритм, но намного быстрее).

Edit: Непонятно, какой должна быть фигура, но вы можете попробовать использовать vtkImageOpenClose3D, поэтому выполните следующие действия:

Сначала загрузите 3D-точки из файла как vtkPolyData.

Затем используйте vtkVoxelModeller

Поместить вывод voxelModeller в алгоритм vtkImageOpenClose3D, затем вывод алгоритма vtkImageOpenClose3D в алгоритм MC (изменить на vtkFlyingEdges3D) и, наконец, визуализировать

Пример для vtkImageOpenClose3D: https://www.vtk.org/Wiki/VTK/Examples/Cxx/Images/ImageOpenClose3D

...