|
VTK Home
Kitware Home / Newsletter
public.kitware.com
What is VTK?
VTK In Use
Buy The Books
Download
Mailing List
Quality Dashboard
Bug Tracker
Search
Manual:
CVS HEAD (nightly)
5.2 release
5.0.4 release
VTK FAQ
VTK Wiki
VTK Technical Documents
How To Contribute
Coding Standards
Copyright Information
Example Code
Sebastien's VTK Links
Other VTK Links
|
|
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
- Cameras
- parallel
and perspective projection
- nice methods
like elevation, azimuth, zoom, reset
- automatic
camera/light creation
- 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
- 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.
Technical Overview:
Visualization
- 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
- 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
- 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
- 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
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
- 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
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
- 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
|