首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《重生之我学VTK》-- 基本介绍与相关概念

《重生之我学VTK》-- 基本介绍与相关概念

作者头像
用户11404404
发布2024-12-13 19:51:13
发布2024-12-13 19:51:13
60000
代码可运行
举报
文章被收录于专栏:Edward的专栏Edward的专栏
运行总次数:0
代码可运行

VTK官方用户手册(中文C++版)附末尾,有需要的直接划到末尾

简介

VTK(Visualization Toolkit)是一个开源的、跨平台的软件系统,主要用于三维计算机图形学、图像处理和可视化。它由 Kitware 公司开发和维护,并得到了广泛的社区支持。VTK 提供了丰富的功能来创建交互式的科学可视化应用,广泛应用于医学成像、地理信息系统、工程分析、教育等领域。

可视化模型

图形模型的主要作用是用图形描述几何体构成的场景,可视化流水线的主要作用是把几

何数据(如立方体的顶点坐标)转换成图形数据和负责构建几何体,VTK 使用数据流的方式

把几何体数据转换成图形数据,主要有两个基本类和数据转换相关,它们是:

vtkDataObject

数据对象表达各种类型的数据,vtkDataObject 可以被看作是一个二进制大块(blob)

数据,结构化的数据可以被认为是一个数据集(dataset) (vtkDataSet 类)。

数据对象由几何和拓扑结构组成(点集和单元集),同时数据对象与属性数据(例如缩

放比例和向量)相关,这些属性数据用于描述数据对象中的点集和单元集的属性(对于一个

办公桌而言,描述桌面的颜色、描述桌腿的颜色),单元集是数据对象的基本组成单位(如

一个立方体对象由若干个三角形构成,这些三角形就是单元集,也可以称为图元),图 1-3 显

示了 VTK 支持的各种属性数据。

vtkProcessObject

过程对象一般也称为过滤器,按照某种运算法则对数据对象进行处理,对数据对象的数

据进行优化,过程对象表现系统中的几何形状,数据对象和过程对象连接在一起形成可视化

流水线(例如,数据流网络)。

在可视化流水线中,主要包括源对象、过滤器对象、映射器对象三种对象:

源对象是可视化流水线的起点,依据数据生成的方式,分为如下两种类型:

过程源对象(通过读数据文件产生数据); 程序源对象(数学表达式或其它的数学方法产生数据)

过滤器对象接收一个或多个数据对象作为输入,对数据对象处理之后生成一个或多个数

据对象作为输出。

映射器(Mapper)对象是可视化流水线的终点,是图形模型和可视化模型之间的接口,

其主要作用是将数据对象转换成图形对象,然后由图形引擎绘制出来,复写器是映射器的一

种类型,作用是将数据写入文件或流。

示例(圆锥体)

大致流程如下:

代码语言:javascript
代码运行次数:0
运行
复制
+--------------------------+
|    启动程序              |
+--------------------------+
            |
            v
+--------------------------+
| 创建圆锥模型             |
| - 设置圆锥精细度         |
+--------------------------+
            |
            v
+--------------------------+
| 准备显示模型             |
| - 将圆锥转换为可显示格式 |
+--------------------------+
            |
            v
+--------------------------+
| 创建图形对象             |
| - 将模型赋予图形对象     |
+--------------------------+
            |
            v
+--------------------------+
| 创建场景                 |
| - 添加图形对象到场景中   |
| - 设置场景背景颜色       |
+--------------------------+
            |
            v
+--------------------------+
| 创建窗口                 |
| - 把场景放进窗口里       |
| - 设置窗口大小           |
+--------------------------+
            |
            v
+--------------------------+
| 创建交互功能             |
| - 让用户可以与窗口互动   |
+--------------------------+
            |
            v
+--------------------------+
| 显示窗口并开始互动       |
| - 绘制图形               |
| - 等待用户操作           |
+--------------------------+
            |
            v
+--------------------------+
| 结束程序                |
+--------------------------+

