一、体绘制
体绘制有被称为三维重建,是直接利用体数据来生成二维图像的绘制技术。
它可以通过设置不透明度来显示体数据的内部不同成分。
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
View Code
这个和之前了解的管线是一样的。
六、遇到问题
1-no override found for 'vtkRayCastImageDisplayHelper'
这个时候就是为什么需要添加上面的代码:
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
七、参考
【1】VTK图形图像开发进阶 张晓东、罗火灵
纵一苇之所如,临万顷之茫然。