VTK: The Visualiza on Toolkit
Part I: Overview and Graphics Models
Han-Wei Shen The Ohio State University What is VTK?
• An open source, freely available so ware system for 3D graphics, image processing, and visualiza on. • Support for hundreds of algorithms in visualiza on and image processing • Object-oriented design with different interpreted language wrappers. At a Glance
• The core of VTK is wri en en rely in C++ and contains hundreds of classes • VTK compiles and run on Windows, MacOS, Linux • Different interfaces for fast prototyping: Tcl/Tk, Java, and Python • Have users all over the world – The beauty of Open Source! System Architecture
Interpreted Wrapper (Tcl, Java, Python)
• Tcl/Tk shell • Tcl/Tk source • Java interpreter • Java JDK • Python interpreter • Python source C++ core
Libraries and includes All class source code (dll and .h files) (could take hours to Or compile) (.a and .h files)
Binary Installation: if you will use Source code Installation: The classes to build your applicatoin If you want to extend vtk VTK classes
(http://www.vtk.org/doc/nightly/html/classes.html) VTK Object Models
• Graphics and Visualiza on Models – Graphics objects: rendering – Visualiza on objects: genera ng graphical objects to represent the data
Data Flow System: Pipeline execution
Data source Visualization Graphics Pipeline Execu on
Direction of data flow
Visualization model Graphics model
Source Filter Mapper Actor Renderer
Direction of ‘update’ VTK Mappers
• Mappers convert data into graphical primi ves or write to a file (writer) – Mappers require one or more input data objects – Mappers terminate the visualiza on pipeline • Example: vtkPolyDataMapper, which takes geometry such as cylinder or cone as input and convert it to renderable geometry
Visualization model Graphics model
Source Filter Mapper Actor Renderer VTK Actors • Actors represent graphical data or objects • A VTK actor contains – object proper es (color, shading type, etc) – geometry – transforma ons • VTK actors need to work together with lights (vtkLight) and camera (vtkCamera) to make a scene • The scene is then rendered to an image by a renderer (vtkRenderer) Visualization model Graphics model
Source Filter Mapper Actor Renderer VTK Renderer
• The Renderer in VTK, vtkRenderer, is to coordinate the rendering process that involves lights, cameras, and actors • vtkRenderer creates a default camera and lights if not present, but needs to have at least one actor • vtkRenderer needs to be connected with a vtkRenderWindow
Visualization model Graphics model
Source Filter Mapper Actor Renderer VTK Render Window
• The class, vtkRenderWindow es the en re rendering process together • It manages all the pla orm dependent window management issues and hide the details from the user • It also stores graphics specific informa on such as window size, posi on, tle, frame buffer depth, etc.
Visualization Graphics model model
Source Filter Mapper Actor Renderer
Render window The Graphics Model
camera Actor Light screen
Viewer The Graphics Model
camera vtkCamera Actor Light screen
Viewer The Graphics Model
camera vtkCamera Actor Light screen vtkActor • vtkProperty • vtkMapper • vtkTransform
Viewer The Graphics Model
camera vtkCamera Actor Light screen vtkActor vtkLight • vtkProperty • vtkMapper • vtkTransform
Viewer The Graphics Model
camera vtkCamera Actor Light screen vtkActor vtkLight • vtkProperty • vtkMapper • vtkTransform
vtkRenderer
Viewer The Graphics Model
The purpose is to render the geometry (volume) on the screen
camera vtkCamera Actor Light screen vtkActor vtkLight • vtkProperty • vtkMapper vtkRenderWindow • vtkTransform
vtkRenderer vtkRenderWindowInteractor
Viewer VTK Simple Pseudo Code
Main() {
create geometry; create a mapper; give the geometry to the mapper; create an actor; give the mapper to the actor; create a renderer; give the actor to the renderer; create a window; give the renderer to the window;
window->render(); } VTK Simple Pseudo Code
Main() { Geometry
create geometry; create a mapper; give the geometry to the mapper; create an actor; give the mapper to the actor; create a renderer; give the actor to the renderer; create a window; give the renderer to the window;
window->render(); } VTK Simple Pseudo Code
Main() { Geometry
create geometry; create a mapper; Mapper give the geometry to the mapper; create an actor; give the mapper to the actor; create a renderer; give the actor to the renderer; create a window; give the renderer to the window;
window->render(); } VTK Simple Pseudo Code
Main() { Geometry
create geometry; create a mapper; Mapper give the geometry to the mapper; create an actor; give the mapper to the actor; Actor create a renderer; give the actor to the renderer; create a window; give the renderer to the window;
window->render(); } VTK Simple Pseudo Code
Main() { Geometry
create geometry; create a mapper; Mapper give the geometry to the mapper; create an actor; give the mapper to the actor; Actor create a renderer; give the actor to the renderer; create a window; Renderer give the renderer to the window;
window->render(); } VTK Simple Pseudo Code
Main() { Geometry
create geometry; create a mapper; Mapper give the geometry to the mapper; create an actor; give the mapper to the actor; Actor create a renderer; give the actor to the renderer; create a window; Renderer give the renderer to the window;
Window window->render(); } VTK Simple Pseudo Code
Main() { Geometry
create geometry; create a mapper; Mapper give the geometry to the mapper; create an actor; give the mapper to the actor; Actor create a renderer; give the actor to the renderer; create a window; Renderer give the renderer to the window;
Window window->render(); } VTK Render a Cone #include “vtk.h”
Main() { Geometry vtkConeSource *cone = vtkConeSource::New(); cone->SetResolu on(8);
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New(); Mapper mapper ->SetInput(cone->GetOutput());
vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper(Mapper); Actor
vtkRenderer * ren = vtkRenderer::New(); ren->AddActor(conActor); Renderer vtKRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); Window renWindow->render(); } VTK Render a Cone #include “vtk.h”
Main() { Geometry vtkConeSource *cone = vtkConeSource::New(); cone->SetResolu on(8);
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New(); Mapper mapper ->SetInput(cone->GetOutput());
vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper(Mapper); Actor
vtkRenderer * ren = vtkRenderer::New(); ren->AddActor(conActor); Renderer vtKRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); Window renWindow->render(); } VTK Render a Cone #include “vtk.h”
Main() { Geometry vtkConeSource *cone = vtkConeSource::New(); cone->SetResolu on(8);
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New(); Mapper mapper ->SetInput(cone->GetOutput());
vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper(Mapper); Actor
vtkRenderer * ren = vtkRenderer::New(); ren->AddActor(conActor); Renderer vtKRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); Window renWindow->render(); } VTK Render a Cone #include “vtk.h”
Main() { Geometry vtkConeSource *cone = vtkConeSource::New(); cone->SetResolu on(8);
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New(); Mapper mapper ->SetInput(cone->GetOutput());
vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper(Mapper); Actor
vtkRenderer * ren = vtkRenderer::New(); ren->AddActor(conActor); Renderer vtKRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); Window renWindow->render(); } VTK Render a Cone #include “vtk.h”
Main() { Geometry vtkConeSource *cone = vtkConeSource::New(); cone->SetResolu on(8);
vtkPolyDataMapper *mapper = vtkPolyDataMapper::New(); Mapper mapper ->SetInput(cone->GetOutput());
vtkActor *coneActor = vtkActor::New(); coneActor->SetMapper(Mapper); Actor
vtkRenderer * ren = vtkRenderer::New(); ren->AddActor(conActor); Renderer vtKRenderWindow *renWindow = vtkRenderWindow::New(); renWindow->AddRenderer(ren); Window renWindow->render(); } vtkRenderWindow Output
1 vtkRenderWindow
vtkCamera 2 vtkRenderer vtkLight vtkActor ( property, geometry(mapper), transformation, etc)