# Visualization Library

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

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

# Changelog

Visualization Library 2009.07.640

- Extended documentation and tutorials.
- API improvements and cleanup.
- Fixed MFC compilation issues.
- Fixed Mac OS X compilation issues.

Visualization Library 2009.07 RC3

- Extended documentation and tutorials.
- API improvements and cleanup.

Visualization Library 2009.07 RC2

- FileSystem::locateFile() enhanced.
- 3DS, OBJ, AC3D texture locating enhanced.
- Fixed sources installation.

Visualization Library 2009.07 RC1

- OpenGL & VL enables documentation.
- setEnabled/isEnabled policy.
- vl::PolygonDephtSorting bug fixes and tutorial.
- Picking example.
- Image and ReadPixels enhancements.
- Transparency and Polygon Depth Sorting Tutorial.
- Antialiasing and Multisampling Tutorial.
- Billboards Tutorial.

Visualization Library 2009.07 Beta 2

- Bug fixes.
- Documentation updates.
- API stabilization.

Visualization Library 2009.07 Beta 1

- Added new classes to perform edge enhancement: vl::EdgeRenderer, vl::EdgeExtractor
- Added new Edge Enhancement and Wireframe Rendering demo and tutorial.
- Added new vl::SceneManagerPortals, a scene manager that implements sector/portal-based occlusion culling.
- Added new Portal-Based Culling and Scene Management demo and tutorial.
- Added support OpenGL-accelerated occlusion culling via the `GL_ARB_occlusion_query` extension.
- Added new Hardware Occlusion Culling demo and tutorial.
- Added new vl::BezierSurface class to manipulate and render complex bicubic Bézier patches and surfaces.
- Added new Bicubic Bézier Patches and Surfaces demo and tutorial.
- Added new vlMolecule module for molecular visualization. See also vlMolecule::Molecule and vlMolecule.
- Added new Molecule Visualization demo and tutorial.
- Added new vl::Tessellator class to tessellate complex, concave and self-intersecting polygons.
- Added new Polygon Tessellation demo and tutorial.
- Added new vl::Extrusion class to generate 3d geometry by extruding a 2d silhouette along 3d paths.
- Added new Geometry Extrusions demo and tutorial.
- Added new vl::Interpolator, vl::LinearInterpolator, vl::CatmullRomInterpolator and other classes to interpolate over a set of values.
- Added new Interpolators demo and tutorial.
- Simplified Actor and Effect lod management; quicker Actor and Effect allocation.
- Fixed x86 compilation and portable debug interrupt implementation.
- RenderingSequence dropped -> Implemented a new powerful rendering-tree mechanism.
- MessageBox used to notify failed checks on Win32.
- New VisualizationLibrary class.
- Nicely manage degenerate quads normal computation.
- Enhanced test framework.

Visualization Library Alpha 3.2.440

- Direct volume rendering via vlVolume::SlicedVolume, supporting gradient, lighting and transfer function pre-computation, realtime GLSL-based Blinn-Phong lighting and transfer function computation.
- New App_VolumeRendering.hpp demo demonstrating various volume rendering techniques based on the vlVolume::SlicedVolume class, see the tutorial section for more information.
- Isosurface extraction with the new vlVolume::MarchingCubes class!
- New App_MarchingCubes.hpp demo demonstrating various techniques using marching cubes, including multiple volume rendering, transparency management, volume color via texturing and vertex color, 3D plots and even two animated metaballs demos! See the tutorial section for more information.
- DICOM file format support (read/write).
- New vlVolume::VolumePlot class to generate annotated 3D plots from volume data.
- Dramatic performance improvements up to 10x for STL, PLY and OBJ import.
- TGA, TIFF, JPG and PNG files can now save 1D, 2D, 3D and cubemap images.
- New Image::makeNonUniformColorSpectrum() function, especially useful to colorize volume data.
- Quicker vl::DepthSortCallback: sorts only when the camera or actor matrix changes.
- Enhanced Virutal File System functionalities: locate directories, test disk directory existence, enumerate files and directories, other misc enhancements.
- New vl::Image related functions: vl::loadImagesFromDir(), vl::assemble3DImage().
- Simple KeyValues class to manage a set of key/value pairs.
- Now shaders automatically detext if the source passed is a path to a file or is an actual shader text

