Why Visualization Library
Visualization Library is not a pre-packaged rendering engine or a game engine, as this would limit its scope. Visualization Library has been designed to be a generic, fine-grained platform, upon which 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 very 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. If you need a simple, flexible and fast 3d graphics platform that can be quickly integrated into your applications then you should consider using Visualization Library.
Design Key Features and Goals
- Code developed in standard C++/STL.
- Portable across Windows, Linux and Mac OS X operating systems.
- Friendly API using OpenGL wording and conventions.
- Minimalistic, fast, memory-efficient, professional, reliable.
- 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.
- 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, Pixel and Vertex Buffer Objects etc. while at the same time retains full compatibility with OpenGL 1.1 class hardware.
- Designed for OpenGL 2.1, inspired by OpenGL 3.x and OpenGL ES principles:
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 and OpenGL 3.x principles. Note that at the moment Visualization Library fully supports OpenGL 2.1 plus most of the extensions included in OpenGL 3.x. Support to OpenGL 3.x and OpenGL ES will be available in the future.
- 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 conjuction with the following: Intel® Threading Building Blocks, VR Juggler, Chromium.
Short Feature List
- 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.
- 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.
- Render state sorting and minimization.
- Automatic transparency management.
- 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.