首页 > 其他分享 >VTK_Learning_体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制

VTK_Learning_体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制

时间:2022-12-30 13:04:28浏览次数:41  
标签:volumeProperty 光线 投影 vtkSmartPointer rw New include 绘制 volumeMapper


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; }

输出结果如下:

VTK_Learning_体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制_不透明度

标签:volumeProperty,光线,投影,vtkSmartPointer,rw,New,include,绘制,volumeMapper
From: https://blog.51cto.com/u_15926338/5980084

相关文章

  • python 绘制简易折线图
    #简易折线图绘制#encoding=utf-8#引入对应库文件importnumpyasnpimportmatplotlib.pyplotaspltx=np.linspace(0,20,100)#类似于平滑度0表示x坐标原......
  • 解析tid数据并绘制折线图(python)
    #解析tid数据并绘制折线图#encoding=utf-8#引入对应库文件importnumpyasnpimportmatplotlib.pyplotasplt#读取txt文件f=open('C:/Users/Administrator/D......
  • 第四节 进场保护区的绘制
    飞行程序设计软件实践一、传统进场保护区的绘制传统进场保护区绘制和评估的方式相对简单,困难的地方在于不同的规范对航路的宽度要求是不一样的。按照飞程序设计规范(DOC......
  • 第三节 PBN离场保护区的绘制
    飞行程序设计软件实践一、软件准备与任务分析软件工具:中望CAD、风标设计2023【社区版】。下载中望CAD对应的插件(WindSpiral2023中望版.dll),使用netload命令加载插件。......
  • MATLAB保存绘制的图片为PDF
    今天在导出MATLAB图片时总是变成.fig格式,别的软件也打不开。记录一下使用的方法在绘制图表的命令后加一句下述代码即可。gcf不改变,第二个参数表示要保存的文件名称。sa......
  • 第二节 离场保护区的绘制
    飞行程序设计软件实践一、软件准备与任务分析软件工具:中望CAD、风标设计2023【社区版】。下载中望CAD对应的插件(WindSpiral2023中望版.dll),使用netload命令加载插件......
  • 基于OpenCV做“三维重建”(1)--找到并绘制棋盘
       这里我要做的是第11章,关于3维重建的相关内容。【读书,做例子,多么轻松的学生岁月……】例子11.2.1获得图片的角点并且绘制出来。//GOCVHelper.cpp:定义......
  • 实用技巧 | MATLAB绘制长方体(附MATLAB代码)
    最近在工作中遇到这样一个实际问题,如何用MATLAB绘制出长方体?为了解决这一问题,在网上查阅许多资料后,尝试将相关代码进行调整修改,最终成功解决这一问题。为了让各位后续遇到这......
  • python:基础案例:动态柱状图:GDP动态柱状图绘制
               ......
  • #yyds干货盘点#【愚公系列】2022年12月 微信小程序-three.js绘制多维旋转正方体
    (文章目录)前言Three.js是一款运行在浏览器中的3D引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。一个典型的Three.js程序至少要包括渲染器(R......