Visualization Library Alpha 3.1.300

- New official wxWidgets bindings! See vlWX::vlWXGLCanvas for more information.
- New vl::STLLoader class: loads ascii and binary STL files.
- New vl::PlyLoader class: more powerful loader for ascii and binary (little and big endian) `ply` files.
- Callback mechanism to execute operations on resource load and write, see vl::LoadCallback and vl::WriteCallback.
- New vl::GeometryLoadCallback class to perform transformations and optimizations on the loaded vl::Geometry.
- New vl::GZipCodec class to load/write gz files.
- New template math classes vl::Matrix4, vl::Matrix3, vl::Matrix2, vl::Vector4, vl::Vector3, vl::Vector2.
- New matrix classes vl::imat4/3/2, vl::umat4/3/2.
- New vector classes vl::svec4/3/2, vl::usvec4/3/2, vl::bvec4/3/2, vl::ubvec4/3/2.
- New array classes vl::ArrayFVec4/3/2, vl::ArrayDVec4/3/2, vl::ArrayIVec4/3/2, vl::ArrayUVec4/3/2 etc.
- Simplified vertex array system based on vl::Array template class.
- vl::DoubleVertexRemover: much quicker implementation.
- New vl::TriangleStripGenerator class.
- New vl::Geometry optimization functions: vl::Geometry::mergeTriangleStrips(), vl::Geometry::convertPrimitivesToDrawArrays(), vl::Geometry::sortVertices().
- New App_ModelProfiler applet to measure the performance of different geometrical optimization techniques.
- Improved vl::Terrain GPU algorithm for ATI cards.
- VBO creation outside of the rendering loop.
- Improved DepthSortCallback: sorts all types of DrawElements*.
- Fixed potential font deallocation problem.
- Image::copySubImage() function to copy a rectangular sub-area of an image, supports all the most common image formats and types.

Visualization Library Alpha 3.0.291

- Automatic compilation of PNG, JPG, ZLib and FreeType libraries.
- New template-based ResourceDatabase implementation: simpler and more flexible.
- Fixed bugs and compilation issues for Ubuntu and Fedora 64 bit systems.
- Fixed permission settings in tgz and tar.bz2 files.
- ZippedFile now supports the seek() operation.

Visualization Library Alpha 3.0.290

- Mac OS X platform support plus experimental Cocoa GUI bindings! A huge thanks goes to Brent Fulgham for his help and feedback!
- MFC GUI bindings! Again, thanks to Brent Fulgham for his help and feedback! Includes support to fullscreen windows, multisampling, keyboard and mouse management, file drag&drop, OpenGL resource sharing, child and top windows support etc.
- VectorGraphics and VectorGraphicsScene classes to perform advanced OpenGL hardware-accelerated 2D rendering.
- Terrain scene manager: implements a simple, kdtree/chunk-based, GPU accelerated (if available), highly memory efficient terrain rendering system (no LOD yet). The system lets you use very large height-maps and texture maps that exceed the GPU's maximum texture size. If the host supports OpenGL Shading Language the scene manager keeps on the GPU memory only the heightmap and generates all the geometry on the fly, thus allowing very large/detailed terrains.
- Extensible resource IO system (see below)
- ShaderNode class to conveniently managed complex hierarchies of Shaders.
- Progressive OpenGL extension management: if the same functionality is supported via multiple extensions now VL selects and uses the best available: first checks direct support by the OpenGL implementation, then checks ARB extensions, then checks EXT extensions.
- Broader video card compatibility including support to integrated ATI and Intel chipsets.
- TrackballManipulator new controls and more precise: now you can zoom in/out with the right mouse button, pan the camera up/down left/right with the middle button and rotate with the left button.
- Near/far clipping plane optimizations. The camera can now optionally optimize the near/far clipping planes based on the visible objects enhancing the everall rendering quality, minimizing z-fighting.

RESOURCE IO