首先下载vtk库,可win+R输入

代码语言:javascript
代码运行次数:0
运行
复制
pip install vtk

也可在自己编辑器中下载。

创建圆锥源并设置分辨率:

代码语言:javascript
代码运行次数:0
运行
复制
    # 创建一个圆锥源
    cone_source = vtk.vtkConeSource()
    # 设置分辨率为20
    cone_source.SetResolution(200)

数据转换: vtkPolyDataMapper是 VTK(Visualization Toolkit)中的一个类,用于将vtkPolyDataMapper 数据映射到图形表示中。它是连接数据源和图形渲染的重要桥梁。

代码语言:javascript
代码运行次数:0
运行
复制
    # 创建一个 PolyDataMapper
    mapper = vtk.vtkPolyDataMapper()
    # 将输入设置为圆锥源的输出端口
    mapper.SetInputConnection(cone_source.GetOutputPort())

renderer.AddActor(actor) 是 VTK(Visualization Toolkit)中用于将 vtkActor 添加到 vtkRenderer 的方法。每个 vtkActor 表示一个可以被渲染的对象,而 vtkRenderer 负责管理场景中的所有 Actor,并将它们绘制到窗口中。

代码语言:javascript
代码运行次数:0
运行
复制
    # 创建一个 Actor
    actor = vtk.vtkActor()
    # 将映射器设置为上面的mapper
    actor.SetMapper(mapper)

    # 创建一个 Renderer
    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)
    renderer.SetBackground(0.1, 0.2, 0.4)  # 设置背景颜色

vtkRenderWindow 是 VTK 中用于管理渲染窗口的核心类之一,它负责将一个或多个 vtkRenderer 的内容绘制到屏幕上。

代码语言:javascript
代码运行次数:0
运行
复制
    # 创建一个 RenderWindow,绘制
    render_window = vtk.vtkRenderWindow()
    # 添加renderer
    render_window.AddRenderer(renderer)
    render_window.SetSize(300, 300)

创建一个VTK(Visualization Toolkit)交互器,并将其与一个渲染窗口关联起来。

代码语言:javascript
代码运行次数:0
运行
复制
    # 创建一个 RenderWindowInteractor
    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(render_window)

开始交互

代码语言:javascript
代码运行次数:0
运行
复制
    # 开始交互
    interactor.Initialize()
    render_window.Render()
    interactor.Start()

完整代码

代码语言:javascript
代码运行次数:0
运行
复制
import vtk

def main():
    # 创建一个圆锥源
    cone_source = vtk.vtkConeSource()
    # 设置分辨率为20
    cone_source.SetResolution(200)

    # 创建一个 PolyDataMapper
    mapper = vtk.vtkPolyDataMapper()
    # 将输入设置为圆锥源的输出端口
    mapper.SetInputConnection(cone_source.GetOutputPort())

    # 创建一个 Actor
    actor = vtk.vtkActor()
    # 将映射器设置为上面的mapper
    actor.SetMapper(mapper)

    # 创建一个 Renderer
    renderer = vtk.vtkRenderer()
    renderer.AddActor(actor)
    renderer.SetBackground(0.1, 0.2, 0.4)  # 设置背景颜色

    # 创建一个 RenderWindow,绘制
    render_window = vtk.vtkRenderWindow()
    # 添加renderer
    render_window.AddRenderer(renderer)
    render_window.SetSize(300, 300)

    # 创建一个 RenderWindowInteractor
    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(render_window)

    # 开始交互
    interactor.Initialize()
    render_window.Render()
    interactor.Start()

if __name__ == "__main__":
    main()

运行结果

运行出来的圆锥,鼠标点击会自动转动,我这里不作演示。

VTK用户手册(中文C++版):

通过百度网盘分享的文件:VTK用户手册.pdf 链接:https://pan.baidu.com/s/1-ZAVRFuOowuH-znoQxc5VQ 提取码:yust

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 可视化模型
  • 示例(圆锥体)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档