VTK+QT图像渲染的流程

Vtksmartpoint 类似于pcl的ptr 智能指针

1,需要有资源数据 <vtkspheresource> <vtkimagedata>

Vtksmartpoint<vtkspheresource> sphere1 =Vtksmartpoint<vtkspheresource>::New();

2,数据需要颜色查找表 <vtkLookupTable>,查找表里设置数据范围,映射类型是彩虹色,还是黑白,都可以设置;

作用是从将黑白图像的灰度去对应4色图或者3色图的数据。

vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New()

3,滤波器 <vtkImageMapToColors> 作用是将数据通过查找表获取的内容给到映射器mapper。怎么理解呢,一个灰度图,由滤波器和对应的查找表可以转化成一个rgb图,或者说rgba数据图。这样就成为彩色的图了。

vtkSmartPointer<vtkImageMapToColors> map_to_colors = vtkSmartPointer<vtkImageMapToColors>::New();

map_to_colors->SetInputData(vtk_image); //添加单通道vtk图像

map_to_colors->SetLookupTable(lut); //添加颜色查找表lut

map_to_colors->SetOutputFormatToRGB(); // 输出 RGB 图像

//map_to_colors->SetOutputFormatToRGBA(); // 输出 RGBA 图像

map_to_colors->Update();

4,映射器mapper <vtePolyDataMapper> mapper就是来承接滤波器转化的rgb或者rgba的结果

Vtksmartpointer<vtepolydatamapper>spheremapper =Vtksmartpointer<vtepolydatamapper>::NEW()

***如果是vtkimagedata的actor,会自带mapper,不需要创建

5,演员,由演员去演<vteactor> 把转换后的数据交给actor去表演。

Vtksmartpointer<vteactor> image_actor=Vtksmartpointer<vteactor>::New();

image_actor->setmapper(spheremapper )

//或者直接用由actor的mapper跟滤波器的结果相连,并设置插值方式

image_actor->GetMapper()->SetInputConnection(map_to_colors->GetOutputPort());

image_actor->GetProperty()->SetInterpolationTypeToNearest(); //获取演员属性,设置它的差值方式是最近邻。

6,演员的舞台<vtkrender> render上可以放很多actor, render上有默认灯光

Vtksmartpointer<vterender> render =Vtksmartpointer<vterender>::New();

Render->removeallviewprops();

Render->addactor(sphere1actor);添加演员1,2,3,4

Render->setbackgtound(0.5,0.6,0.1);设置背景

Render->removealllights(); 移除灯光

7,窗口<vtkrenderwindow> 将舞台放在窗口里演

Vtksmartpointer<vtkrenderwindow> renderwindow =Vtksmartpointer<vtkrenderwindow>::New();

Renderwindow->addrender(Render);添加舞台

Renderwindow->setsize(500,500);

Renderwindow->setwindowname('vtk');

8,窗口放在qt的ui控件里进行显示

ui->widget->setRenderWindow(render_window);

9, 鼠标 键盘 交互(演员与观众的互动)

Vtksmartpointer<vtkrenderwindowinteractor> iren =Vtksmartpointer<vtkrenderwindowinteractor>::New();

iren ->initialize();交互初始化

Iren->start();

基本完成。