Jump to content

Visualization Library

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 89.135.148.187 (talk) at 13:28, 29 December 2009. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Visualization Library
Stable release
2009.07
Operating systemCross-platform
Type3D graphics
LicenseGNU GPL 3, VL Professional Edition
Websitehttp://www.visualizationlibrary.com

Visualization Library is an open source C++ middleware for 2D/3D graphics applications based on OpenGL 2.1, designed to develop portable applications for the Windows, Linux/X11 and Max OS X (experimental) operating systems.

General Design

Visualization Library has been designed with two main purposes:

  1. Implementing an intuitive, thin and portable C++ wrapper around OpenGL 2.1.
  2. Delivering the features and performances of modern GPUs also to non-gaming applications, like virtual reality, scientific and medical visualization, simulators, training and so on.
  3. Providing a fine-grained framework, easy to integrate into third party software.
  4. Avoid the architectural limitations of the uber-scene-graph paradigm.

Internal Design

From the technical point of view Visualization Library was originally a uber-scene-graph oriented 3d graphics middleware with some notable characteristics that made Visualization Library already stay somehow at the edge of the uber-scene-graph family:

  1. The scene-graph was actually a plain shader-tree and its nodes had the sole purpose of defining the aspect of the objects in the scene.
  2. The matrix transform tree was independent from the shader-tree.
  3. The scene-graph was implemented as a DAG (Directed acyclic graph) but used most of the time as a simple tree (Tree (graph theory)).
  4. The scene-graph did not carry spatial information about the objects in the scene. Such information could be kept externally using Kd-trees, BSP trees, Potentially visible sets, Portal rendering techniques and so on, since they are much more efficient than a generic scene-graph when performing Hidden surface determination and Collision detection.

With the release of Visualization Library Alpha 2 the architecture changed radically falling this time totally outside of the so called "uber scene graph" family, that is, those 3d engines that keep all the spatial and rendering information in a single hierarchical structure. The new architecture now uses different data structures (possibly hierarchical) to manage a particular domain of the rendering pipeline. For example the transform tree is kept in a tree graph data structure as before but the objects in the scene ("Actors" in Visualization Library terminology) can freely refer to a node of the transform tree. The shader graph does not exist anymore and an Actor can freely refer to any effect/shader without the need for a shader-specific hierarchical data structure. Also the Actors are kept in their own scene partitioning data structure from which their visibility against the view frustum is tested and from which eventually they are extracted at rendering time to be part of the rendering queue.

Key Features

This is the list of features as specified in the "About" section of the official website for the Beta 2 release:

  • 3D file formats supported: 3DS, OBJ, PLY (binary and ascii), STL (binary and ascii), AC3D, MD2.
  • Image file formats supported: JPG, PNG, TGA, TIFF, BMP, DDS, DICOM.
  • GUI bindings: Win32, MFC, Qt4, wxWidgets, SDL, GLUT, Cocoa.
  • Volume visualization: direct volume rendering via screen aligned slices, isosurface extraction via marching cubes.
  • Virtual File System: read/write disk files and directories, read zip files and directories, read/write memory files and directories, read/write gz files.
  • Texturing: 1D, 2D, 3D textures, cubemaps, texture arrays, texture rectangles, multi-texturing, render to texture, texture coordinate generation, texture combiners, mipmapping and mipmaps generation, anisotropic filtering, compressed textures, depth textures, integer textures, non normalized textures.
  • OpenGL Shading Language support.
  • Geometry Shaders support.
  • GLSL multiple render targets.
  • OpenGL accelerated 2D vector graphics.
  • Multisampling.
  • Framebuffer Objects support.
  • Vertex Buffer Objects support.
  • Pixel Buffer Objects support.
  • Display Lists support.
  • Hierachical frustum culling against boxes and spheres.
  • Multiple cameras, multiple scene managers, multiple renderings.
  • High quality unicode text rendering and text manipulation functions and classes.
  • GLSL based C++ vector/matrix library.
  • Hierachical bounding volume scene manager.
  • Kd-Tree hierachical scene manager.
  • Portal/sector scene manager.
  • Kd-Tree based terrain scene manager (with GPU acceleration if available).
  • Hierarchical matrix transformations.
  • Morphing animations (with GPU acceleration if available).
  • Geometry instancing.
  • Geometry Level of Detail.
  • Shader Level of Deatil.
  • Multipassing.
  • Render state sorting and minimization.
  • Automatic transparency management.
  • Billboards.
  • Clipping planes.
  • All OpenGL lighting models/materials supported.
  • Extensible resource system to support new resource types.
  • Geometry optimization functions, triangle reduction/decimation, double vertex removal etc.
  • Rich image manipulation routines.
  • Molecular visualization.
  • Extrusion generation.
  • Linear and Catmull-Rom path interpolation.
  • Bicubic Bézier surfaces.
  • Edge and silhouette enhancement.

Development Status

Visualization Library has been released to the public for the first time on May 7 2008 as Visualization Library Alpha 1. The first stable release Visualization Library v2009.07.640 has been released the 10th of August 2009 as reported by Fresh Meat. The most recent release is Visualization Library 2009.08.812, released on the 29th Dec 2009.

Visualization Library Alpha 2 release in particular introduced many changes in the architecture of Visualization Library. Among this changes one of the most important is surely the fact that all the scene graph oriented mechanisms have been dropped to favor a simpler and somewhat "flatter" architecture, that is, no shader trees or graphs to be traversed existed anymore. With Visualization Library Beta 2 shader trees (via the vl::ShaderNode class) were reintroduced as a high level optional mechanism on top of the low level functions. Visualization Library Beta 2 also introduced other high level services like molecule visualization, extrusion generation, path interpolation along with a couple of acceleration techniques such as portal-based hidden surface determination and hardware occlusion culling.

See also