vtk studying(画点)

简单介绍一下vtk。(个人理解,如果想看更专业的解释,请去官网)

如果你想用代码画一个图像(2D或者3D),你会怎么做?

首先你要确认,这个所谓的图像,肯定是由点来构成的,你可以画出很多很多的点,然后就可以呈现出线段,进而2D或者3D图像。

那么画点,你要确认点的形状(锥体,球体,正方体等),然后把这个点放到一个位置pos,然后如法炮制,放其他很多很多你创造出的点。

那么你该怎么画点咧?

在vtk中,

points_list=[[1,0,0],[0,0,1],[0,0,0]]
points=vtk.vtkPoints()
vertices=vtk.vtkCellArray()
for i in points_list:
    point_id=points.InsertNextPoint(i)
    vertices.InsertNextCell(1)
    vertices.InsertCellPoint(point_id)

在vtk中,上面的几行代码就可以创造三个点,位置分别是(1,0,0)(0,0,1)(0,0,0)

总结来了:

vtk就是一个函数库,你可以通过一些接口(就是 vtk.vtkPoints()这些函数),来做一些你想要完成的代码(画点,画线,画体),顺便补充一下,vtk的底层是用opengl来封装的,如果vtk学的差不多了的话,你可以向底层的opengl进军。

那么现在就开始我们的第一个vtk代码demo吧。

首先我先说明下我的版本:

编译器:pycharm

python环境:python3.6

vtk版本:9.0.1(不同版本的接口函数可能会有差异)

那么,直接上代码(建议直接ctrl+c  ctrl+v),结果图也如下

# -*- coding: utf-8 -*-
# !/usr/bin/env python

import vtk

points_list=[[1,0,0],[0,0,1],[0,0,0]]

# 遍历已知点列表,将点信息赋给vtkPoints  vtkCellArray
# 建立点和点之间的拓扑关系,点的坐标
points=vtk.vtkPoints()
vertices=vtk.vtkCellArray()
for i in points_list:
    point_id=points.InsertNextPoint(i)
    vertices.InsertNextCell(1)
    vertices.InsertCellPoint(point_id)

# 创建拓扑关系 数据和拓扑,标量矢量信息均在其中
polydata=vtk.vtkPolyData()
polydata.SetPoints(points)
polydata.SetVerts(vertices)

# 创建vtk数据结构
# 数据映射,做显示用
mapper=vtk.vtkPolyDataMapper()
mapper.SetInputData(polydata)

# 创建演员
# 数据及各种属性封装至vtkActor() —— 演员,此时它具备显示的条件——走上“舞台”,是vtk显示机制分水岭对象!

actor=vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetPointSize(10)
actor.GetProperty().SetColor(0.0,1.0,0.0)

# 添加坐标轴  并设置坐标轴长度
# 其实就是演员,可以理解为:多个演员,可以通过相同或者不同的渲染器,在同一个舞台上表演
axes_actor = vtk.vtkAxesActor()
axes_actor.SetTotalLength(2, 2, 2)

# 创建渲染器
# 渲染器vtkRenderer() —— 舞台有了,需要显示“演员”,提供关键属性包括背景色、相机Camera、光照Light等。
ren=vtk.vtkRenderer()
ren.SetBackground(0.8,0.3,0.8)
ren.SetBackground(0.3,0.5,0.9)
ren.SetGradientBackground(1)
ren.AddActor(actor)
ren.AddActor(axes_actor)

# 创建舞台
# 显示窗口vtkRenderWindow() ——  提供“舞台”,实质是win32OpenGL对数据显示
ren_window=vtk.vtkRenderWindow()
ren_window.SetWindowName('axiong first cube')
ren_window.SetSize(300,300)
ren_window.AddRenderer(ren)

# 创建交互方式
# 和舞台绑定,可以用鼠标移动来观看不同方式的三位模型(演员和演员之间的关系)
# 一切具备需要“观众”vtkRenderWindowInteractor() —— 事件交互,如切换视角、鼠标选取“演员”、启动显示引擎。
interactor=vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(ren_window)

# interactor = ren_window.GetInteractor()

# 交互采用的模式
# 这里采用的是移动相机模式,其他多种交互模式可百度
style=vtk.vtkInteractorStyleMultiTouchCamera()
interactor.SetInteractorStyle(style)

# 启动显示三部曲:初始化 渲染 启动
interactor.Initialize()
ren_window.Render()
interactor.Start()

详细代码就不解释了,更何况里边的注释也蛮详细的。

如果有那些地方不懂的话,你可以注释掉跑一跑。

总结一下vtk代码流程(我自己做笔记用,方便温习):

1:调用vtk接口创建点,并将其实例化

2:创建polydata ,把实例化的points和vertices装进去

3:创建mapper,把polydata装进去

4:创建actor,把mapper装进去

5:创建ren,把actor装进去

6:创建ren_window,把ren装进去

7:交互方式interactor,用来和ren_window联系(最重要)

8:三部曲:初始化,渲染,启动

粘一些从别的地方看到的:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值