二、VTK體渲染程序


一、體繪制

       體繪制有被稱為三維重建,是直接利用體數據來生成二維圖像的繪制技術。

       它可以通過設置不透明度來顯示體數據的內部不同成分。

        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)    

可以參考這個鏈接:
https://blog.csdn.net/Q1302182594/article/details/51723119?locationNum=3&fps=1

七、參考

          【1】VTK圖形圖像開發進階 張曉東、羅火靈

 

 

 

 

 

 

 

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM