Przykład
Użycie algorytmu Marching Cubes do generowania konturu w VTK jest niezwykle proste. Po odczytaniu danych z pliku wystarczy przekazać je do obiektu vtkMarchingCubes i zdefiniować wartość progową dla obiektu.
package require vtk
set inputFileName [ lindex $argv 0]
set isoLevel [expr [ lindex $argv 1] ]
set opacity [expr [ lindex $argv 2] ]
set color "0.9804 0.9216 0.8431"
vtkStructuredPointsReader reader
reader SetFileName $inputFileName
reader Update
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
vtkMarchingCubes iso
iso SetInput [reader GetOutput]
iso SetValue 0 $isoLevel
vtkPolyDataMapper isoMapper
isoMapper SetInput [iso GetOutput]
isoMapper ScalarVisibilityOff
vtkActor isoActor
isoActor SetMapper isoMapper
eval [isoActor GetProperty] SetColor $color
eval [isoActor GetProperty] SetOpacity $opacity
ren1 AddActor isoActor
ren1 SetBackground 0.5 0.6 0.8
ren1 SetGradientBackground 4
renWin SetSize 500 500
iren Initialize
wm withdraw .
Powyższy skrypt zawiera obsługę parametrów wejściowych. Dla przykładowych danych (tooth.vtk) wywołanie może wyglądać w następujący sposób:
tclsh vtk-iso_contour.tcl data/tooth.vtk 128 0.5
Analizując przykład, polecam zrobić eksperymenty na własnych danych zmieniając wartość konturu, kolor i przeźroczystość. Rezultaty jakie w ten sposób możemy uzyskać mogą być naprawdę różne, co widać już po samej zmianie stopnia przeźroczystości:
Możliwości VTK w zakresie generowania konturu nie kończą się na wyświetlaniu tylko jednej powierzchni, ale możemy zdefiniować sobie ich dowolną ilość. Może to być szczególnie przydatne np. w zastosowaniach klinicznych, gdzie każdy organ może zostać osobno wyświetlony.
Wadą techniki surface rendering, o której trzeba na koniec wspomnieć, jest jej wysokie zapotrzebowanie na moc obliczeniową i pamięć operacyjną. Może się okazać, że przy bardziej złożonych obiektach czas oczekiwania będzie na tyle długi, że warto będzie rozważyć skorzystanie z wizualizacji objętościowej.
0 komentarze:
Prześlij komentarz