VTK 体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制
作者:互联网
1.固定点光线投影算法
vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者。该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能够支持任意类型带的医院或者独立多元数据。 例如,当输入为二元独立数据时,第一源数据用于颜色映射,而第二元作为不透明度映射。 该类使用了空间跳跃技术来加速体绘制渲染过程,而在内部计算时,统一使用了float数据类型。vtkFixedPointVolumeRayCastFMapper与vtkVolumeRayCastMapper对比
两个类的使用方法基本一致,都支持设置光线采样步长、图像采样距离、自动调整图像采样距离等操作。 当然两者也存在以下区别: 1.vtkFixedPointVolumeRayCastFMapper只支持基于Alpha合成的体绘制方法和最大密度体绘制方法,可以通过基类vtkVolumeMapper的接口函数来设置。void SetBlendModeToComposite(); void SetBlendModeToMaximumIntensity(); void SetBlendModeToMinimumIntensity(); void SetBlendModeToAddictive();2.该类仅支持先插值在分类操作; 3.该类支持更多种数据类型。
2.基于GPU加速的光线投射体绘制算法
vtkGPUVolumeRayCastMapper类实现了基于GPU加速的光线投影体绘制算法。该类的使用方法与上面两各类基本一致。同样可以实现光线采样步长、图像采样距离、自动调整图像采样距离等。 代码实现如下:1 #include <vtkAutoInit.h> 2 VTK_MODULE_INIT(vtkRenderingOpenGL); 3 VTK_MODULE_INIT(vtkRenderingVolumeOpenGL); 4 VTK_MODULE_INIT(vtkRenderingFreeType); 5 VTK_MODULE_INIT(vtkInteractionStyle); 6 7 #include <vtkSmartPointer.h> 8 #include <vtkStructuredPoints.h> 9 #include <vtkStructuredPointsReader.h> 10 #include <vtkGPUVolumeRayCastMapper.h> 11 #include <vtkColorTransferFunction.h> 12 #include <vtkPiecewiseFunction.h> 13 #include <vtkRenderer.h> 14 #include <vtkRenderWindow.h> 15 #include <vtkRenderWindowInteractor.h> 16 #include <vtkVolumeProperty.h> 17 #include <vtkVolumeRayCastIsosurfaceFunction.h> 18 19 int main(int argc, char *argv[]) 20 { 21 vtkSmartPointer<vtkStructuredPointsReader> reader = 22 vtkSmartPointer<vtkStructuredPointsReader>::New(); 23 reader->SetFileName("mummy.128.vtk"); 24 reader->Update(); 25 26 27 vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper = 28 vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New(); 29 volumeMapper->SetInputData(reader->GetOutput());; 30 volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance()/2); //设置光线采样距离 31 //volumeMapper->SetAutoAdjustSampleDistances(0);//设置图像采样步长 32 //volumeMapper->SetImageSampleDistance(4); 33 /*************************************************************************/ 34 vtkSmartPointer<vtkVolumeProperty> volumeProperty = 35 vtkSmartPointer<vtkVolumeProperty>::New(); 36 volumeProperty->SetInterpolationTypeToLinear(); 37 volumeProperty->ShadeOn(); //打开或者关闭阴影测试 38 volumeProperty->SetAmbient(0.4); 39 volumeProperty->SetDiffuse(0.6); //漫反射 40 volumeProperty->SetSpecular(0.2); //镜面反射 41 //设置不透明度 42 vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity = 43 vtkSmartPointer<vtkPiecewiseFunction>::New(); 44 compositeOpacity->AddPoint(70, 0.00); 45 compositeOpacity->AddPoint(90, 0.40); 46 compositeOpacity->AddPoint(180, 0.60); 47 volumeProperty->SetScalarOpacity(compositeOpacity); //设置不透明度传输函数 48 //设置梯度不透明属性 49 vtkSmartPointer<vtkPiecewiseFunction> volumeGradientOpacity = 50 vtkSmartPointer<vtkPiecewiseFunction>::New(); 51 volumeGradientOpacity->AddPoint(10, 0.0); 52 volumeGradientOpacity->AddPoint(90, 0.5); 53 volumeGradientOpacity->AddPoint(100, 1.0); 54 volumeProperty->SetGradientOpacity(volumeGradientOpacity);//设置梯度不透明度效果对比 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(0, 1, 0); 71 ren->AddVolume(volume); 72 73 vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New(); 74 rw->AddRenderer(ren); 75 rw->SetSize(640, 480); 76 rw->Render(); 77 rw->SetWindowName("VolumeRendering"); 78 79 vtkSmartPointer<vtkRenderWindowInteractor> rwi = 80 vtkSmartPointer<vtkRenderWindowInteractor>::New(); 81 rwi->SetRenderWindow(rw); 82 83 ren->ResetCamera(); 84 rw->Render(); 85 rwi->Start(); 86 87 return 0; 88 }输出结果如下:
标签:volumeProperty,光线,投影,vtkSmartPointer,rw,New,include,绘制,volumeMapper 来源: https://www.cnblogs.com/ybqjymy/p/14244437.html