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();

效果:

可视化管线:

相关推荐
海尔辛34 分钟前
学习黑客5 分钟读懂什么是 CVE?
网络·学习·安全
Pluchon1 小时前
硅基计划2.0 学习总结 壹 Java初阶
java·开发语言·学习·算法
Brookty2 小时前
【Java学习】Lambda表达式
java·学习
Clockwiseee2 小时前
SSTI记录
运维·服务器·redis·学习
Huazzi.2 小时前
使用SSH协议克隆详细步骤
linux·运维·学习·ssh·编程
s_little_monster3 小时前
【Linux】socket网络编程之TCP
linux·运维·网络·笔记·学习·tcp/ip·学习方法
柴薪之王、睥睨众生3 小时前
(自用)Java学习-5.12(Redis,B2C电商)
java·开发语言·学习
LVerrrr4 小时前
Missashe考研日记-day36(改版说明)
学习·考研
虾球xz4 小时前
游戏引擎学习第272天:显式移动转换
c++·学习·游戏引擎
HY小海4 小时前
【数据结构】双链表
c语言·开发语言·数据结构·学习