VTK: The Visualization Toolkit Qaiser Chaudry Georgia Institute of Technology June 28, 2006.
-
Upload
robyn-crawford -
Category
Documents
-
view
233 -
download
0
Transcript of VTK: The Visualization Toolkit Qaiser Chaudry Georgia Institute of Technology June 28, 2006.
VTK: The Visualization Toolkit
Qaiser Chaudry
Georgia Institute of Technology
June 28, 2006
Visualization
Box ?
What is VTK?
• An open source, freely available software system for 3D graphics, image processing, and visualization.
• Support for hundreds of algorithms in visualization and image processing
• Object-oriented design with different interpreted language wrapers.
At a Glance • The core of VTK is written entirely in C++
• Contains 600 existing classes with 325K lines of code
• VTK will compile and run on Windows 98/NT, SGI, Linux, Sun, HP, etc.
• Supports OpenGL
• Different interfaces for fast prototyping: Tcl , Java, and Python
• Has users all over the world – The beauty of Open Source!
System ArchitectureInterpreted Wrapper (Tcl, Java, Python)
C++ core
Binary Installation: if you will usethe classes to build your applicatoin
Source code Installation: If you want to extend vtk
•Tcl/Tk source•Java JDK•Python source
All class source code(could take hours to compile)
Libraries and includes(dll and .h files)Or(.a and .h files)
•Tcl/Tk shell•Java interpreter•Python interpreter
VTK classes
The Graphics Model
The purpose is to render the geometry (volume) on the screen
vtkCameravtkLight
vtkActor
•vtkProperty•vtkMapper•vtkTransformvtkRenderWindow
vtkRenderervtkRenderWindowInteractor
To see is to believe …1 vtkRenderWindow
2 vtkRenderervtkCamera
vtkLight
vtkActor( property, geometry(mapper), transformation, etc)
The Graphics ModelThe purpose is to render the geometry (volume) on the screen
cameraLightActor
screen
Example Program
Main() { create a window; create a renderer; give the renderer to the window; create procedural geometry; create a mapper; give the geometry to the mapper; create an actor; give the mapper to the actor;
give the actor to the renderer; window->render(); }
Window
Renderer
Actor
Mapper
Geometry
Example -1
• A polygonal model of a cone
• Render to screen.
• Rotate the cone 360 degrees
• source -> mapper -> actor -> renderer -> renderwindow
Example -1// 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( int argc, char *argv[] )
{
// Create an instance of vtkConeSource.
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight( 3.0 );
cone->SetRadius( 1.0 );
cone->SetResolution( 10 );
Example -1 // We create an instance of vtkPolyDataMapper
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInput( cone->GetOutput() );
// Create an actor.
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper( coneMapper );
// Create the renderer.
vtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->SetBackground( 0.1, 0.2, 0.4 );// Finally we create the render window.vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 ); renWin->SetSize( 300, 300 );
Example -1// Now we loop over 360 degrees 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 );// Introduce delay to slow down motion. Sleep(10); }// Free up any objects we created. cone->Delete(); coneMapper->Delete(); coneActor->Delete(); ren1->Delete(); renWin->Delete(); return 0;}
Creating Multiple RenderersvtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->SetBackground( 0.1, 0.2, 0.4 );
ren1->SetViewport(0.0, 0.0, 0.5, 1.0);
vtkRenderer *ren2= vtkRenderer::New();
ren2->AddActor( coneActor );
ren2->SetBackground( 0.2, 0.3, 0.5 );
ren2->SetViewport(0.5, 0.0, 1.0, 1.0);
vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer( ren1 ); renWin->AddRenderer( ren2 ); renWin->SetSize( 600, 300 );
Creating Multiple Renderers
// Make one view 90 degrees from the other.ren1->GetActiveCamera()->Azimuth(90);
// Now we loop over 360 degrees 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 ); ren2->GetActiveCamera()->Azimuth( 1 );
Sleep(10); }
Properties and Transformation// Create an actor to represent the first cone. The actor's properties are
modified to give it different surface properties. By default, an actor is created with a property so the GetProperty() method can be used.
vtkActor *coneActor = vtkActor::New();
coneActor->SetMapper( coneMapper );
coneActor->GetProperty()->SetColor(0.2, 0.63, 0.79);
coneActor->GetProperty()->SetDiffuse(0.7);
coneActor->GetProperty()->SetSpecular(0.4);
coneActor->GetProperty()->SetSpecularPower(20);
Properties and Transformation// Create a property and directly manipulate it. Assign it to the second actor.
vtkProperty *property = vtkProperty::New();
property->SetColor(1.0, 0.3882, 0.2784);
property->SetDiffuse(0.7);
property->SetSpecular(0.4);
property->SetSpecularPower(20);
vtkActor *coneActor2 = vtkActor::New();
coneActor2->SetMapper(coneMapper);
coneActor2->GetProperty()->SetColor(0.2, 0.63, 0.79);
coneActor2->SetProperty(property);
coneActor2->SetPosition(0, 3, 0);
Properties and Transformation
// Create the renderer and assign actors to it.
vtkRenderer *ren1= vtkRenderer::New();
ren1->AddActor( coneActor );
ren1->AddActor( coneActor2 );
ren1->SetBackground( 0.1, 0.2, 0.4 );
User interaction • vtkRenderWindowInteractor – allow the user to interact
with the graphics objects
• w: wireframe mode
• s: surface mode
• r: reset the transformation
• e: exit
• Left Button: rotate
• Right Button: zoom
User interaction// The vtkRenderWindowInteractor class watches for events (e.g., keypress,
mouse) in the vtkRenderWindow.
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
// Here we specify a particular interactor style.
vtkInteractorStyleTrackballCamera *style =
vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
// Leave an event loop running. Exit when the user presses the "e" key.
iren->Initialize();
iren->Start();
TCL Vs C++
package require vtk
vtkConeSource conecone SetHeight 3.0cone SetRadius 1.0cone SetResolution 10
vtkPolyDataMapper coneMapperconeMapper SetInput [cone GetOutput]
vtkActor coneActorconeActor SetMapper coneMapper
vtkRenderer ren1 ren1 AddActor coneActorren1 SetBackground 0.1 0.2 0.4
vtkRenderWindow renWinrenWin AddRenderer ren1renWin SetSize 300 300
for {set i 0} {$i < 360} {incr i} { after 10 renWin Render [ren1 GetActiveCamera] Azimuth 1}
vtkCommand DeleteAllObjects
exit
#include "vtkConeSource.h"#include "vtkPolyDataMapper.h"#include "vtkRenderWindow.h"#include "vtkCamera.h"#include "vtkActor.h"#include "vtkRenderer.h"int main( int argc, char *argv[] ){ vtkConeSource *cone = vtkConeSource::New(); cone->SetHeight( 3.0 ); cone->SetRadius( 1.0 ); cone->SetResolution( 10 );
vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); coneMapper->SetInput( cone->GetOutput() );
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 );
int i; for (i = 0; i < 360; ++i) { Sleep(10); renWin->Render(); ren1->GetActiveCamera()->Azimuth( 1 ); }
cone->Delete(); coneMapper->Delete(); coneActor->Delete(); ren1->Delete(); renWin->Delete(); return 0;}
Demos
• Diffuse Lighting
• Modeling
• Volume Rendering
• 3D Model Motor
• Medical imaging
What is ITK?
• Image Processing
• Segmentation
• Registration
• No Graphical User Interface (GUI)
• No Visualization
National Library of Medicine Insight Segmentation and Registration Toolkit (ITK)
References• www.cse.ohio-state.edu/~hwshen/788/sp01/
• http://www.kitware.com/
• http://www.vtk.org/
• The VTK Users's Guide
• The Visualization Toolkit An Object-Oriented Approach To 3D Graphics 3rd Edition
• http://www.itk.org/