1.裁剪

对于一些体积较大,结果比较复杂的体绘制的渲染效果一展示其内部细节,需要用到裁剪技术来渲染部分数据。vtkVolumeMapper类中提供两种裁剪技术分别是Cropping和Clipping。
Cropping技术只支持VTKImageData数据的裁剪。该方法在每个坐标轴上定义两个裁剪面,共有6个裁剪面。将三维空间分为27个可视区域。这些裁剪面仅与数据的原点和像素尺寸有关,而不依赖数据的任何坐标运算,因此可以使用27位数字来定义这些区域,每一位表示一个区域。在这些区域中,小于(xmin,ymin)的区域为第一位,然后根据先X方向,最后Z轴方向的顺序来定义每个区域的位号。例如,当只显示中间区域时,其对应的27位数字为0x0002000.

2.基于Cropping 的裁剪技术

vtkVolumeMapper中定义了Cropping接口函数,使用Cropping进行裁剪的代码下:
volumeMapper->SetCropping(1);//开启Cropping功能 volumeMapper->SetCroppingRegionPlanes(50, 150, 50, 200, 50, 150);//设置三个坐标轴上6个裁剪面的位置 volumeMapper->SetCroppingRegionFlags(0x0002000);//设置显示区域标记
此外,该类也提供了其他成员函数设置显示区域,避免自行计算显示区域标记:
SetCroppingRegionFlagsToSubVolume();
SetCroppingRegionFlagsToFence();
SetCroppingRegionFlagsToInvertedFence();
SetCroppingRegionFlagsToCross();
SetCroppingRegionFlagsToInvertedCross();

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkSmartPointer.h>
#include <vtkStructuredPoints.h>//vtkStructuredPointsReader* -> vtkGPUVolumeRayCastMapper*
#include <vtkStructuredPointsReader.h>
#include <vtkGPUVolumeRayCastMapper.h>
#include <vtkVolumeProperty.h>
#include <vtkPiecewiseFunction.h>
#include <vtkColorTransferFunction.h>
#include <vtkVolume.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCamera.h>int main()
{vtkSmartPointer<vtkStructuredPointsReader> reader =vtkSmartPointer<vtkStructuredPointsReader>::New();reader->SetFileName("data/mummy.128.vtk");reader->Update();vtkSmartPointer<vtkGPUVolumeRayCastMapper> origMapper =vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();origMapper->SetInputData(reader->GetOutput());vtkSmartPointer<vtkGPUVolumeRayCastMapper> volumeMapper =vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();volumeMapper->SetInputData(reader->GetOutput());volumeMapper->SetCropping(1);//开启Cropping功能volumeMapper->SetCroppingRegionPlanes(50, 150, 50, 200, 50, 150);volumeMapper->SetCroppingRegionFlags(0x0002000);/*****************************************************************///设置体绘制相关属性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.0);compositeOpacity->AddPoint(90, 0.4);compositeOpacity->AddPoint(180, 0.6);volumeProperty->SetScalarOpacity(compositeOpacity);//添加梯度不同明度属性vtkSmartPointer<vtkPiecewiseFunction> gradientOpacity =vtkSmartPointer<vtkPiecewiseFunction>::New();gradientOpacity->AddPoint(10, 0.0);gradientOpacity->AddPoint(90, 0.5);gradientOpacity->AddPoint(100, 1.0);volumeProperty->SetGradientOpacity(gradientOpacity);//添加颜色传输vtkSmartPointer<vtkColorTransferFunction> color =vtkSmartPointer<vtkColorTransferFunction>::New();color->AddRGBPoint(0, 0, 0, 0);color->AddRGBPoint(64, 1.0, 0.52, 0.3);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> origVolume =vtkSmartPointer<vtkVolume>::New();origVolume->SetMapper(origMapper);origVolume->SetProperty(volumeProperty);vtkSmartPointer<vtkVolume> croppingVolume =vtkSmartPointer<vtkVolume>::New();croppingVolume->SetMapper(volumeMapper);croppingVolume->SetProperty(volumeProperty);//double origView[4] = { 0, 0, 0.5, 1 };double croppingView[4] = { 0.5, 0, 1, 1 };vtkSmartPointer<vtkRenderer> origRender =vtkSmartPointer<vtkRenderer>::New();origRender->AddVolume(origVolume);origRender->SetBackground(1, 1, 0);origRender->SetViewport(origView);vtkSmartPointer<vtkRenderer> croppingRender =vtkSmartPointer<vtkRenderer>::New();croppingRender->AddVolume(croppingVolume);croppingRender->SetBackground(0, 1, 0);croppingRender->SetViewport(croppingView);///vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();rw->AddRenderer(origRender);rw->AddRenderer(croppingRender);rw->SetWindowName("Cropping Volume");rw->SetSize(640, 320);vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();rwi->SetRenderWindow(rw);origRender->GetActiveCamera()->SetPosition(0, -1, 0);origRender->GetActiveCamera()->SetFocalPoint(0, 0, 0);origRender->GetActiveCamera()->SetViewUp(0, 0, 1);origRender->GetActiveCamera()->Azimuth(30);origRender->GetActiveCamera()->Elevation(30);origRender->ResetCamera();croppingRender->SetActiveCamera(origRender->GetActiveCamera());rw->Render();rwi->Start();return 0;
}

