VTK 实例68:透明度

发布时间 2023-08-16 09:20:37作者: 一杯清酒邀明月
  1 #include <vtkAutoInit.h>
  2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
  3 VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
  4 VTK_MODULE_INIT(vtkRenderingFreeType);
  5 VTK_MODULE_INIT(vtkInteractionStyle);
  6 
  7 #include <vtkSmartPointer.h>
  8 #include <vtkStructuredPointsReader.h>
  9 #include <vtkStructuredPoints.h>
 10 #include <vtkGPUVolumeRayCastMapper.h>
 11 #include <vtkVolumeProperty.h>
 12 #include <vtkPiecewiseFunction.h>
 13 #include <vtkColorTransferFunction.h>
 14 #include <vtkVolume.h>
 15 #include <vtkRenderer.h>
 16 #include <vtkRenderWindow.h>
 17 #include <vtkRenderWindowInteractor.h>
 18 #include <vtkCamera.h>
 19 
 20 int main()
 21 {
 22     vtkSmartPointer<vtkStructuredPointsReader> reader =
 23         vtkSmartPointer<vtkStructuredPointsReader>::New();
 24     reader->SetFileName("C:\\Users\\Administrator\\Desktop\\VTK2\\hellovtk\\vtk_图像处理学习\\第七章_VTK体绘制\\data\\mummy.128.vtk");
 25     reader->Update();
 26 
 27     vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper1 =
 28         vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();
 29     volumeMapper1->SetInputData(reader->GetOutput());
 30 
 31     vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper2 =
 32         vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();
 33     volumeMapper2->SetInputData(reader->GetOutput());
 34     /****************************************************************/
 35     vtkSmartPointer<vtkVolumeProperty> volumeProperty1 =
 36         vtkSmartPointer<vtkVolumeProperty>::New();
 37     volumeProperty1->SetInterpolationTypeToLinear(); //设置线性插值
 38     volumeProperty1->ShadeOn();//开启阴影功能 
 39     volumeProperty1->SetAmbient(0.4);//设置环境温度系数
 40     volumeProperty1->SetDiffuse(0.6);//设置漫反射系数
 41     volumeProperty1->SetSpecular(0.2);//设置镜面反射系数
 42 
 43     vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity1 =
 44         vtkSmartPointer<vtkPiecewiseFunction>::New();
 45     compositeOpacity1->AddPoint(70, 0.0);
 46     compositeOpacity1->AddPoint(90, 0.4);
 47     compositeOpacity1->AddPoint(180, 0.6);
 48     volumeProperty1->SetScalarOpacity(compositeOpacity1);
 49     
 50     vtkSmartPointer<vtkVolumeProperty> volumeProperty2 =
 51         vtkSmartPointer<vtkVolumeProperty>::New();
 52     volumeProperty2->SetInterpolationTypeToLinear(); //设置线性插值
 53     volumeProperty2->ShadeOn();//开启阴影功能 
 54     volumeProperty2->SetAmbient(0.4);//设置环境温度系数
 55     volumeProperty2->SetDiffuse(0.6);//设置漫反射系数
 56     volumeProperty2->SetSpecular(0.2);//设置镜面反射系数
 57 
 58     vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity2 =
 59         vtkSmartPointer<vtkPiecewiseFunction>::New();
 60     compositeOpacity2->AddPoint(100, 0.0);
 61     compositeOpacity2->AddPoint(140, 0.4);
 62     compositeOpacity2->AddPoint(180, 0.6);
 63     volumeProperty2->SetScalarOpacity(compositeOpacity2);
 64     /
 65     vtkSmartPointer<vtkPiecewiseFunction> gradientOpacity =
 66         vtkSmartPointer<vtkPiecewiseFunction>::New();
 67     gradientOpacity->AddPoint(10, 0.0);
 68     gradientOpacity->AddPoint(90, 0.5);
 69     gradientOpacity->AddPoint(100, 1.0);
 70     volumeProperty1->SetGradientOpacity(gradientOpacity);
 71     volumeProperty2->SetGradientOpacity(gradientOpacity);
 72 
 73     vtkSmartPointer<vtkColorTransferFunction> color =
 74         vtkSmartPointer<vtkColorTransferFunction>::New();
 75     color->AddRGBPoint(0, 0, 0, 0);
 76     color->AddRGBPoint(64, 1.0, 0.52, 0.3);
 77     color->AddRGBPoint(190.0, 1.00, 1.00, 1.00);
 78     color->AddRGBPoint(220.0, 0.20, 0.20, 0.20);
 79     volumeProperty1->SetColor(color);
 80     volumeProperty2->SetColor(color);
 81     /****************************************************************/
 82     vtkSmartPointer<vtkVolume> volume1 =
 83         vtkSmartPointer<vtkVolume>::New();
 84     volume1->SetMapper(volumeMapper1);
 85     volume1->SetProperty(volumeProperty1);
 86 
 87     vtkSmartPointer<vtkVolume> volume2 =
 88         vtkSmartPointer<vtkVolume>::New();
 89     volume2->SetMapper(volumeMapper2);
 90     volume2->SetProperty(volumeProperty2);
 91     //
 92     double View1[4] = { 0, 0, 0.5, 1 };
 93     double View2[4] = { 0.5, 0, 1, 1 };
 94     vtkSmartPointer<vtkRenderer> render1 =
 95         vtkSmartPointer<vtkRenderer>::New();
 96     render1->AddVolume(volume1);
 97     render1->SetViewport(View1);
 98     render1->SetBackground(1, 1, 0);
 99 
100     vtkSmartPointer<vtkRenderer> render2 =
101         vtkSmartPointer<vtkRenderer>::New();
102     render2->AddVolume(volume2);
103     render2->SetViewport(View2);
104     render2->SetBackground(0, 1, 0);
105 
106     vtkSmartPointer<vtkRenderWindow> rw =
107         vtkSmartPointer<vtkRenderWindow>::New();
108     rw->AddRenderer(render1);
109     rw->AddRenderer(render2);
110     rw->SetSize(640, 320);
111     rw->SetWindowName("Differ Gray Opacity Function");
112 
113     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
114         vtkSmartPointer<vtkRenderWindowInteractor>::New();
115     rwi->SetRenderWindow(rw);
116 
117     render1->GetActiveCamera()->SetPosition(0, -1, 0);
118     render1->GetActiveCamera()->SetFocalPoint(0, 0, 0);
119     render1->GetActiveCamera()->SetViewUp(0, 0, 1);
120     render1->GetActiveCamera()->Azimuth(30);
121     render1->GetActiveCamera()->Elevation(30);
122     render1->ResetCamera();
123     render2->SetActiveCamera(render1->GetActiveCamera());
124 
125     rw->Render();
126     rwi->Start();
127     return 0;
128 }