VTK总结

基础模块

(1)Source:数据源,通过 VTK 的 IO 系统读⼊的数据源对象,或者⾃⼰创建的数据源对象。
(2)Filter:对于初始数据源进⾏⼀些处理,也封装了⼀些图形学算法。⽐⽅说vtkSmoothPolyDataFilter 平 滑 ⽹ 格 ,vtkClipPolyData 裁剪 数 据 ,vtkExtractUnstructuredGrid 提取局部⽹格。
(3)Mapper:将输⼊数据转化成⼏何图元(点、线、多边形)进⾏渲染。指定渲染数据和图形库中基本图元的关系。这⼀层包括设置⼀个颜⾊映射表(lookuptable)完成数据值映射到颜⾊。
(4)Actor:渲染窗⼝渲染的对象,窗⼝中每⼀个具体需要渲染的对象都是⼀个actor,可以通过 actor 这⼀层的⽅法来设置对象的表⾯属性、颜⾊、透明度、纹理等。
(5)Renderer:负责场景的渲染过程。这⼀层的⽅法包括设置相机,光照等属性。
(6)RenderWindow:将操作系统和 VTK 渲染引擎连在⼀起,将场景渲染在设备的窗⼝之中。
(7)RenderWindowInteractor:窗口交互器,可以通过键鼠对图形进行交互。

VTK图像创建过程

VTK总结_第1张图片

VTK相机-vtkCamera

1、vtkCamera负责把三维场景投影到二维平面,如屏幕、图像等。
2、在VTK中,相机的实质是一个观测点,与人眼的功能相同,相机的视野范围是一个锥状体。
3、相机位置和焦点位置定义了相机的位置和投影方向,前裁剪平面为CCD镜头平面(图像平面),后裁剪平面为物体平面。
4、vtkCamera定义了两种投影方法,一种是平行投影(Parallel Projection),即进入相机的光线与投影方向是平行的。另一种是透视投影(PerspectiveProjection),即所有的光线相交于一点。
5、相机的运动,分为移动、旋转

旋转

    camera->Elevation(rotateAngle[0]);//围绕X轴旋转
    camera->Azimuth(rotateAngle[1]);//围绕Y轴旋转
    camera->Roll(rotateAngle[2]);//围绕Z轴旋转
    camera->OrthogonalizeViewUp();//这个很重要,相机旋转后,记得及时调用

OrthogonalizeViewUp:基于焦点,使用Azimuth()和Elevation()方法设置相机的方位角和高度角/仰角(度,degree)[球坐标系统]。注意其中在南极和北极存在奇异点,即视向量平行于视平面法向。此时可以使用OrthogonalizeViewUp()方法强制其正交。但这会改变相机坐标系统。

VTK灯光-vtkLight

平行光:方向光照即光源位置在无穷远,光线可以认为是平行的,比如自然界中的太阳光。
1、物体的光照属性主要包括环境光系数、漫反射光系数、镜反射光系数和镜面指数四个,分别用方法SetAmbient(),SetDiffuse(),SetSpecular()和SetSpecularPower()进行设置。

聚光灯

位置光照是光源位置在渲染场景中的某个位置,可以指定光照的衰减值、锥角等;

灯光类型

1、设置灯光类型为场景灯光,灯光为固定位置。
2、设置灯光类型为相机灯光,灯光会自动随相机移动。
3、前照灯总是位于摄像机上,并指向摄像机的焦点。渲染器可以随时修改相机的位置和焦点

SetAmbient() //设置环境光系数(基础系数,大环境的明暗)
SetDiffuse() //设置散射光系数(使具有立体感)
SetSpecular() //设置反射光系数(光滑度,明暗)
一般情况下,着三个系数之和为1.高光强度系数用于控制体绘制外观平滑程度,使用SetSpecularPower()函数设置。高光颜色,使用SetSpecularColor()函数设置。vtkVolumeProperty中默认是关闭阴影效果,因此需要显示调用ShadeOn()函数来打开阴影效果。

参考文献

相关知识

光学成像

小孔成像

漫反射

散射光

vtk-examples

DiffuseSpheres

SpecularSpheres

博客

vtk灯光效果 vtklight

关于环境光、漫反射、镜面反射

VTK004_vtk-灯光

VTK笔记-灯光vtkLight


VTK纹理映射

原理:纹理映射是创建逼真效果的强大的图形工具,其原理是渲染时把二维的图像“贴”到物 体的表面上,根据二维图像渲染出丰富多彩的效果,所以也叫纹理贴图。

纹理映射需要三个要素:待贴图的表面、纹理映射以及纹理坐标。
vtkTextureMapToPlane:通过一个平面建立纹理空间到模型空间的映射关系
vtkTextureMapToCylinder:通过圆柱面建立映射关系;
vtkTexture:实现加载纹理;
vtkTransformTextureCoords:实现纹理坐标的平移和缩放。

VTK坐标系统

1、Model坐标系统是定义模型时所用采用的坐标系统,通常是局部的笛卡尔坐标系。
2、World坐标系统是放置Actor、相机和光照的三维空间坐标系。Actor的一个功能就是负责将Model坐标系统变换到World系统。World坐标系统只有一个,每个Actor必须通过放缩、旋转、平移等操作将Model坐标系变换到World坐标系。
3、View坐标系统表示的是相机所看见的坐标系统。由x,y值组成,范围位于(-1,1),z值表示深度坐标。x,y值指定物体在图像平面的位置,而z值表示的是离照相机的距离。
4、Display坐标系统跟View坐标系统类似,但是各坐标轴的取值不是[-1, 1],而是使用屏幕像素值。z值表示深度信息。屏幕上显示的不同窗口的大小会影响View坐标系的坐标值[-1, 1]到Display坐标系的映射。

VTK空间转换

vtkTransform类

1、进行变换时的顺序非常重要。
2、在VTK中,矩阵乘法默认是左乘(PreMultiply),在齐次矩阵符号中,M = MA,其中M为当前变换矩阵,A为要应用矩阵(比如旋转矩阵或者平移矩阵)。
3、也可以设置矩阵乘法为右乘(PostMultiply),在齐次矩阵符号中,M = A
M。

变换矩阵方式(SetUserMatrix)

1、右边代码将物体绕Z轴旋转45°,并移动到(50, 50, 50)处。

防止报错

#include 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType)

Picker参考文献

VTK笔记——拾取器 Picker 汇总

相关网址

vtk-C++语言案例

vtk官方论坛

vtk用户手册

vtk所有详情链接

vtk测试数据

你可能感兴趣的:(VTK,图像处理)