一、体绘制

       体绘制有被称为三维重建,是直接利用体数据来生成二维图像的绘制技术。

       它可以通过设置不透明度来显示体数据的内部不同成分。

        VTK版本:8.2.0

        本博客主要运行VTK的例程:FixedPointVolumeRayCastMapperCT.cxx

二、VTK的体绘制管线

        在运行程序之前,我们先来大概看一下VTK体渲染的主要的一个过程:

        

使用VTK的Java绑定 vtk教程_使用VTK的Java绑定

 

      如图我们可以看到,数据从Data开始,传递给Mapper。

       Mapper需要设置两个对象:

       1》输入的数据

       2》光线投射函数

       之后Mapper和Property一起被传递给Volume, 然后Volume传递给Renderer。

       Renderer再传递给RenderWindow。

       它和一般的集合渲染的区别如图:

        

使用VTK的Java绑定 vtk教程_属性表_02

 

   三、工程构建

       1、首先在VS2019新建一个空白项目

       2、VTK的解压目录里面找到文件:

        D:\FilesSetup\VTK\VTK-8.2.0\Examples\VolumeRendering\Cxx

        

使用VTK的Java绑定 vtk教程_ci_03

         然后把其中的FixedPointVolumeRayCastMapper复制到项目文件夹,再在VS里面添加。

      3、添加VTK的属性表

       属性表内容如下:

      

使用VTK的Java绑定 vtk教程_ico_04

 

          

使用VTK的Java绑定 vtk教程_ico_05

 

        附加依赖项里面输入所有的PREFIX文件夹里面的lib文件夹的.lib文件。

        上面主要是对应的安装目录里面的内容:

        

使用VTK的Java绑定 vtk教程_使用VTK的Java绑定_06

 

          而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设置命令行参数

        选择调试-属性:

     

使用VTK的Java绑定 vtk教程_ci_07

 

     然后在里面设置命令行参数:

     

使用VTK的Java绑定 vtk教程_使用VTK的Java绑定_08

 

     具体参数 可以根据程序选择,这里我需要读取的是.mha文件,然后是这样设置的。

     后面的文件夹设置的就是.mha文件所在的文件夹

四、运行结果

     得到如下结果:

   

使用VTK的Java绑定 vtk教程_使用VTK的Java绑定_09

五、回过头看程序  

      整个程序结构如下:

使用VTK的Java绑定 vtk教程_属性表_10

使用VTK的Java绑定 vtk教程_ico_11

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的Java绑定 vtk教程_属性表_12

         这个时候就是为什么需要添加上面的代码:

VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)    

 

七、参考

          【1】VTK图形图像开发进阶 张晓东、罗火灵

 

  

 

 

 

 

 

       

纵一苇之所如,临万顷之茫然。