一、體繪制
體繪制有被稱為三維重建,是直接利用體數據來生成二維圖像的繪制技術。
它可以通過設置不透明度來顯示體數據的內部不同成分。
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圖形圖像開發進階 張曉東、羅火靈