#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeType,vtkRenderingOpenGL)
#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL)
#include "vtkPiecewiseFunction.h"
#include "vtkColorTransferFunction.h"
#include "vtkGPUVolumeRayCastMapper.h"
#include "vtkSmartVolumeMapper.h"
#include "vtkImageData.h"
#include "vtkVolumeProperty.h"
#include "vtkVolume.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include <vtkNIFTIImageReader.h>
#include "vtkAutoInit.h"
int main(int, char* [])
{
vtkNIFTIImageReader* reader = vtkNIFTIImageReader::New();
reader->SetFileName("D:/vtkdata/resource/295.nii");
reader->Update();
vtkGPUVolumeRayCastMapper* mapper = vtkGPUVolumeRayCastMapper::New();
mapper->SetInputData(reader->GetOutput());
vtkVolume* volume = vtkVolume::New();
volume->SetMapper(mapper);
vtkVolumeProperty* property = vtkVolumeProperty::New();
vtkPiecewiseFunction* popacity = vtkPiecewiseFunction::New();
popacity->AddPoint(1000, 0.0);
popacity->AddPoint(4000, 0.68);
popacity->AddPoint(7000, 0.83);
vtkColorTransferFunction* color = vtkColorTransferFunction::New();
color->AddHSVPoint(1000, 0.042, 0.73, 0.55);
color->AddHSVPoint(2500, 0.042, 0.73, 0.55, 0.5, 0.92);
color->AddHSVPoint(4000, 0.088, 0.67, 0.88);
color->AddHSVPoint(5500, 0.088, 0.67, 0.88, 0.33, 0.45);
color->AddHSVPoint(7000, 0.95, 0.063, 1.0);
property->SetColor(color);
property->SetScalarOpacity(popacity);
property->ShadeOn();
property->SetInterpolationTypeToLinear();
property->SetShade(0, 1);
property->SetDiffuse(0.9);
property->SetAmbient(0.1);
property->SetSpecular(0.2);
property->SetSpecularPower(10.0);
property->SetComponentWeight(0, 1);
property->SetDisableGradientOpacity(1);
property->DisableGradientOpacityOn();
property->SetScalarOpacityUnitDistance(0.891927);
volume->SetProperty(property);
vtkRenderer* ren = vtkRenderer::New();
ren->AddActor(volume);
ren->SetBackground(0.1, 0.2, 0.4);
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);
vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
renWin->SetSize(600, 600);
renWin->Render();
iren->Start();
return 0;
}
//#include "vtkAutoInit.h"
//#include "vtkDICOMImageReader.h"
//#include <vtkSmartPointer.h>
//#include <vtkMetaImageReader.h>
//#include <vtkPiecewiseFunction.h>
//#include <vtkColorTransferFunction.h>
//#include <vtkVolumeProperty.h>
//#include <vtkVolumeRayCastCompositeFunction.h>
//#include <vtkVolumeRayCastMapper.h>
//#include <vtkVolume.h>
//#include <vtkRenderer.h>
//#include <vtkRenderWindow.h>
//#include <vtkRenderWindowInteractor.h>
//#include <vtkImageCast.h>
//#include <vtkInteractorStyleTrackballCamera.h>
//#include <vtkImageData.h>
//#include <vtkPNGReader.h>
//#include<vtkBMPReader.h>
//#include<vtkImageViewer2.h>
//
//
//void main()
//{
// vtkRenderer* ren = vtkRenderer::New();
// vtkRenderWindow* renWin = vtkRenderWindow::New();
// renWin->AddRenderer(ren);
// vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
// iren->SetRenderWindow(renWin);
// vtkInteractorStyleTrackballCamera* style = vtkInteractorStyleTrackballCamera::New();
// iren->SetInteractorStyle(style);
// //设置数据读入
// vtkSmartPointer<vtkMetaImageReader> reader =
// vtkSmartPointer<vtkMetaImageReader>::New();
// reader->SetFileName("D:/vtkdata/brain.mhd");
// vtkSmartPointer<vtkBMPReader> reader1=
// vtkSmartPointer<vtkBMPReader>::New();
// //reader1->SetFileName("D:/data/2022-07-27-0001/d475066f-b214-4630-bd1c-bb3915273254/usimage202207270001154934207.bmp");
// //reader->SetFileName("D:/data/2022-07-27-0001/d475066f-b214-4630-bd1c-bb3915273254/usimage202207270001154934207.cin");
// //reader1->Update();
// reader->Update();
// //
// //vtkSmartPointer<vtkImageViewer2>imageViewer =
// // vtkSmartPointer<vtkImageViewer2>::New();
// //imageViewer->SetInputConnection(reader1->GetOutputPort());
// //imageViewer->SetupInteractor(iren);
// //imageViewer->Render();
// //imageViewer->GetRenderer()->ResetCamera();
// //imageViewer->Render();
// //imageViewer->GetRenderWindow()->SetWindowName("read and show png test");
// //
// vtkImageCast* readerImageCast = vtkImageCast::New();
// readerImageCast->SetInputConnection(reader->GetOutputPort());
// readerImageCast->SetOutputScalarTypeToUnsignedShort();
// readerImageCast->ClampOverflowOn();//设置阀值
// //设置不透明度传递函数,此为一维分段传输函数
// vtkPiecewiseFunction* opacityTransferFunction = vtkPiecewiseFunction::New();
// opacityTransferFunction->AddPoint(20, 0.0);
// opacityTransferFunction->AddPoint(255, 0.1);
// opacityTransferFunction->AddPoint(1005, 0.6);
//
// //设置颜色传递函数
// vtkColorTransferFunction* colorTransferFunction = vtkColorTransferFunction::New();
// colorTransferFunction->AddRGBPoint(0.0, 0.0, 0.5, 0.0);
// colorTransferFunction->AddRGBPoint(60.0, 1.0, 0.0, 0.0);
// colorTransferFunction->AddRGBPoint(128.0, 0.2, 0.1, 0.9);
// colorTransferFunction->AddRGBPoint(196.0, 0.27, 0.21, 0.1);
// colorTransferFunction->AddRGBPoint(255.0, 0.8, 0.8, 0.8);
// vtkVolumeProperty* volumeProperty = vtkVolumeProperty::New();
// //设定渲染属性
// volumeProperty->SetColor(colorTransferFunction);
// volumeProperty->SetScalarOpacity(opacityTransferFunction);//传输函数不透明度
// volumeProperty->ShadeOn();
// volumeProperty->SetInterpolationTypeToLinear();
// volumeProperty->SetAmbient(0.2);
// volumeProperty->SetDiffuse(0.4);
// volumeProperty->SetSpecular(0.6);
// volumeProperty->SetSpecularPower(10);
// //定义光线投射方法为RayCasting体渲染方法
// vtkVolumeRayCastCompositeFunction* compositeFunction = vtkVolumeRayCastCompositeFunction::New();
// //定义渲染Mapper
// vtkVolumeRayCastMapper* volumeMapper = vtkVolumeRayCastMapper::New();
// volumeMapper->SetVolumeRayCastFunction(compositeFunction);
// volumeMapper->SetInputConnection(readerImageCast->GetOutputPort());
// volumeMapper->SetNumberOfThreads(3);
// //定义Volume
// vtkVolume* volume = vtkVolume::New();
// volume->SetMapper(volumeMapper);
// volume->SetProperty(volumeProperty);
// //将Volume装载到渲染器中
// ren->AddVolume(volume);
// ren->SetBackground(1, 1, 1);
// renWin->SetSize(600, 600);
// renWin->Render();
// iren->Initialize();
// iren->Start();//初始化并进行交互绘制
// ren->ResetCameraClippingRange();
// //资源的删除和释放
// volumeMapper->Delete();
// readerImageCast->Delete();
// iren->Delete();
// ren->Delete();
// renWin->Delete();
// opacityTransferFunction->Delete();
// volumeProperty->Delete();
// compositeFunction->Delete();
// volume->Delete();
// colorTransferFunction->Delete();
//}
vtk体绘制代码暂存
最新推荐文章于 2023-03-27 20:59:38 发布