본문 바로가기
프로그래밍/VTK

VTK Volume Rendering

by 이재만박사 2016. 10. 18.


1. 이미지 데이터 객체 생성


vtkSmartPointer<vtkImageData> imageData = vtkSmartPointer<vtkImageData>::New();



2. 필터 생성


- 이미지 데이터를 변경할 필요가 없으면 굳이 생성하지 않아도 됨



3. 매퍼 생성 후 이미지 설정


vtkSmartPointer<vtkSmartVolumeMapper> volumeMapper = vtkSmartPointer<vtkSmartVolumeMapper>::New();

volumeMapper->SetBlendModeToComposite();

volumeMapper->SetInputData(imageData);



4. 속성 설정


vtkSmartPointer<vtkVolumeProperty> volumeProperty = vtkSmartPointer<vtkVolumeProperty>::New();

volumeProperty->ShadeOff();

volumeProperty->SetInterpolationType(VTK_LINEAR_INTERPOLATION);


4 - 1. 색상 설정


vtkColorTransferFunction colorTransfer = vtkSmartPointer<vtkColorTransferFunction>::New();

colorTransfer->AddRGBPoint(0.0, 0.0, 0.0, 1.0);

colorTransfer->AddRGBPoint(40.0, 1.0, 0.0, 0.0);

colorTransfer->AddRGBPoint(255.0, 1.0, 1.0, 1.0);

volumeProperty->SetColor(colorTransfer);


4 - 2. 투명도 설정


vtkPiecewiseFunction opacity = vtkSmartPointer<vtkPiecewiseFunction>::New();

opacity->AddPoint(0.0, 0.0);

opacity->AddPoint(80.0, 1.0);

opacity->AddPoint(80.1, 0.0);

opacity->AddPoint(255.0, 0.0);

volumeProperty->SetScalarOpacity(compositeOpacity);



5. Volume 생성 후 매퍼와 속성 설정


vtkSmartPointer<vtkVolume> volume = vtkSmartPointer<vtkVolume>::New();

volume->SetMapper(volumeMapper);

volume->SetProperty(volumeProperty);



6. 렌더러 생성 후 Volume 추가


vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

renderer->SetBackground(0.8, 0.9, 0.5);

renderer->AddViewProp(volume);

renderer->ResetCamera();



7. 렌더 윈도우 생성 후 렌더러 추가


vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();

renderWindow->SetSize(500, 500);

renderWindow->AddRenderer(renderer);

renderWindow->Render();



8. 인터랙터 생성후 렌더윈도우 등록



vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkRenderWindowInteractor::New();

interactor->SetRenderWindow(renderWindow);



9. RayCast로 렌더링 


volumeMapper->SetRequestedRenderModeToRayCast();

renderWindow->Render();



10. 인터랙터 시작


interactor->Start();






댓글