- JPG file format support for both load and save.
- PNG file format support for both load and save.
- Plug-in based ResourceLoaderWriter system. Now you can load and write any resource including 3d files and images using the methods LoaderWriterManager::loadResource()/writeResource(). The appropriate ResourceLoaderWriter will be picked up and used for the specified file type. You can register your own ResourceLoaderWriter to support more file formats or to overried existing ResourceLoaderWriter too!
- Image: new methods convertType() and convertFormat() to convert images from/to all the OpenGL 1.1 type/format combinations! For example you can convert an IT_FLOAT/IF_RGBA to a IT_UNSIGNED_SHORT/IF_LUMINANCE image! In this case the image is also automatically converted from rgb to gray scale! The alpha channel is also retained when possible.
- Image: new methods sampleLinear() and sample() to perform nearest-point or bilinear filtering sampling of an image. This functions support all the OpenGL 1.1 standard image type/format combinations too. This functions can be used to retrieve the color of a pixel, the height of a heightmap or to perform collision detection on a heightmap.
- Image: new method subImage() returns a new image containing the specified rectangular pixel area taken from the source image. Also this function supports all the OpenGL 1.1 image type/format combinations!
- Image::makeColorSpectrum() function: creates an 1D image filled with the specified color spectrum.
- Image: new methods substituteColorRGB_RGB(), substituteColorRGB_RGBA(), and substituteColorGreenKey() to substitute colors and colorize an Image.
- All file loaders and writers now use the VirtualFile interface
- Added write support to DiskFile class.
- Image loader/writers divided into their own modules: vlPNG, vlJPG, vlTIFF, vlTGA, vlBMP, vlDDS, vlDAT.
- 3D file loader/writers divided into their own modules: io3DS, ioOBJ, ioAC3D, ioPLY, ioMD2.
- Autodesk 3DS loader class cleaned and exposed in the vl3DS module to be directly used or enhanced by the user.
- Simplified/unified render states management: RenderStates, ClipPlanes, Light, TextureUnit.
- New more flexible texture render states: TexGen, TexEnv, TextureMatrix.
- Lazy allocation of RenderStateSet, EnableSet, UniformSet: uses less memory and object creation/deletion is much quicker.

GEOMETRY

- GPUBufferInterfaceAbstract new methods: computeBoundingBox(), computeBoundingSphere(), transform() and normalize(). Now you can perform all this operations in a GPU-buffer-type-and-layout agnostic way!
- Geometry primitives quality updates: uses quads instead of triangles when possible, topological fixes for better normal computation.
- Geometry primitives: draw elements commands minimized and optimized.
- Geometry::computeNormals() now supports all vertex formats and layouts!
- Geometry::computeNormals() now supports all the main primitive types: triangles, triangle fan, polygon, quads, tri strips, quad strips!
- Geometry::shrinkDrawElements() bug fixes.

DEMOS/TESTS

- New demo App_VectorGraphics showing how to use VectorGraphics and VectorGraphicsScene.
- New demo App_Terrain using the Terrain scene manager.
- New test/demo App_Lights: shows how to implement moving colored lights like spot-lights, directional lights, point lights, lights following the camera.
- App_VolumeRendering enhanced: allows drag&drop of volume data and the energy threshold can be interactively adjusted with the mouse wheel.
- New demo App_GLSLImageProcessing: shows how use GLSL to implement some image processing effects.
- New demo App_Deformer: shows how to implement a 2D application that loads an image and let the user interactively deform it!
- New demo App_Fractals: a GPU accelerated interactive fractal navigator!
- App_ModelViewer demo enhanced: massive code cleanup; camera centers the view to the model; automatic near/far clipping planes adjustment, nicer trackball panning and zooming.
- New App_VertexFormat: shows several ways to layout vertex data and. how to use it in VL. VL support data layout in both Structure-Of-Array. and Array-Of-Structures form, spanning a single or multiple buffers!
- New test App_ImageFunctions: tests image type/format conversion, nearest and bilinear sampling, loading and saving in JPG, PNG, TGA, TIFF formats.
- MorphingActor test simplified and enhanced to show multiple animations.
- App_Texturing test: now is a unified test checking 2D textures, 3D textures, 1D texture arrays, 2D texture arrays, texture rectangle, cubemap environment mapping, sphere mapping.

MISC

