VTK工作原理的自我理解
梦里伊人
posted @ 2008年10月31日 04:39
in Linux系统的相关知识
, 3962 阅读
VTK工作原理的自我理解
VTK作为一个显示对象的工具,其工作原理就像是一部电影的产生过程。
要理解VTK的工作原理,首先应明确几个类型:1、vtkMapper(映射器) 所有的数据对象(欲显示的内容)都要通过映射器Mapper映射到vtkActor中的,它就像是一个剧本;2、vtkActor(演员);3、vtkRenderer(渲染器) 通过渲染器设置窗口vtkRenderWindow的背景并处理演员,这个过程就相当于对演员进行化妆并布置场景;4、vtkRenderWindow(窗口) 将渲染的所有内容置于窗口vtkRenderWindow中,即电影开拍;5、vtkRenderWindowInteractor(窗口交互器) 通过窗口交互vtkRenderWindowInteractor显示欲显示的内容,即相当于电影放映。
下面通过一个例子(一个显示点云数据“points.asc”的VTK程序)更形象地说明VTK的工作原理:
#include "vtkActor.h"
#include "vtkFloatArray.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
#include "vtkRenderWindow.h"
#include "vtkDataSetMapper.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include "vtkSimplePointsReader.h"
#include <iostream>
int main()
{
/*获取剧本,即通过映射器vtkMapper获取欲显示的数据*/
vtkDataSetMapper *map = vtkDataSetMapper::New();
vtkSimplePointsReader *PointsReader =
vtkSimplePointsReader::New();
PointsReader->SetFileName ("points.asc");
map->SetInputConnection(PointsReader->GetOutputPort());
/*将剧本拿给演员,即将映射器中的数据赋给演员vtkActor*/
vtkActor *actor = vtkActor::New();
actor->SetMapper(map);
actor->GetProperty()->SetPointSize(5);
actor->GetProperty()->SetColor(0,0,0);
/*对演员进行化妆并布置场景,即通过渲染器vtkRenderer设置背景并处理演员*/
vtkRenderer *ren = vtkRenderer::New();
ren->SetBackground(1, 1, 1);
ren->AddActor(actor);
/*开拍,即将渲染的所有内容置于窗口vtkRenderWindow中*/
vtkRenderWindow *win = vtkRenderWindow::New();
win->AddRenderer(ren);
win->SetSize(400,400);
/*放映,即通过窗口交互vtkRenderWindowInteractor显示欲显示的内容*/
vtkRenderWindowInteractor *iren =
vtkRenderWindowInteractor::New();
iren->SetRenderWindow(win);
iren->Initialize();
iren->Start();
/*收工,即释放内存*/
actor->Delete();
ren->Delete();
win->Delete();
iren->Delete();
return 0;
}
#include "vtkFloatArray.h"
#include "vtkPointData.h"
#include "vtkPoints.h"
#include "vtkRenderWindow.h"
#include "vtkDataSetMapper.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
#include "vtkSimplePointsReader.h"
#include <iostream>
int main()
{
/*获取剧本,即通过映射器vtkMapper获取欲显示的数据*/
vtkDataSetMapper *map = vtkDataSetMapper::New();
vtkSimplePointsReader *PointsReader =
vtkSimplePointsReader::New();
PointsReader->SetFileName ("points.asc");
map->SetInputConnection(PointsReader->GetOutputPort());
/*将剧本拿给演员,即将映射器中的数据赋给演员vtkActor*/
vtkActor *actor = vtkActor::New();
actor->SetMapper(map);
actor->GetProperty()->SetPointSize(5);
actor->GetProperty()->SetColor(0,0,0);
/*对演员进行化妆并布置场景,即通过渲染器vtkRenderer设置背景并处理演员*/
vtkRenderer *ren = vtkRenderer::New();
ren->SetBackground(1, 1, 1);
ren->AddActor(actor);
/*开拍,即将渲染的所有内容置于窗口vtkRenderWindow中*/
vtkRenderWindow *win = vtkRenderWindow::New();
win->AddRenderer(ren);
win->SetSize(400,400);
/*放映,即通过窗口交互vtkRenderWindowInteractor显示欲显示的内容*/
vtkRenderWindowInteractor *iren =
vtkRenderWindowInteractor::New();
iren->SetRenderWindow(win);
iren->Initialize();
iren->Start();
/*收工,即释放内存*/
actor->Delete();
ren->Delete();
win->Delete();
iren->Delete();
return 0;
}
2008年11月09日 03:27
写的很好!刘师兄!!!
2008年11月09日 03:32
写的很好!刘师兄!!!