采用的入门教材:《医学图像编程技术》电子工业出版社 周振环 伍云智 赵明 编著。html
上面这个教材听有人讲只是翻译了一下VTK的手册。可是我以为仍是值得看一看吧。c++
个人实验环境:VS2010 Win7 64位系统 编程
安装时参照 http://blog.csdn.net/cgcoder/article/details/8262232 app
来安装的。学习
所以跳过《医学图像编程技术》第一章:安装VTK和ITKspa
《医学图像编程技术》第二章是范例主要是讲解几个范例。我以为能够在这一章节中多理解一下VTK的可视化管线。.net
我打算采用例子和补充材料的方式来学习这一章节。不过要准备回家了。明年再看啦!一共有15个范例。计划用5天的时间看完这一章。
翻译
2015年1月4日code
过节回来啦!htm
下面从2.1入门范例-渲染一个圆锥开始
首先新建一个c++ 控制台应用项目空项目,项目名:ConeTest
在项目中添加cpp文件,ConeTest.cpp
打开项目属性
①在c/c++ 常规 ->附加库目录中添加以下:
②在项目属性->连接器->输入->附加依赖项中添加:
而后添加程序代码:
一、程序代码
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
int main()
{
//建立数据源:建立一个圆锥,并设置其参数:高度、底面半径和分辨率
vtkConeSource *cone=vtkConeSource::New();
cone->SetHeight(3.0);
cone->SetRadius(1.0);
cone->SetResolution(10);
//映射器:建立一个多边形映射器,用于把多边形数据映射为能够被计算机渲染的图元
vtkPolyDataMapper *coneMapper=vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());
//演员:建立一个演员,并关联一个映射器,从而肯定演员的形状
vtkActor *coneActor= vtkActor::New();
coneActor->SetMapper(coneMapper);
//渲染器:建立一个渲染器,添加要渲染的演员
vtkRenderer *ren1=vtkRenderer::New();
ren1->AddActor(coneActor);
ren1->SetBackground(0.1,0.2,0.4);
//渲染窗口:添加一个渲染窗口,供渲染器使用
vtkRenderWindow *renWin=vtkRenderWindow::New();
renWin->AddRenderer(ren1);
renWin->SetSize(300,300);
//渲染360次,这里的主要做用是延时
int i;
for(i=10;i<360;++i)renWin->Render();
//清除对象
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return 0;
}
二、代码解释
头文件包含:这些头文件定义类在代码中要使用的VTK类,头文件名和代码中要用到的VTK类名相同。
①代码中首先建立了一个vtkConeSource类的实例,该对象表示一个圆锥体(其实是一个正棱锥,可是当棱数足够多时,能够近似看作圆锥),接着设置了三个属性,分别是高度、半径和分辨率(分辨率是指侧面的个数,或者说是侧棱数)。
②vtkPolyDataMapper做用是把多边形数据映射为图元
像上面两个对象那样,将一个对象的输出当作另外一个对象的输入的用法在VTK程序中是常常见到的,通常能够将多个对象串联在一块儿造成一条链,称之为可视化流水线。本例中流水线的源头是cone,尽头是coneMapper。
③ 而后建立一个vtkActor类的实例,并经过SetMapper方法将其与映射器关联在一块儿。vtkActor类表示场景中的一个实体,该实体的几何形状由关联的映射器对象肯定,该实体的属性由相关联的属性对象肯定。这枚没有用方法SetProperty()来显式关联一个属性对象,代表接受的是默认的属性对象。
④建立一个vtkRenderer类的实例ren1。vtkRenderer类表示一个渲染器,用于控制对象的渲染过程。用方法AddActor()添加须要被渲染的对象,用方法SetBackground()设置背景色。
⑤最后建立vtkRenderWindow类的实例renWin,该对象表示的是渲染用的窗口,供渲染者渲染用。用方法AddRenderer(0增长一个渲染着,用方法SeSize()设置窗口的大小。该对象有个方法Render(),用于执行对图像的渲染。
接下来是一个for循环,主要做用是用来延时。最后删除全部建立的对象并退出。
程序的结构以下图:
图2-2 渲染一个圆锥范例中各对象的关系
红色箭头表示的是流水线中数据的流向,黄色箭头表示的是对象间的关系。箭头边标有该关系的说明,能够这样理解:箭头起点的对象的说明文字是箭头重点对象,如”vtkRenderer“的”渲染窗口“是”vtkrenderWindow“.
在本例中,建立对象调用的是New(),清楚对象调用的是Delete();在VTK中,推荐使用这两个方法来保证设备的独立性及引用技术的妥善管理。在这里,Delete()方法的调用不是必需的,由于当程序终止运行后,独享会被自动删除。但通常来说,对每一个New方法老是须要调用一个相应的Delete()方法的。
第一个例子的笔记如上。对其中牵扯到的一些知识点,搜集资料和理解:
http://www.cnblogs.com/burellow/p/3641757.html
vtk工做流,有不少地方将vtk中的工做流比做演员角色剧本之类的,虽然在从未用过vtk的人看来很形象,可是我以为对我来说,很容易限制住对之后程序的理解,毕竟这不是从编程角度,而是从实际世界的角度去理解的。所以在后面的编程中,我有时候会不自觉的去用现实世界的场景去对应,这样很差,既影响了对程序的理解,并且限制了编程时的思路。固然多是由于我现阶段学的还太少。
其实,我以为这本书应该把第三章 数据集与数据属性 放在前面来说,这样虽然上手稍微慢一点,可是容易对vtk有一个从编程方面从基础开始的理解。以上是个人观点。
http://lzchenheng.blog.163.com/blog/static/838335362010718102554655/
VTK可视化管线:VTK可视化流水线主要将数据对象和过程对象组成,这两种对象相互之间能够用多种方式链接在一块儿,构成可视化管线的拓扑结构,在构建可视化管线拓扑结构时,必需要保证管线上游的对象输出的数据类型和其下游对象接收的数据类型保持一致,如一个源对象输出的是一个多边形数据类型,而和其链接的过滤器对象只能接收格网类型的数据,那么可视化管线就不能正确的执行,因此,在构建可视化管线时,必定要注意对象输入、输出之间数据类的匹配性。