VTK是什么
實(shí)際上是基于OpenGL的圖形開發(fā)函數(shù)庫。
- OpenGL + OOP
- C++作為核心搂蜓, 有Tcl狼荞、Python、Java的接口
- 支持多種數(shù)據(jù)類型
- Open Source
VTK典型流程
** Data --> Geometry --> Image **
左邊一縱列對(duì)應(yīng)Data --> Gemoetry
右邊一縱列對(duì)應(yīng)Gemotry --> Image
Data --> Geometry
包括vtkSource, vtkFilter, vtkMapper
- vtkSource : 各類圖形的數(shù)字構(gòu)成帮碰,以及各種圖像文件的讀寫數(shù)據(jù)等
- vtkFilter : 以數(shù)據(jù)對(duì)象作為輸入相味,輸出處理后的數(shù)據(jù)對(duì)象。實(shí)現(xiàn)各種圖像處理算法殉挽。
- vtkMapper : 將Data轉(zhuǎn)換為Gemoetry數(shù)據(jù)丰涉,作為下一步顯示的圖形來源。vtkMapper接收Filter的輸入斯碌,但不產(chǎn)生輸出一死。整體作為下一步處理的基礎(chǔ)。
Geometry --> Image
包括vtkActor, vtkRenderer, vtkRenderWindow
- vtkActor : 代表了一個(gè)在場(chǎng)景中被渲染的物體傻唾,例如一個(gè)錐體或一個(gè)立方體投慈,自身可以設(shè)定多個(gè)屬性,如坐標(biāo)、旋轉(zhuǎn)角度伪煤、表明材質(zhì)加袋、反光效果、透明度等等
- vtkRenderer : 負(fù)責(zé)渲染物體的進(jìn)程带族,可以設(shè)置顯示角度锁荔、光照角度等等屬性
- vtkRenderWindow : 在操作系統(tǒng)上顯示的一個(gè)窗口,可以包含一個(gè)或者多個(gè)vtkRenderer蝙砌,上圖中左邊那個(gè)窗口中就有兩個(gè)Renderer
整體流水線
Example
/*=========================================================================
Program: Visualization Toolkit
Module: Cone.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
//
// This example creates a polygonal model of a cone, and then renders it to
// the screen. It will rotate the cone 360 degrees and then exit. The basic
// setup of source -> mapper -> actor -> renderer -> renderwindow is
// typical of most VTK programs.
//
// First include the required header files for the VTK classes we are using.
#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
int main()
{
//
// Next we create an instance of vtkConeSource and set some of its
// properties. The instance of vtkConeSource "cone" is part of a
// visualization pipeline (it is a source process object); it produces data
// (output type is vtkPolyData) which other filters may process.
//
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight( 3.0 );
cone->SetRadius( 1.0 );
cone->SetResolution( 10 );
//
// In this example we terminate the pipeline with a mapper process object.
// (Intermediate filters such as vtkShrinkPolyData could be inserted in
// between the source and the mapper.) We create an instance of
// vtkPolyDataMapper to map the polygonal data into graphics primitives. We
// connect the output of the cone souece to the input of this mapper.
//
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection( cone->GetOutputPort() );
//
// Create an actor to represent the cone. The actor orchestrates rendering
// of the mapper's graphics primitives. An actor also refers to properties
// via a vtkProperty instance, and includes an internal transformation
// matrix. We set this actor's mapper to be coneMapper which we created
// above.
//
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper( coneMapper );
//
// Create the Renderer and assign actors to it. A renderer is like a
// viewport. It is part or all of a window on the screen and it is
// responsible for drawing the actors it has. We also set the background
// color here.
//
vtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->SetBackground( 0.1, 0.2, 0.4 );
//
// Finally we create the render window which will show up on the screen.
// We put our renderer into the render window using AddRenderer. We also
// set the size to be 300 pixels by 300.
//
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer( ren1 );
renWin->SetSize( 300, 300 );
//
// Now we loop over 360 degreeees and render the cone each time.
//
int i;
for (i = 0; i < 360; ++i)
{
// render the image
renWin->Render();
// rotate the active camera by one degree
ren1->GetActiveCamera()->Azimuth( 1 );
}
//
// Free up any objects we created. All instances in VTK are deleted by
// using the Delete() method.
//
cone->Delete();
coneMapper->Delete();
coneActor->Delete();
ren1->Delete();
renWin->Delete();
return 0;
}