Visualization Library (VL) is an open source C++ middleware for 2D/3D graphics applications based on
OpenGL
OpenGL (Open Graphics Library) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve ha ...
4, designed to develop portable applications for the
Microsoft Windows,
Linux
Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which i ...
and
Mac OS X
macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac computers. Within the market of desktop and lapt ...
operating systems.
Design goals
Visualization Library was designed to:
# Implement an intuitive, thin and portable C++ wrapper around OpenGL 4.
# Be fully compatible with older versions of OpenGL (1.x, 2.x and 3.x).
# Deliver the features and performances of modern GPUs also to non-gaming applications, like virtual reality, scientific and medical visualization, simulators, training and so on.
# Provide a generic and fine-grained framework that can be used to assemble customized rendering techniques.
# Avoid the architectural limitations of the uber-scene-graph paradigm.
# Give to the programmer as much control as possible while taking care of the dirty details.
Internal design
Visualization Library design is based on algorithmic and data structure specialization and separation, unlike many other 3D frameworks part of the so-called "uber
scene graph
Scene (from Greek σκηνή ''skēnḗ'') may refer to:
Arts, entertainment, and media Music
*Scene (subculture), a youth subculture from the early 2000s characterized by a distinct music and style. Groups and performers
* The Scene who recor ...
" family, that is, those 3d engines that keep all the rendering information in a single hierarchical structure. Thus, Visualization Library uses different data structures (possibly hierarchical) to manage each particular domain of the rendering pipeline.
For example, the transform tree is kept in a separate tree graph data structure and the objects part of the scene ("Actors" in Visualization Library parlance) can freely refer to a node of the transform tree.
Actors are kept in their own scene partitioning data structure from which their visibility is tested against the
view frustum
In 3D computer graphics, the view frustum (also called viewing frustum) is the region of space in the modeled world that may appear on the screen; it is the field of view of a perspective virtual camera system.
The view frustum is typically ...
and from which eventually they are extracted at rendering time to be part of the rendering queue. This allow VL to be independent from, and take advantage of, virtually any type of scene management technique, such as PVS, portal/sector,
KdTree,
quadtree
A quadtree is a tree data structure in which each internal node has exactly four children. Quadtrees are the two-dimensional analog of octrees and are most often used to partition a two-dimensional space by recursively subdividing it into four ...
s,
octree
An octree is a tree data structure in which each internal node has exactly eight children. Octrees are most often used to partition a three-dimensional space by recursively subdividing it into eight octants. Octrees are the three-dimensional a ...
s etc.
Shaders are also a concept that is kept independent from the rest of the logic and do not require any hierarchical data structure to be used by an Actor. However VL provides a ShaderNode class, as a high level service, that allows the user to update and manage Shaders in a hierarchical way using inheritance rules similar to the ones commonly available in uber-scene-graph based frameworks.
The rendering pipeline follows a similar modular approach, so that highly customized rendering techniques can be implemented by assembling and reusing VL components.
Main features
* OpenGL Support: 1.x, 2.x, 3.x, 4.x.
* OS Support: Windows XP, Vista, 7, Mac OS, Linux
* GUI bindings: Win32, MFC, Qt4, wxWidgets, SDL, GLUT.
* 3D file formats: 3DS, OBJ, PLY (binary and ascii), STL (binary and ascii), AC3D, MD2. More can be plugged in.
* Image file formats supported: JPG, PNG, TGA, TIFF, BMP, DDS, DICOM. More can be plugged in.
* Volume visualization: raycast volume rendering (transfer functions, isosurface etc.), screen aligned slices, efficient marching cubes implementation.
* Texturing: 1D/2D/3D textures, cubemaps, multi-texturing, texture arrays, texture rectangles, render to texture, texture coordinate generation, texture combiners, mipmapping and mipmaps generation, anisotropic filtering, compressed textures, depth textures, integer textures, non normalized textures, texture buffers, multisample textures.
* OpenGL Shading Language 1.x to 4.x support including geometry and tessellation shaders.
* Automatic transparency management.
* Automatic render state sorting and setup minimization.
* Automatic management of Vertex Buffer Objects.
* Extensive framebuffer objects support.
* Provided scene managers: generic hierarchical volume tree, KdTree, portal-based scene graph.
* High quality unicode text rendering and text manipulation functions and classes.
* GLSL based C++ advanced vector/matrix library.
* Geometry optimization functions, triangle reduction/decimation, double-vertex removal, etc.
* Molecular visualization.
* Extrusion generation.
* Linear and Catmull-Rom path interpolation.
* Bicubic Bézier surfaces.
* Edge and silhouette enhancement.
* Virtual file system: abstract file system that transparently allows access to disk files, memory files, .zip files and .gz files.
* Extensible resource system to support new resource types and file formats.
* Much documentation and many examples.
Development status
The first public release of Visualization Library was on May 7, 2007.
Visualization Library is currently at its second stable release, VL 2011.05.1140, which follows the first one, VL 2009.07.640. While the design remained essentially the same the latest stable release differs from its predecessor mainly for: supporting OpenGL 3 and 4 and in particular tessellation shaders, double precision uniform variables, new texture formats such as multisample textures and texture objects, extensive framebuffer object support and a better tuning for applications that make heavy use of
GLSL
OpenGL Shading Language (GLSL) is a high-level shading language with a syntax based on the C programming language. It was created by the OpenGL ARB (OpenGL Architecture Review Board) to give developers more direct control of the graphics pip ...
, among many other enhancements.
See also
*
Scientific visualization
Scientific visualization ( also spelled scientific visualisation) is an interdisciplinary branch of science concerned with the visualization of scientific phenomena. Michael Friendly (2008)"Milestones in the history of thematic cartography, st ...
External links
Official websiteOfficial GitHub repositoryMichele Bosi, author of Visualization Library
2007 software
3D scenegraph APIs
Free 3D graphics software
Free software programmed in C++
OpenGL