zoukankan      html  css  js  c++  java
  • Python使用VTK三维3D图形绘制入门教程

    安装:pip install vtk

    学习一个东西最快的方法是知道基本原理和用途

    VTK有啥用

    不能做游戏。适合快速开发绘制静态三维模型。所以类似多用途折叠工具刀用处多,但是不能用在特别费劲的场合。
    vtk不能用于制作游戏只适合快速的绘制静态三维模型

    VTK工作流程(大致看看对vtk各模块做的事有点印象即可)

    读取图形数据 ightarrow过滤 ightarrow建图 ightarrow构建执行单元 ightarrow渲染 ightarrow打开渲染窗口 ightarrow交互界面

    1. 读取数据

    • vtkStructuredPointsReader()读取*.vtk文件
    • vtkSTLReader()读取*.stl文件

    2. 过滤(自己写算法)

    在这里插入图片描述

    3. 建图(将点拼接在一起并填充):vtkPolyDataMapper(vtkPolyData)

    在这里插入图片描述

    4. 执行单元: vtkActor()

    一个独立三维模型、一个立方体、一个球就是一个执行单元,这是个对象。它有自己的属性(纹理、朝向、位置等)。

    5. 渲染vtkRenderer()

    将各个执行单元和背景安装某个视角绘制在一起。此时还看不到图形,因为没有创建窗口。第6步才是创建窗口。
    在这里插入图片描述

    6. 创建渲染窗口 vtkRenderWindow()

    在这里插入图片描述

    7. 交互控制vtkRenderWindowInteractor()

    就是我们平常用鼠标可以拖来拖去旋转着看三维模型就是这个类负责。

    VTK编程实践(可以细节的看了):画一个立方体

    百年不变的步骤:
    在这里插入图片描述

    python使用vtk绘制立方体代码(不理解的可以回头看看vtk各部分做什么的):

    import vtk
    # 1. 读取数据
    cube = vtk.vtkCubeSource()
    cube.Update()#记得加这句不加看不到模型
    # 2. 建图(将点拼接成立方体)
    cube_mapper = vtk.vtkPolyDataMapper()
    cube_mapper.SetInputData(cube.GetOutput())
    # 3. 根据2创建执行单元
    cube_actor = vtk.vtkActor()
    cube_actor.SetMapper(cube_mapper)
    
    cube_actor.GetProperty().SetColor(1.0, 0.0, 0.0)
    # 4. 渲染(将执行单元和背景组合在一起按照某个视角绘制)
    renderer = vtk.vtkRenderer()
    renderer.SetBackground(0.0, 0.0, 0.0)#背景只有一个所以是Set()
    renderer.AddActor(cube_actor)#因为actor有可能为多个所以是add()
    
    # 5. 显示渲染窗口
    render_window = vtk.vtkRenderWindow()
    render_window.SetWindowName("My First Cube")
    render_window.SetSize(400,400)
    render_window.AddRenderer(renderer)# 渲染也会有可能有多个渲染把他们一起显示
    # 6. 创建交互控键(可以用鼠标拖来拖去看三维模型)
    interactor = vtk.vtkRenderWindowInteractor()
    interactor.SetRenderWindow(render_window)
    interactor.Initialize()
    render_window.Render()
    interactor.Start()
    

    运行结果

    在这里插入图片描述
    参考文献:
    [1]http://www.cb.uu.se/~aht/Vis2014/lecture2.pdf

    知乎 https://www.zhihu.com/people/yuanmuou/activities
  • 相关阅读:
    Shell基础一
    Hash表
    哈希表
    设置不输入密码ssh登录
    C++ int与string的转化
    mysql之数据类型
    ICE之C/S通信原理
    mysql基础入门
    SQL练习之不反复执行相同的计算
    SQL练习之求解填字游戏
  • 原文地址:https://www.cnblogs.com/ailitao/p/11047303.html
Copyright © 2011-2022 走看看