- CMake building: many optional modules to minimize compilation time and library size.
- Support to the GL_ATI_texture_float extension for backwards compatibility.
- OpenGLContext's non-continuous update is much more CPU friendly.
- Uniform setup bug fixes and performance enhancements.
- GLSLProgram now can also have its own "static" Uniforms.
- VL containers use the "at()" semantics to stay closer to the STL look'n'feel.
- Bounding sphere and bounding box management: simplified, enhanced, bug fixes.
- Scene managers bounding sphere, bounding box, and culling: now the rendering is able to optionally cull whole scene managers.
- Current-lod property made a render-time transient variable.
- Better definition and splitting of non-const and const rendering operations.
- get/goc semantics for Shaders and Uniforms: a method starting with "get" will never create the object requested, methods starting with "goc" (= get-or-create) will create the resource if it doesn't exist.
- Qt4, SDL, Win32 keyboard management fixes when pressing keys like CTRL.
- Text: fix when rendering empty lines.
- Text: 2d text now can seamlessly interact with 3D objects and be rendered. in front or behind the other 3D objects.
- Actor z-sorting now works also when the bounding box is null.
- Added support to glStencilOpSeparate().
- Added support to glStencilFuncSeparate().
- Added support to glStencilMaskSeparate().
- Added the new Clear class (Renderable) to clear buffers during the rendering.
- Removed deprecated camara/viewport binding to OpenGLContext.
- New Scissor class: scissor clipping support for Actors, Effects and vector graphics. The Scissor class lets you define a rectangular aread clipped against the Viewport within which the rendering will be performed.
- New RectI and RectF classes to manipulate rectangular regions.
- Framebuffer Objects fixes and improvements.
- New Collection class: managing groups of objects is more robust and closer to the C++ STL spirit.
- New object oriented battery test framework
- GLUT, WIN32, SDL, QT4 examples updated
- Fixed mouse visibility bug under Win32
- KdTree is now a subclass of BoundingBoxTree
- KdTree compilation time 4.3x faster
- Fixed culling for objects with Null bounds
- Terrain scene manager is now based on the KdTree scene manager
- TextStream reads UTF8 encoded strings
- String::trim() functions improved
- String::replace() functions improved
- OpenGL extensions management greatly improved: wider compatibility, optimal use of the available extensions
- Win32 GUI bindings: better support for fullscreen mode, support for top and child windows, many fixes and improvements.

Visualization Library Alpha 2.1 (12th Jan 2009)

- VBO usage and creation bug fixes.
- GLSLProgram and GLSLShader documentation and pointers to the reference manual.
- version string and build number put into version.hpp.
- merged TextStream and TokenStream classes.
- simplified GLCHECK() macro usage.
- GLSL temporarily removed binding maps.
- render states constness fixes.
- removed deprecated Actor::prepareForRendering() callback.
- updated MorphingActor and MD2 loader.
- ActorRenderingCallback for morphing actor and polygon depth sorting.
- removed deprecated specific Actors for morphing and point splatting.
- generalized depth sorting callback supporting points, lines, triangles and quads.
- improvements to the constness of the objects during the rendering.
- added FontManager class.
- removed deprecated RenderStream systems.
- texture SetupParams more flexible and documented.
- removed deprecated math classes and tests.

Visualization Library Alpha 2 (6th Jan 2009)

- faster and lighter rendering architecture (deprecated scene-graph system).
- Unicode String class.
- Virtual file system.
- geometry shaders.
- GLSL 1.30 support.
- most of OpenGL 3.0 extensions support.
- Win32 and QT4 bindings.
- new OBJ importer and much better 3DS importer.
- CMake building system.
- Documentation updates.

Visualization Library Alpha 1 (7th May 2008)

- KdTree.
- OpenGL 1.1 - 2.1 support.
- OpenGL Shading Language.
- VBO, PBO, MRT.
- Image class, support to BMP, DDS, TIFF, TGA.
- Multipassing and LOD.
- FreeType based text rendering engine.
- Transform trees and billboards.
- 3DS, PLY, AC3D, MD2 importers.
- GLUT and SDL bindings.

Visualization Library v2009.07 Reference Documentation
Copyright 2005-2009 Michele Bosi. All rights reserved.
Updated on Mon Aug 10 21:41:30 2009.
Permission is granted to use this page to write and publish articles regarding Visualization Library.