VTK修炼之道62:体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制

1.固定点光线投影算法

vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者。该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能够支持任意类型带的医院或者独立多元数据。
例如,当输入为二元独立数据时,第一源数据用于颜色映射,而第二元作为不透明度映射。
该类使用了空间跳跃技术来加速体绘制渲染过程,而在内部计算时,统一使用了float数据类型。

vtkFixedPointVolumeRayCastFMapper与vtkVolumeRayCastMapper对比

两个类的使用方法基本一致,都支持设置光线采样步长、图像采样距离、自动调整图像采样距离等操作。
当然两者也存在以下区别:
1.vtkFixedPointVolumeRayCastFMapper只支持基于Alpha合成的体绘制方法和最大密度体绘制方法,可以通过基类vtkVolumeMapper的接口函数来设置。
void SetBlendModeToComposite();
void SetBlendModeToMaximumIntensity();
void SetBlendModeToMinimumIntensity();
void SetBlendModeToAddictive();
2.该类仅支持先插值在分类操作;
3.该类支持更多种数据类型。

2.基于GPU加速的光线投射体绘制算法

vtkGPUVolumeRayCastMapper类实现了基于GPU加速的光线投影体绘制算法。该类的使用方法与上面两各类基本一致。同样可以实现光线采样步长、图像采样距离、自动调整图像采样距离等。
代码实现如下:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL); 
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);

#include <vtkSmartPointer.h>
#include <vtkStructuredPoints.h>
#include <vtkStructuredPointsReader.h>
#include <vtkGPUVolumeRayCastMapper.h>
#include <vtkColorTransferFunction.h>
#include <vtkPiecewiseFunction.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkVolumeProperty.h>
#include <vtkVolumeRayCastIsosurfaceFunction.h>

int main(int argc, char *argv[])
{
	vtkSmartPointer<vtkStructuredPointsReader> reader =
		vtkSmartPointer<vtkStructuredPointsReader>::New();
	reader->SetFileName("mummy.128.vtk");
	reader->Update();


	vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper =
		vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();
	volumeMapper->SetInputData(reader->GetOutput());;
	volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance()/2);	//设置光线采样距离
	//volumeMapper->SetAutoAdjustSampleDistances(0);//设置图像采样步长
	//volumeMapper->SetImageSampleDistance(4);
	/*************************************************************************/
	vtkSmartPointer<vtkVolumeProperty> volumeProperty =
		vtkSmartPointer<vtkVolumeProperty>::New();
	volumeProperty->SetInterpolationTypeToLinear();
	volumeProperty->ShadeOn();  //打开或者关闭阴影测试
	volumeProperty->SetAmbient(0.4);
	volumeProperty->SetDiffuse(0.6);  //漫反射
	volumeProperty->SetSpecular(0.2); //镜面反射
	//设置不透明度
	vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity =
		vtkSmartPointer<vtkPiecewiseFunction>::New();
	compositeOpacity->AddPoint(70, 0.00);
	compositeOpacity->AddPoint(90, 0.40);
	compositeOpacity->AddPoint(180, 0.60);
	volumeProperty->SetScalarOpacity(compositeOpacity); //设置不透明度传输函数
	//设置梯度不透明属性
	vtkSmartPointer<vtkPiecewiseFunction> volumeGradientOpacity =
		vtkSmartPointer<vtkPiecewiseFunction>::New();
	volumeGradientOpacity->AddPoint(10, 0.0);
	volumeGradientOpacity->AddPoint(90, 0.5);
	volumeGradientOpacity->AddPoint(100, 1.0);
	volumeProperty->SetGradientOpacity(volumeGradientOpacity);//设置梯度不透明度效果对比
	//设置颜色属性
	vtkSmartPointer<vtkColorTransferFunction> color =
		vtkSmartPointer<vtkColorTransferFunction>::New();
	color->AddRGBPoint(0.000, 0.00, 0.00, 0.00);
	color->AddRGBPoint(64.00, 1.00, 0.52, 0.30);
	color->AddRGBPoint(190.0, 1.00, 1.00, 1.00);
	color->AddRGBPoint(220.0, 0.20, 0.20, 0.20);
	volumeProperty->SetColor(color);
	/********************************************************************************/
	vtkSmartPointer<vtkVolume> volume =
		vtkSmartPointer<vtkVolume>::New();
	volume->SetMapper(volumeMapper);
	volume->SetProperty(volumeProperty);

	vtkSmartPointer<vtkRenderer> ren = vtkSmartPointer<vtkRenderer>::New();
	ren->SetBackground(0, 1, 0);
	ren->AddVolume(volume);

	vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New();
	rw->AddRenderer(ren);
	rw->SetSize(640, 480);
	rw->Render();
	rw->SetWindowName("VolumeRendering");

	vtkSmartPointer<vtkRenderWindowInteractor> rwi =
		vtkSmartPointer<vtkRenderWindowInteractor>::New();
	rwi->SetRenderWindow(rw);

	ren->ResetCamera();
	rw->Render();
	rwi->Start();

	return 0;
}
输出结果如下:

3.参看资料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3.  张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
31套vtk3d图像绘制/vtk光线投射法/vtk三维重建程序源码是一套用于可视化和处理三维图像数据的工具集。其中包括了vtk库中的一些功能和算法。 vtk3d图像绘制是指利用vtk库中的相关函数来创建和绘制三维数据图像。vtk库提供了一系列绘制基本图形的函数,并可以通过组合这些基本图形来创建并显示三维数据。利用vtk3d图像绘制,我们可以将三维图像数据以一种生动直观的方式呈现出来。 vtk光线投射法是指利用光线投射算法对三维图像数据进行可视化和模拟。该算法通过投射一束光线到三维图像中,并根据光线与不同物的相交情况来计算光线在图像中的传播和衰减。通过vtk提供的光线投射函数,我们可以将计算得到的光线在三维图像上进行显示,从而达到模拟真实光线传输的效果。 vtk三维重建程序源码通过利用vtk库中的三维重建函数,实现对二维图像数据进行三维重建的功能。该算法通过对多个二维图像进行处理和比对,来推测出图像所代表物的三维形状。vtk提供了一系列三维重建函数和算法,可以根据不同的需求选择适用的方法。利用vtk三维重建程序源码,我们可以将多个二维图像数据转化为一个三维模型,并进行后续的可视化和分析。 总的来说,这套31套vtk3d图像绘制/vtk光线投射法/vtk三维重建程序源码是一个功能强大的工具集,可以帮助我们处理和可视化三维图像数据,并进行相应的模拟和分析。无论是在科学研究、医学影像还是工程设计等领域,这套工具都具有广泛的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值