VTK工作原理的自我理解

梦里伊人 posted @ 2008年10月31日 04:39 in Linux系统的相关知识 , 3961 阅读

             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;
}
 

Avatar_small
一剑行天下 说:
2008年11月09日 03:27

写的很好!刘师兄!!!

Avatar_small
一剑行天下 说:
2008年11月09日 03:32

写的很好!刘师兄!!!


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter