VTK知识学习(10)- 渲染引擎

1、前言

vtkProp;

vtkAbstractMapper;

vtkProperty;

vtkCamera;

vtkLight;

vtkRenderer;

vtkRenderWindow;

vtkRenderWindowInteractor;

vtkTransform;

vtkLookupTable;............

这些类都是与数据显示或渲染相关的。

用计算机图形学的专业词汇来说,就是它们构成了 VTK的渲染引擎(RenderingEngine)。

渲染引擎主要负责数据的可视化表达,是VTK里的两个重要概念之一,而另一个重要概念就是可视化管线(Visualization Pipeline)。

2、可视化管线

可视化管线是指用于获取或创建数据、处理数据以及把数据写入文件或者把数据传递给渲染引擎进行显示,这样的一种结构在 VTK里就称为可视化管线。

数据对象(Data Obiect)处理对象(Process Object)和数据流方向(Direction ofDataFlow)是可视化管线的三个基本要素。

每个 VTK 程序都会有可视化管线存在,比如示例RenderCylinder,其可视化管线可以简单地表示成如图所示的连接关系。

示例代码:

cs 复制代码
 
        private void RenderCylinder()
        {
           
            vtkCylinderSource cylinderSource = vtkCylinderSource.New();
            cylinderSource.SetHeight(3.0);   //设置高
            cylinderSource.SetRadius(1.0);   // 设置半径
            cylinderSource.SetResolution(100);  //设置横截面的等边多边形的边数。
 
          
            vtkPolyDataMapper polyDataMapper = vtkPolyDataMapper.New();
            //VTK可视化管线的输入数据接口,对应的可视化管线的输出数据接口为GetOutputPort().
            polyDataMapper.SetInputConnection(cylinderSource.GetOutputPort());
 
     
            vtkActor actor = vtkActor.New();
            actor.SetMapper(polyDataMapper); //用于设置生成几何图元的Mapper,即连接一个Actor到可视化管理的末端。
 
           
            vtkRenderer renderer = vtkRenderer.New();
            renderer.AddActor(actor);       //将vtkProp类型的对象添加到渲染场景中。
            renderer.SetBackground(0.3, 0.6, 0.7); //设置渲染场景的背景颜色,用RGB的格式设置。还有其它函数可以设置渐变效果。
 
          
            vtkRenderWindow renWin = renderWindowControl.RenderWindow;
            renWin.AddRenderer(renderer);                   // 添加渲染器
            renWin.Render();
        }

图示:

示例 RenderCylinder 的可视化管线非常简单,先是创建一个柱体数据,接着经Mapper后生成的图元直接送入渲染引警渲染,创建的数据没有经过任何处理。

3、一个复杂的可视化管线

在该示例中,先读入一个后缀为 vk的文件(head.vtk),然后用移动立方体法(vtkMarchingCubes)提取等值面,最后把等值面数据经Mapper送往渲染引擎进行显示(运行结果如图所示)。

示例代码:

cs 复制代码
//读取Structure_poings类型的vtk文件
vtkStructuredPointsReader reader = vtkStructuredPointsReader.New();
reader.SetFileName("data//head.vtk");

//处理读入的数据。
//用移动立方体提取等值面。   VTK中把与类似vtkMarchingCubes对数据处理的类称为Filter。
vtkMarchingCubes cubes = vtkMarchingCubes.New();
cubes.SetInputConnection(reader.GetOutputPort());
cubes.SetValue(0, 500);

//将生成的等值面数据进行Mapper
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(cubes.GetOutputPort());

//把Mapper的输出送往渲染引擎进行显示

vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);


vtkRenderer renderer = vtkRenderer.New();
renderer.AddActor(actor);
renderer.SetBackground(0.3, 1, 0.7);

vtkRenderWindow renWin = renderWindowControl.RenderWindow;
renWin.AddRenderer(renderer);
renWin.Render();
reader.Dispose();
cubes.Dispose();
mapper.Dispose();
actor.Dispose();
renderer.Dispose();

效果:

可视化管线:

相关推荐
行思理1 天前
go语言学习难度及适合学习的人群
开发语言·学习·golang
楚山之石1 天前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
Li_RuiQi1 天前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
SteveSenna1 天前
aubo学习:realsense手眼标定
学习·机器人·视觉检测
Li_RuiQi1 天前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
Canmag 兴隆磁性1 天前
回复磁导率 μ_R:永磁体在动态磁路中的关键参数
开发语言·学习·r语言·永磁材料·充磁·磁导率
lengxuenong1 天前
区间覆盖问题 · 简明学习手册1
java·学习·算法
悟道书生1 天前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
Be for thing2 天前
PyTorch自动求导Autograd详解|requires_grad、backward、grad、梯度清零
pytorch·学习·1024程序员节
小嘉丶学长2 天前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节