python vtk显示三角网格(并细分为曲面)

3 篇文章 0 订阅
该博客展示了如何利用VTK库在Python中创建并显示三角网格,包括流形曲面和离散网格。代码示例详细解释了如何构造数据、创建PolyData、进行细分、设置Mapper和Actor,并最终进行渲染和交互。通过vtkLinearSubdivisionFilter和vtkLoopSubdivisionFilter实现了网格的细分,以得到更平滑的近似曲面。
摘要由CSDN通过智能技术生成

一、效果

1.1.流形曲面

在这里插入图片描述

1.2.离散网格

在三维空间中的四个三角形

在这里插入图片描述

二、完整代码

import vtkmodules.all as vtk
import numpy as np

# 0.构造数据
vs = np.array([[-1, 1, -1],    # 顶点坐标
               [-1, 0, 0],
               [-1, -1, -1],
               [0, 0.5, 0],
               [0, -0.5, 0],
               [0.5, 0, -1]], dtype=np.float32)  # 0.5 -0.5
faces = np.array([[4, 1, 3], [4, 1, 2], [0, 3, 1], [3, 5, 4]], dtype=np.int16)  # 三角网格
c = np.array([[1, 1, 1], [1, 0, 0], [0, 1, 0], [0, 0, 1]]) * 255      # 颜色

# 1.vtk创建PolyData
points = vtk.vtkPoints()          # 顶点
for v in vs:
    points.InsertNextPoint(v)
polys = vtk.vtkCellArray()        # 三角
for f in faces:
    polys.InsertNextCell(3, f)
cellColor = vtk.vtkUnsignedCharArray()    # 存储颜色
cellColor.SetNumberOfComponents(3)        # RGB三通道
for tmp in c:
    cellColor.InsertNextTuple(tmp)
cube = vtk.vtkPolyData()                  # 分别添加到PolyData
cube.SetPoints(points)
cube.SetPolys(polys)
cube.GetCellData().SetScalars(cellColor)

# 1.5细分
l = vtk.vtkLinearSubdivisionFilter()      # 先linear
l.SetInputData(cube)
l.SetNumberOfSubdivisions(1)
l.Update()

loop = vtk.vtkLoopSubdivisionFilter()     # 后loop
loop.SetInputConnection(l.GetOutputPort())
loop.SetNumberOfSubdivisions(5)
loop.Update()

# 2.创建Mapper
mapper = vtk.vtkPolyDataMapper()
mapper.SetColorModeToDefault()
# mapper.SetInputData(cube)                        # 离散网格
mapper.SetInputConnection(loop.GetOutputPort())    # 细分之后的 近似曲面

# 3.创建Actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)
#actor.GetProperty().SetEdgeColor(0, 0, 0)
#actor.GetProperty().SetEdgeVisibility(1)    # 显示边

# 4.创建Renderer
renderer = vtk.vtkRenderer()
renderer.SetBackground(1, 1, 1)    # 背景白色
renderer.AddActor(actor)           # 将actor加入
renderer.ResetCamera()             # 调整显示

# 5.渲染窗口
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(renderer)
renWin.Render()

# 6.交互
renWinInteractor = vtk.vtkRenderWindowInteractor()
renWinInteractor.SetRenderWindow(renWin)
renWinInteractor.SetInteractorStyle(vtk.vtkInteractorStyleTrackballCamera())
renWinInteractor.Start()

参考链接

  • https://zhuanlan.zhihu.com/p/115081182 (可视化:第一个VTK例子)
  • https://zhuanlan.zhihu.com/p/336743251 (VTK图像处理(二)–vtkPolyData数据处理)
  • https://blog.csdn.net/shenziheng1/article/details/54836856 (VTK修炼之道45:图形进阶_vtkPolyData属性数据)
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
vtk是一个开源的跨平台的科学可视化工具包,用于处理和呈现大规模的数据集。vtk中的volume三角网格显示是一种用于可视化体数据的技术,它可以将体数据转换为三角网格,并在屏幕上进行显示。 在vtk中,volume三角网格显示主要涉及以下几个步骤: 1. 数据加载:首先需要将体数据加载到vtk中。vtk支持多种数据格式,如DICOM、NIfTI等。可以使用vtkImageData或vtkVolumeData等类来加载和管理体数据。 2. 体数据转换:将体数据转换为三角网格是进行体数据可视化的关键步骤。vtk提供了多种方法来进行体数据的转换,如Marching Cubes算法、Marching Tetrahedra算法等。这些算法可以将体数据中的边界表面提取出来,并生成对应的三角网格。 3. 三角网格显示:将生成的三角网格进行显示vtk提供了多种显示器件,如vtkActor、vtkMapper等。可以将生成的三角网格显示器件进行关联,并将其添加到vtkRenderer中进行显示。 4. 光照和材质设置:为了增强体数据的可视效果,可以对显示器件进行光照和材质设置。vtk提供了多种光照和材质属性,如光源位置、光照强度、材质颜色等。通过设置这些属性,可以使体数据在显示时更加真实和逼真。 5. 交互操作:vtk还提供了交互操作的功能,可以通过鼠标和键盘进行视角的调整、缩放、旋转等操作。这样可以更加灵活地查看和分析体数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米粥哥哥

感谢认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值