一.VTK系统架构初步分析
1.VTK开源软件项目的背景
VTK全称是Visualization ToolKit,是一个开源的软件项目,具体项目为多个c++类库构成,由原生的C++语言进行开发,同时通过众多的翻译接口层(.net,Python,Java)包装为支持C#(所有.NET语言),Python和Java,Js的开发工具。
VTK是在三维函数库OpenGL 的基础上采用面向对象的设计的,最初是GE(应该是医学设备相关部门)研发部的几位员工在公司支持下完成,后来他们成立了Kitware公司来发展这个项目,软件的主要功能是作为一个应用方便广泛且功能强大的二维和三维可视化工具开发。
由于初始开发者有一定的医学背景,所以比较有意思的一点是,软件中集成了很多医学相关的比如超声波造影影像图分析,以及以复杂的热力图,彩虹图等功能,可视化功能确实很强大。但就工程设计而言,在模型支持上,似乎只是在点云和网格面这些数据类型支持比较好。对于工程设计领域比较流行的Catia,Ug,Pro/E,AutoCAD等数据格式以及中间格式Iges,Step的支持都比较欠缺。这一点,应该和另一个开源项目Occ(OpenCasCade)有所不同,因为Occ是由法国Matra Datavision公司开发的CAD/CAE/CAM软件平台,相对来说开发目标上就有比较面向工程领域。
好了,这只是我从网络上找到的一些信息的理解,很多可能存在偏差,随着后面学习的深入,应该在理解上会有所变化吧。
2.VTK项目的核心类
我数了一下VTK9.2项目的dll,总计149个,相对与早期版本已经非常庞大。结合VTK的介绍,我梳理了以下VTK的核心类,后续也会根据理解进行更新。
- vtkRenderWindow 渲染窗口和vtkRenderer 渲染器
vtkRenderWindow是VTK引擎与当前软件的图形接口,以控件方式加载到当前软件的图形窗口的容器中。
vtkRenderer 渲染器是将内容渲染到vtkRenderWindow的绘制接口。
用户可以绘制多个窗口vtkRenderWindow,而每个窗口也可以有多个Vtk的渲染区域,因此软件中可以存在多个vtkRenderWindow和vtkRenderer。 - vtkRenderWindowInteractor窗口交互类
vtkRenderWindowInteractor是用户与渲染窗口的交互工具,可以用来操纵摄像机平移,旋转,缩放视口,也可以用来拾取窗口中生成的对象。 - vtkLight光线类
vtkLight在3D环境下设置光线的参数,2D环境下不可用。 - vtkCamera摄像机类
vtkCamera用来设置3D场景中的摄像机,对相机进行控制,也可以用来控制透视等观察方法。 - vtkActor、vtkActor2D类,是渲染窗口中的具体角色
这是非常重要的类,也包含很多的子类,比较常用的点/线/面/文字/立方体/球形/复杂图形/点云都是以Actor的形式加载到Render中的,当然这里有一个加载的流程。
vtkActor用于3D,而vtkActor2D用于2D。
vtkActor的建立和加载流程: 以圆柱体创建为例,经过观察代码,流程如下: