一、体绘制
体绘制有被称为三维重建,是直接利用体数据来生成二维图像的绘制技术。
它可以通过设置不透明度来显示体数据的内部不同成分。
VTK版本:8.2.0
本博客主要运行VTK的例程:FixedPointVolumeRayCastMapperCT.cxx
二、VTK的体绘制管线
在运行程序之前,我们先来大概看一下VTK体渲染的主要的一个过程:
如图我们可以看到,数据从Data开始,传递给Mapper。
Mapper需要设置两个对象:
1》输入的数据
2》光线投射函数
之后Mapper和Property一起被传递给Volume, 然后Volume传递给Renderer。
Renderer再传递给RenderWindow。
它和一般的集合渲染的区别如图:
三、工程构建
1、首先在VS2019新建一个空白项目
2、VTK的解压目录里面找到文件:
D:\FilesSetup\VTK\VTK-8.2.0\Examples\VolumeRendering\Cxx
然后把其中的FixedPointVolumeRayCastMapper复制到项目文件夹,再在VS里面添加。
3、添加VTK的属性表
属性表内容如下:
附加依赖项里面输入所有的PREFIX文件夹里面的lib文件夹的.lib文件。
上面主要是对应的安装目录里面的内容:
而prefix文件夹是我们在安装VTK编译的时候设置的。
4、添加代码:
在头文件的位置添加如下的代码:
#include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2 VTK_MODULE_INIT(vtkInteractionStyle);
这是为了能够在VSl里面能够正常使用VTK。
然后在main函数开头添加如下代码:
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
5设置命令行参数
选择调试-属性:
然后在里面设置命令行参数:
具体参数 可以根据程序选择,这里我需要读取的是.mha文件,然后是这样设置的。
后面的文件夹设置的就是.mha文件所在的文件夹
四、运行结果
得到如下结果:
五、回过头看程序
整个程序结构如下:
1-读取文件路径 dirname vtkDICOMImageReader* dicomReader input=dicomReader->GetOput(); reader=dicomReader; vtkImageResample* resample 2-//设置舞台、剧院 设置vtkRender* render vtkRenderWindow* renWin //剧院添加舞台 renWin->AddRenderer(render); //设置交互属性 vtkRenderWindowInteractor* iren iren->SetRenderWindow(renWin) 3-设置volume vtkVolume* volume=vtkVolume::New(); //设置Mapper vtkFixedPointVolumeRayCastMapper* mapper mapper->SetInputConnection(reader->GetOutputPort()); input->GetSpacing(spacing); //设置property vtkColorTransferFunction* colorFun vtkPiecewiseFunction* opacityFun property->Set() //volume连接 volume->SetProperty(property); volume->SetMapper(mapper); 4-显示 //设置默认窗口尺寸 renWin->SetSize(600,600) renWin->Render() //将物体添加到窗口 renderer->AddVolume(volume) renderer->ResetCamera(); //与数据交互 renWin->Render(); //iren->Start
这个和之前了解的管线是一样的。
六、遇到问题
1-no override found for 'vtkRayCastImageDisplayHelper'
这个时候就是为什么需要添加上面的代码:
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
可以参考这个链接:
https://blog.csdn.net/Q1302182594/article/details/51723119?locationNum=3&fps=1
七、参考
【1】VTK图形图像开发进阶 张晓东、罗火灵