Technical Overview: Software
  • Approximately 1000 C++ classes
  • Over 1,000,000+ lines of C++ code
  • Hundreds of thousands of automatically generated wrapper code (to support Tcl, Java and Python bindings)
  • Uses the Kitware quality software process CMake, CTest, CDash and CPack
  • In-line documentation (both in-code and man pages)
  • Designed to be extensible
  • Lots of examples, applications, test cases, and data
  • Supports portable multithreading and distributed memory for parallel algorithms
    (download J. Ahrens', 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
  • Advanced GPU-based rendering support
  • Rendering Primitives
    • points
    • lines
    • polygons
    • triangle strips
    • volumes
    • information visualization “views” that map tables, trees and graphs into 3D displays
    • plus adaptors to many other types
  • 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
  • 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
  • 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
    • hierarchical grids (e.g., AMR)
    • generic datasets (user writes their own adaptor into arbitrary dataset)
  • Cell Types:
    • vertex, poly-vertex
    • line, poly-line
    • triangle
    • triangle strip
    • pixel
    • quadrilateral
    • polygon
    • tetrahedron
    • voxel
    • hexahedron
    • wedge
    • pyramid
    • quadratic edges, triangles, quads, tetrahedra, hex, pyramids, wedges
    • generic adaptors to arbitrary cell types
  • Attribute Types:
    • scalars (single valued plus grayscale, grayscale-alpha, rgb, and rgb-alpha).
    • vectors
    • 3x3 tensors
    • normals
    • texture coordinates (1-3D)
    • tables
    • trees
    • graphs
    • field data (arbitrary arrays)
  • 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 (and other glyph types)
    • streamlines
    • dashed streamlines
    • stream points
    • stream surfaces
    • streampolygon
    • LIC (line integral convolution)
    • displacement plots/warping
  • Tensor algorithms
    • tensor ellipsoids
    • tensor glyphs
    • hyper-streamlines
  • Information Visualization
    • parallel coordinates
    • programmable glyphs
    • splatting
    • dimension reduction
    • views
    • treemap
    • hierarchical bundles
    • a variety of graph layout algorithms
    • landscape
  • Modelling algorithms
    • spheres, cones, cylinders, cubes, lines, planes, etc.
    • axes, cursors, text, outlines
    • implicit modelling
    • parametric surfaces
    • 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
    • HDF
    • Ensight
    • HDF
    • Cosmo
    • Fluent
    • DICOM
    • SQL
    • Postscript writer
  • 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