常用查询单狐山主的单狐山

vtk学习笔记

2021-06-01  本文已影响0人  升不上三段的大鱼

1. vtk简介

VTK全称Visualization ToolKit,是一个开源的计算机图形学工具,可以用来实现图像处理和可视化、建模等。

2. vtk流程

绘制几何体的流程:

绘制图片的流程:

vtk的pipeline的实现是通过对前一步的对象拷贝得到的,因此很容易占内存。在执行到Write() 或者 Render()之前,所显示的图像是不会更新的。每个类都会带有一个Update()可以强迫这个类的数据进行更新。由此可见vtk的整个流程并不是像flow一样,而是一层一层拷贝而来的。

3. vtk代码例子

官网例子

import vtk

def main():
    # 颜色类:包括了283种预设的颜色
    colors = vtk.vtkNamedColors()
    # 设置背景颜色
    bkg = map(lambda x: x / 255.0, [26, 51, 102, 255])
    colors.SetColor("BkgColor", *bkg)

    # 创建一个有八个面的多边形圆柱
    cylinder = vtk.vtkCylinderSource()
    cylinder.SetResolution(8)

    # mapper 将集合体放入图形库里
    # 也可以做颜色映射
    cylinderMapper = vtk.vtkPolyDataMapper()
    cylinderMapper.SetInputConnection(cylinder.GetOutputPort())
    coneMapper = vtk.vtkPolyDataMapper()
    coneMapper.SetInputConnection(cone.GetOutputPort())

    # actor 的作用大概是把将几何体mapper,颜色和变换等组合在一起
    cylinderActor = vtk.vtkActor()
    cylinderActor.SetMapper(cylinderMapper)
    cylinderActor.GetProperty().SetColor(colors.GetColor3d("Tomato"))
    cylinderActor.RotateX(30.0)
    cylinderActor.RotateY(-45.0)

    # 创建并渲染图形结构
    # 渲染窗口会交互器捕捉鼠标事件
    ren = vtk.vtkRenderer()
    renWin = vtk.vtkRenderWindow()
    renWin.AddRenderer(ren)
    iren = vtk.vtkRenderWindowInteractor()
    iren.SetRenderWindow(renWin)

    # 将actors 加入渲染器, 并设置窗口的背景和大小
    ren.AddActor(cylinderActor)
    ren.AddActor(coneActor)
    ren.SetBackground(colors.GetColor3d("BkgColor"))
    renWin.SetSize(300, 300)
    renWin.SetWindowName('CylinderExample')

    #  interactor可以初始化自己,但必须在事件循环之前调用。
    iren.Initialize()

    # 缩放相机
    ren.ResetCamera()
    ren.GetActiveCamera().Zoom(1.5)
    renWin.Render()
     
    # 开始事件循环
    iren.Start()


if __name__ == '__main__':
    main()
圆柱体

对物体进行360旋转,需要每秒对物体旋转一个角度并渲染出来:

for i in range(0, 360):
        # Render the image.
        renWin.Render()
        # Rotate the active camera by one degree.
        ren.GetActiveCamera().Azimuth(1)

想要同时展示两个物体并且分两个窗口,需要创建两个renderer并把对应的actor分配给他们,SetViewport必需的,不然会出现显示不出来的情况。

    ren1 = vtk.vtkRenderer()
    ren1.AddActor(coneActor)
    ren1.SetBackground(colors.GetColor3d('RoyalBlue'))

    ren1.SetViewport(0.0, 0.0, 0.5, 1.0)

    ren2 = vtk.vtkRenderer()
    ren2.AddActor(cylinderActor)
    ren2.SetBackground(colors.GetColor3d('DodgerBlue'))
    ren2.SetViewport(0.5, 0.0, 1.0, 1.0)
显示两个

也可以将多个actor与同一个render连接:

ren1 = vtk.vtkRenderer()
    ren1.AddActor(coneActor)
    ren1.AddActor(coneActor2)
    ren1.SetBackground(colors.GetColor3d("CornflowerBlue"))

参考
https://kitware.github.io/vtk-examples/site/Python/

上一篇 下一篇

猜你喜欢

热点阅读