# Visualization Library

A lightweight C++ OpenGL middleware for 2D/3D graphics

[Home] [Tutorials] [All Classes] [Grouped Classes]

# Introduction

Welcome to Visualization Library!

Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the industry standard OpenGL 1.x-4.x, designed to develop portable applications for the Windows, Linux and Mac OS X operating systems.

Visualization Library is currently used by professionals, researchers and students to develop 2D and 3D applications in fields such as scientific visualization, material sciences, geosciences, oil and gas exploration, health and medical training and visualization, civil and military simulation, virtual reality, augmented reality, visual simulation, plotting, data mining and visualization, presentations, multimedia applications, special effects, 2D and 3D games and so on.

Visualization Libray has been designed to be a fine-grained platform upon which a wide variety of highly-specialized 3D graphics applications can be effectively developed. Instead of abstracting the user from the underlying OpenGL API, Visualization Library stays as close as possible to it and defines a thin high-performance layer on top of it. The result is that many OpenGL functions and features have a 1 to 1 mapping to Visualization Library's classes.

You can think of Visualization Library as a toolkit that provides you with the power and flexibility of OpenGL within a light and user friendly C++ object oriented framework.

Visualization Library has been developed by Michele Bosi with the help of several contributors (see the Credits page).

Contacts:

- info@visualizationlibrary.com
- http://www.linkedin.com/in/michelebosi

Community Resources

- Visualization Library Newsletter - To be notified of the latest developments, events and news regarding Visualization Library. Only major news are sent to this newsletter like new stable releases or important bug fixes releases.
- http://twitter.com/VizLibrary - Here you will find more frequently updated news regarding VL releases and the current development.
- Forums - The right place to ask for help, advertise your projects and also to check for news regarding VL releases and the current development.

Visualization Library Design Key Features and Goals

- Code developed in standard C++/STL.
- Portable across Windows, Linux and Mac OS X operating systems (32 and 64 bits).
- Friendly API using OpenGL wording and conventions.
- Minimalistic, efficient and reliable design.
- Debug-friendly behaviour.
- Designed to be a sensible, high-performance, thin layer on top of OpenGL:

Being a thin wrapper around OpenGL, Visualization Library not only provides the developer with a generic, fast and light 2-3D framework suitable for multiple purposes but also exposes the programmer to a familiar framework. In fact, most of the OpenGL mechanisms are mapped in an intuitive way to Visualization Library's API, maximizing the value of the OpenGL developer's experience and know-how. See OpenGL vs VL Feature Mapping page for more information.

- Developed for today's and tomorrow's hardware:

Visualization Library's core architecture is based on technologies such as OpenGL Shading Language, Framebuffer Objects, Multiple Render Targets, Geometry Shaders, Tessellation Shaders, Pixel and Vertex Buffer Objects etc. while at the same time retains full compatibility with OpenGL 1.1 class hardware.

- Compatible with OpenGL 1.x, designed for OpenGL 2.x, 3.x and 4.x:

Many legacy features like accumulation buffer, edge flags, indexed rendering, immediate mode, feedback mode, picking mode etc. have been removed in order to keep Visualization Library as simple as possible and to guarantee that only the optimal rendering paths are used. Special attention has been paid in order to make Visualization Library's design neater and closer to OpenGL ES 2.0 and OpenGL 4.x principles.

- GUI independent:

Like OpenGL, Visualization Library does not depend or rely on any GUI library. It is the user's responsibility to provide an adequate OpenGL context on which Visualization Library operates. However, several utility GUI bindings (Qt4, MFC, Win32...) are provided to further simplify the development process.

- Non direct multithreading support but multithreading-aware:

Like OpenGL, Visualization Library does not provide any special multithreading commands/classes or a multithreading library. It is the user's responsibility to take care of the various aspects involved in the development of a multithreaded or distributed application. However, Visualization Library have been designed to minimize multithreading-related issues as much as possible. If you are interested in the topic you might want to use Visualization Library in conjunction with the following: Intel® Threading Building Blocks, VR Juggler, Chromium.

Quick Feature Overview

- 3D file formats: 3DS, OBJ, PLY (binary and ascii), STL (binary and ascii), AC3D, MD2.
- 2D Image file formats: JPG, PNG, TGA, TIFF, BMP, DDS, DICOM, RAW.
- GUI bindings: Win32, MFC, Qt4, wxWidgets, SDL, GLUT, Cocoa (under development).
- Volume rendering facilities: direct volume rendering via screen aligned slices, ray casting (transfer functions, isosurface, MIP etc.) and marching cubes for isosurface extraction.
- 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: almost all texture formats supported by OpenGL 1.x, 2.x, 3.x, 4.x plus several extensions: 1D, 2D, 3D textures, cubemaps, texture arrays, texture rectangles, multi-texturing, render to texture, texture coordinate generation, texture combiners, mipmapping and hw mipmaps generation, anisotropic filtering, compressed textures, depth textures, integer textures, float and half float texture formats, 2 components textures and more.
- OpenGL Shading Language support.
- C++ vector/matrix library based on GLSL specs.
- Geometry Shaders support.
- Tessellation Shaders support.
- Framebuffer Objects support.
- GLSL/FBO multiple render targets.
- Vertex Buffer Objects support.
- Pixel Buffer Objects support.
- OpenGL accelerated 2D vector graphics.
- Multisampling.
- High quality unicode text rendering and text manipulation functions and classes.
- Display Lists support.
- Hierachical frustum culling against boxes and spheres.
- 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).
- Support for multiple scene managers in one rendering.
- Multiple cameras and multiple renderings.
- Hierarchical matrix transformations.
- Morphing animations (with GPU acceleration if available).
- GPU geometry instancing.
- Geometry Level of Detail.
- Shader Level of Deatil.
- Multipassing effects.
- Automatic render state sorting and lazy setup.
- Automatic transparency management and polygon depth sorting.
- Highly customizable rendering order.
- Resource sharing design: render states, textures, geometry data, shaders etc. almost anything can be shared and reused in different places.
- Automatic memory management via reference counting.
- Billboards.
- Clipping planes.
- All standard OpenGL lighting models: point lights, directional lights, spot lights - diffuse, ambient, emission and specular material/light properties - light decay radius etc.
- Extensible resource system to support new resource types.
- Geometry optimization functions, triangle reduction/decimation, double vertex removal etc.
- Image manipulation routines.
- Molecular visualization.
- Extrusion generation.
- Linear and Catmull-Rom path interpolation.
- Bicubic Bézier surfaces.
- Edge and silhouette enhancement.
- Interactive object picking.
- Trackball manipulator.
- ... and much more, see Features Overview for a more in-depth overview of Visualization Library's features.

Visualization Library v2011.05.1142 Reference Documentation
Copyright 2005-2011 Michele Bosi. All rights reserved.
Updated on Thu May 26 2011 22:51:30.
Permission is granted to use this page to write and publish articles regarding Visualization Library.