VTK 实例65:最大密度投影法体绘制

发布时间 2023-08-16 09:20:37作者: 一杯清酒邀明月

 1 #include <vtkAutoInit.h>
 2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
 3 VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2); //错误:no override found for 'vtkRayCastImageDisplayHelper'.
 4 VTK_MODULE_INIT(vtkRenderingFreeType);
 5 VTK_MODULE_INIT(vtkInteractionStyle);
 6 
 7 #include <vtkSmartPointer.h>
 8 #include <vtkImageData.h>
 9 #include <vtkStructuredPoints.h>
10 #include <vtkStructuredPointsReader.h>
11 #include <vtkFixedPointVolumeRayCastMIPHelper.h>
12 #include <vtkFixedPointVolumeRayCastMapper.h>
13 #include <vtkColorTransferFunction.h>
14 #include <vtkPiecewiseFunction.h>
15 #include <vtkRenderer.h>
16 #include <vtkRenderWindow.h>
17 #include <vtkRenderWindowInteractor.h>
18 #include <vtkVolumeProperty.h>
19 #include <vtkAxesActor.h>
20 #include <vtkImageShiftScale.h>
21 #include <vtkImageCast.h>
22 
23 //测试:../data/mummy.128.vtk
24 int main(int argc, char *argv[])
25 {
26     vtkSmartPointer<vtkStructuredPointsReader> reader =
27         vtkSmartPointer<vtkStructuredPointsReader>::New();
28 
29     reader->SetFileName("C:\\Users\\Administrator\\Desktop\\VTK2\\hellovtk\\vtk_图像处理学习\\第七章_VTK体绘制\\data\\mummy.128.vtk");
30     reader->Update();
31 
32     vtkSmartPointer<vtkFixedPointVolumeRayCastMIPHelper> rayCastFun =
33         vtkSmartPointer<vtkFixedPointVolumeRayCastMIPHelper>::New();
34 
35     vtkSmartPointer<vtkFixedPointVolumeRayCastMapper> volumeMapper =
36         vtkSmartPointer<vtkFixedPointVolumeRayCastMapper>::New();
37     volumeMapper->SetInputData(reader->GetOutput());
38     //volumeMapper->Set
39         //SetVolumeRayCastMapperFunction(rayCastFun);//必须设置,否则出错
40 
41     vtkSmartPointer<vtkVolumeProperty> volumeProperty = 
42         vtkSmartPointer<vtkVolumeProperty>::New();
43     volumeProperty->SetInterpolationTypeToLinear();
44     volumeProperty->ShadeOn();
45     volumeProperty->SetAmbient(0.4);
46     volumeProperty->SetDiffuse(0.6);
47     volumeProperty->SetSpecular(0.2);
48 
49     vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity = 
50         vtkSmartPointer<vtkPiecewiseFunction>::New();
51     compositeOpacity->AddPoint(70,   0.00);
52     compositeOpacity->AddPoint(90,   0.40);
53     compositeOpacity->AddPoint(180,  0.60);
54     volumeProperty->SetScalarOpacity(compositeOpacity);
55 
56     vtkSmartPointer<vtkColorTransferFunction> color = 
57         vtkSmartPointer<vtkColorTransferFunction>::New();
58     color->AddRGBPoint(0.000,  0.00, 0.00, 0.00);
59     color->AddRGBPoint(64.00,  1.00, 0.52, 0.30);
60     color->AddRGBPoint(190.0,  1.00, 1.00, 1.00);
61     color->AddRGBPoint(220.0,  0.20, 0.20, 0.20);
62     volumeProperty->SetColor(color);
63 
64     vtkSmartPointer<vtkVolume> volume = 
65         vtkSmartPointer<vtkVolume>::New();
66     volume->SetMapper(volumeMapper);
67     volume->SetProperty(volumeProperty);
68 
69     vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
70     ren->SetBackground(1.0, 1.0, 1.0);
71     ren->AddVolume( volume ); 
72 
73     vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
74     renWin->AddRenderer(ren);
75     renWin->SetSize(640, 480);
76     renWin->Render();
77     renWin->SetWindowName("MIPVolRenderingApp");
78 
79     vtkSmartPointer<vtkRenderWindowInteractor> iren = 
80         vtkSmartPointer<vtkRenderWindowInteractor>::New();
81     iren->SetRenderWindow(renWin);
82     ren->ResetCamera();
83 
84     renWin->Render();
85     iren->Start();
86 
87     return EXIT_SUCCESS;
88 }