VTK:体绘制裁剪——Cropping技术相关推荐

  1. VTK修炼之道66:体绘制裁剪_Cripping技术

    1.基于Clipping的体绘制裁剪技术 Clipping技术支持VTKImageData和VTKUntructuredGrid数据类型.该功能由vtkAbstractMapper3D类提供,对于那些 ...

  2. VTK修炼之道65:体绘制裁剪_Cropping技术

    1.裁剪 对于一些体积比较大,结构比较复杂的体数据进行体绘制的渲染效果难以展示其内部细节,需要用到裁剪技术来渲染部分数据.vtkVolumeMapper类中提供了两种裁剪技术,分别为Cropping和 ...

  3. VTK:体绘制裁剪——Clipping技术

    1.基于Clipping的体绘制裁剪技术 Clipping技术支持VTKImageData和VTKUntructuredGrid数据类型.该功能由vtkAbstractMapper3D提供,对于那些使 ...

  4. VTK_Learning_体绘制裁剪_Cropping技术

    1.裁剪 对于一些体积比较大,结构比较复杂的体数据进行体绘制的渲染效果难以展示其内部细节,需要用到裁剪技术来渲染部分数据.vtkVolumeMapper类中提供了两种裁剪技术,分别为Cropping和 ...

  5. VTK Cropping体绘制裁剪

    1.裁剪 对于一些体积比较大,结构比较复杂的体数据进行体绘制的渲染效果难以展示其内部细节,需要用到裁剪技术来渲染部分数据.vtkVolumeMapper类中提供了两种裁剪技术,分别为Cropping和 ...

  6. VTK Clipping 体绘制裁剪

    1.基于Clipping的体绘制裁剪技术 Clipping技术支持VTKImageData和VTKUntructuredGrid数据类型.该功能由vtkAbstractMapper3D类提供,对于那些 ...

  7. VTK笔记-裁剪分割-几何裁剪-vtkClipPolyData

    什么是裁剪分割   VTK加载二维数据和三维数据,我们通常观察到的是三视图图像,或者是vtkImageReslice获取到的转换矩阵对应的观察点三视图或者是斜平面图像,想要看到图像中间部分的渲染结果就 ...

  8. 三维扫描体数据的VTK体绘制程序设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85926449 资源下载地址:https://download.csdn.net/downl ...

  9. vtk体绘制代码报错的解决办法(代码在vtk7,8,9中都能运行),以及VTK数据集网站

    链接:vtk7.1.1官方文档 链接:官方示例代码 链接:VTK资源网站(需要什么资源搜索就行,官网示例中的数据集.资源基本都有) 体绘制代码运行不了,一直报错的解决方案 大家应该都看过VTK图形图像 ...

最新文章

  1. c++静态成员函数好处
  2. 单链表:头结点和头指针的实现方式
  3. 反应机理_过敏反应的发生机理及表现
  4. 提升网站竞争力从这三方面着手努力!
  5. 整理大型网站架构必知必会的几个服务器知识
  6. 重磅!第三届「星斗奖」榜单正式发布!
  7. Red Hat Enterprise Linux Server release 5.6 安装 MongoDB 2.6.4
  8. 启动php出现的错误
  9. 抛弃 Java 改用 Kotlin 的六个月后,我后悔了!
  10. 限时秒杀│中科院推荐!6个引自美国NASA盒子,玩转科学
  11. 鸿蒙系统的适配国产手机,真正的好消息!其它国产机,也在适配华为鸿蒙系统...
  12. python字符串类型_Python3的字符串类型(疯狂Python)
  13. 类型参数作为约束 where T : U 的作用
  14. 用python画分形树的详细解析_基于Python的matplotlib库绘制分形树
  15. 性能测试:基础(1)
  16. 常见路由adsl猫默认密码
  17. python的spider如何让鼠标不_【专题教学】python wooyun爬虫模拟鼠标等
  18. 常用工具及常用解决方案
  19. 计算机专业兴趣小组 名字,最有创意的小组名字及口号(精选70个)
  20. NodeMCU文档中文翻译 6 MQTT模块

热门文章

  1. 三星I458最新UCWEB 7.0正式版下载
  2. 批量上传视频到阿里云
  3. 百度搜索URL参数 搜索关键字
  4. 考勤软件系统服务器价格,软件整体方案报价单.doc
  5. 建国钞带领纪念钞强势崛起
  6. Android学习笔记十七.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider
  7. java jai create 方法_Java-JAI创建似乎使文件描述符保持打开状态
  8. Oracle数据库学习-Day3
  9. 最快服务器地址,如何可以选择适合自己的最快的DNS服务器?
  10. 范蠡《陶朱公生意经》