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

效果:

可视化管线:

相关推荐
陈无左耳、3 小时前
HarmonyOS学习第3天: 环境搭建开启鸿蒙开发新世界
学习·华为·harmonyos
柃歌4 小时前
【UCB CS 61B SP24】Lecture 7 - Lists 4: Arrays and Lists学习笔记
java·数据结构·笔记·学习·算法
柃歌4 小时前
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
java·数据结构·笔记·学习·算法
虾球xz5 小时前
游戏引擎学习第115天
学习·游戏引擎
BUG 劝退师5 小时前
C语言预处理学习笔记
c语言·笔记·学习
Chambor_mak6 小时前
stm32单片机个人学习笔记16(SPI通信协议)
stm32·单片机·学习
知初~6 小时前
Scala基础学习
开发语言·学习·scala
花王江不语7 小时前
设计模式学习笔记
笔记·学习·设计模式
前端熊猫7 小时前
CSS Grid 布局学习笔记
css·笔记·学习·grid
恋恋西风8 小时前
CT dicom 去除床板 去除床位,检查床去除
python·vtk·dicom·去床板