The Visualization ToolKit (VTK) is an open source, freely available software system for 3D computer graphics, image processing, and visualization. VTK includes a textbook published by Kitware (The Visualization Toolkit, An Object-Oriented Approach To 3D Graphics, 3rd edition ISBN 1-930934-12-2 ), a C++ class library, and several interpreted interface layers including Tcl/Tk, Java, and Python. VTK has been implemented on nearly every Unix-based platform, PC's (Windows 95/98/NT/2000/XP) and Mac OSX Jaguar and later. The design and implementation of the library has been strongly influenced by object-oriented principles.
The graphics model in VTK is at a higher level of abstraction than rendering libraries like OpenGL or PEX. This means it is much easier to create useful graphics and visualization applications. In VTK applications can be written directly in C++, Tcl, Java, or Python. In fact, using the interpreted languages Tcl or Python with Tk, and even Java with its GUI class libraries, it is possible to build useful applications really, really fast.
Finally, the software is a true visualization system, it doesn't just let you visualize geometry. VTK supports a wide variety of visualization algorithms including scalar, vector, tensor, texture, and volumetric methods; and advanced modeling techniques like implicit modelling, polygon reduction, mesh smoothing, cutting, contouring, and Delaunay triangulation. Moreover, we have directly integrated dozens of imaging algorithms into the system so you can mix 2D imaging / 3D graphics algorithms and data.
Our goal is to make the software easy enough for any computer literate person to use. This includes students, academicians, software developers, data analysts, hobbyists, graphics and visualization users/researchers, engineers, scientists, and researchers. And you have a choice: if you hate C++, then use Tcl, Python, or Java.
Although VTK is freely available, commercial support is available from Kitware. Dozens of other companies, ranging from large US Government research labs to small firms selling custom postprocessors, use VTK. Also, VTK is widely used in academia for research and in courses on visualization and graphics.
Download 9-page, PDF technical paper (with color images)
Technical Overview: Software
- Over 700 C++ classes
- 350,000+ lines of C++ code (110,000 executable lines)
- Designed using the approach of Rumbaugh et al. ( Object-Oriented Modelling and Design from Prentice-Hall)
- 215,000+ lines of automatically generated Tcl wrapper code (similar counts for Python and Java)
- In-line documentation (both in-code and man pages)
- Easy to understand C++ code (honest!)
- Designed to be extensible
- Lots of examples, applications, test cases, and data
- Supports portable multithreading and distributed memory for parallel algorithms (download J. Ahrens's (Los Alamos Nat'l Lab) VTK Parallel Paper).
Technical Overview: Interaction and GUI
- Integrates seamlessly with a variety of windowing systems including Qt, FLTK, wxWindows, Tcl/Tk, Python/Tk, Java, X11, Motif, Windows, Cocoa and CARBON.
- Supports a variety of interaction styles including trackball and joystick modes for cameras and actors. Interaction styles can be customized and easily added.
- Implements a command/observer event handling mechanism. Objects can watch other objects for a particular event and invoke callbacks as appropriate. Events can be prioritized and aborted for complex event handling. VTK classes define a large palette of events that are invoked throughout the system.
- Includes an extensive set of 3D widgets including point, line, plane, implicit plane, box, sphere, scalar bar, image plane, and spline widgets.
Technical Overview: 3D Graphics
- Surface Rendering
- Volume Rendering
- A flexible software ray casting implementation
- Supports texture-based volume rendering
- Support for VolumePRO volume rendering hardware
- Supports mixing opaque surface geometry and volume rendering
- Rendering Primitives
- points
- lines
- polygons
- triangle strips
- volumes
- Interactive Viewer/Renderer "3D Widgets" for interacting with data
- Properties
- ambient, ambient color
- diffuse, diffuse color
- specular, specular color
- color (lights & object)
- transparency
- texture mapping
- shading (flat/Gouraud)
- backlighting on/off
- Lights
- infinite
- spot
- Cameras
- parallel and perspective projection
- nice methods like elevation, azimuth, zoom, reset
- automatic camera/light creation
- parallel and perspective projection
- Device Independent C++ code and/or Tcl, Java, Python scripts are independent of renderer type. Renderer type set at run-time with environment variable.
- Graphics Model
- Lights illuminate the scene
- Cameras define viewpoint
- Actors specify geometry/properties
- LOD actors support manual and automatic generation of level-of-detail to support interactive rendering for even the largest models.
- Assemblies group actors into arbitrary hierarchies
- Mappers define geometry/link into visualization pipeline
- Renderers coordinate lights, cameras, actors to create image
- Volumes are a type of actor with their own special properties
- Lights illuminate the scene
- Special Features
- Multiple windows/viewports
- Red/blue stereo
- Crystal eyes stereo
- Motion and focal blur
- Backface/frontface culling of polygons
- Save images to various file formats including png, jpeg, tiff, bmp and ppm.
- Multiple windows/viewports
Technical Overview: Visualization
- Data Types:
- polygonal data (points, lines, polygons, triangle strips)
- images and volumes (i.e., structured point datasets)
- structured grids (e.g., finite difference grids)
- unstructured grids (e.g, finite element meshes)
- unstructured points
- rectilinear grids
- polygonal data (points, lines, polygons, triangle strips)
- Cell Types:
- vertex, poly-vertex
- line, poly-line
- triangle
- triangle strip
- pixel
- quadrilateral
- polygon
- tetrahedron
- voxel
- hexahedron
- wedge
- pyramid
- vertex, poly-vertex
- Attribute Types:
-
scalars (single valued plus grayscale, grayscale-alpha, rgb, and rgb-alpha).
-
vectors
-
3x3 tensors
-
normals
-
texture coordinates (1-3D)
-
field data
-
-
Scalar algorithms
-
color mapping
-
carpet plots
-
iso-contouring: marching cubes
-
iso-contouring: dividing cubes
-
thresholding
-
scalar generation from other data (elevation, velocity, etc.)
-
-
Vector algorithms
-
hedgehogs
-
streamlines
-
dashed streamlines
-
stream points
-
stream surfaces
-
streampolygon
-
displacement plots/warping
-
-
Tensor algorithms
-
tensor ellipsoids
-
tensor glyphs
-
hyper-streamlines
-
-
Information Visualization
-
parallel coordinates
-
programmable glyphs
-
splatting
-
dimension reduction
-
- Modelling algorithms
- spheres, cones, cylinders, cubes, lines, planes, etc.
- axes, cursors, text, outlines
- implicit modelling
- decimation
- texture thresholding
- boolean textures
- glyphs
- cutting
- clipping (2D and 3D)
- probing
- normal generation
- connectivity
- triangle strip generation
- linear and rotational extrusion
- splatting
- swept surfaces/volumes
- multi-variate visualization
- scattered/unstructured point visualization
- appending, merging, cleaning data
- 2D & 3D Delaunay triangulation (including alpha shapes)
- Laplacian & Windowed sinc mesh smoothing
- Surface reconstruction
- spheres, cones, cylinders, cubes, lines, planes, etc.
- Data Interface (Readers/Writers treat a single dataset; Importers/Exporters treat a scene.) variety of polygonal formats including stereo-lithography, MOVIE.BYU, Cyberware, etc.
- our own VTK formats (including a parallel XML format) for all data types
- Inventor Writer, IV Exporters
- 3D Studio Importer
- PLOT3D
- PNM
- RIB (RenderMan) Exporter
- SLC (Volume) Reader
- TIFF Writer
- VRML Exporter
- Wavefront .OBJ Exporter, .OBJ Reader
- BMP reader and writer
- Raw image formats
- our own VTK formats (including a parallel XML format) for all data types
- Visualization Pipeline Demand-driven data-flow with automatic network updates
- Reference counting to reduce memory requirements
- Uses sources, filters, mappers to start, process, and terminate network
- Network looping and feedback supported
- Strongly type-checked to enforce filter connectivity
- Supports multiple input / multiple output filters
- Reference counting to reduce memory requirements
- Annotation
- 2D and 3D text
- Scalar bar (scalar to color index)
- x-y plots
- Flying axes
- Overlay plane drawing
- Attach overlay annotation to 3D positions
- 2D and 3D text
Technical Overview: Imaging
- Features
- Uses cached, streaming pipeline so that you can operate on gigantic datasets (i.e., deals with pieces of data). This is done completely transparently.
- Most imaging filters are multi-threaded for parallel execution
- Fully integrated with 3D graphics/visualization pipeline
- Uses cached, streaming pipeline so that you can operate on gigantic datasets (i.e., deals with pieces of data). This is done completely transparently.
- Filter types (a quick summary)
- diffusion filters
- Butterworth, low-pass, high-pass filters
- dilation, erosion, skeleton
- convolution
- difference, arithmetic, magnitude, divergence, gradient, mean
- distance
- FFT
- Fourier, Gaussian, Sobel
- histogram
- threshold
- permutation, conversion, padding
- diffusion filters
In A Nutshell
- What's Cool About VTK
- It's free (although the books help!)
- Easy to create graphics/visualization applications
- C++ source code - you have a lot of control
- Easy to derive new classes
- Can prototype or build applications using "interpretive" languages Tcl, Python, and Java
- User interface can be created fast with Tk or Java GUI class libraries
- Can learn about graphics / visualization / imaging
- Supports an extensive palette of 3D widgets
- Platform/rendering library independent
- Lots of advanced and very useful algorithms
- Integrated software, not a bunch of unreleated snippets of code
- You can convert data into pictures
- Object-oriented
- Heavily tested in real-world applications...not academic code
- Large user base provides decent support
- Commercial support and consulting available
- It's free (although the books help!)
- What's UnCool About VTK
- Not a super-fast graphics engine...VTK uses C++ dynamic binding and a device independent graphics model.
- C++ source code (so use Tcl, Python, or Java)
- Very large...not a toy...you'll need a decent system to use it effectively
- Not a super-fast graphics engine...VTK uses C++ dynamic binding and a device independent graphics model.