OpenSceneGraph

From Wikipedia, the free encyclopedia
Jump to: navigation, search
OpenSceneGraph
Osglogo2.0.png
Stable release 3.2 / July 24, 2013; 11 months ago (2013-07-24)
Written in C++
Operating system Cross-platform
Type 3D graphics
License OpenSceneGraph Public License (LGPL based)
Website www.openscenegraph.org www.openscenegraph.com

OpenSceneGraph is an open source 3D graphics application programming interface,[1] used by application developers in fields such as visual simulation, computer games, virtual reality, scientific visualization and modeling.

The toolkit is written in standard C++ using OpenGL,[1] and runs on a variety of operating systems including Microsoft Windows, Mac OS X, Linux, IRIX, Solaris and FreeBSD. Since version 3.0.0, OpenSceneGraph also supports application development for mobile platforms, namely iOS and Android.

History[edit]

The OpenSceneGraph project was initiated by Don Burns in 1998. Robert Osfield joined the project during 1999, working on porting finished components for Microsoft Windows. The project went open source in September 1999 and the official project website was created. Towards the end of the year Osfield took over the project and began extensive refactoring of the existing codebase, putting emphasis on modernisation, embracing modern C++ standards and design patterns.

In April 2001, taking into account growing community of users and interest of public, Robert Osfield created OpenSceneGraph Professional Services, providing commercial support, consulting and training services. This marks full professionalization of the project.

The first official stable version of OpenSceneGraph was version 1.0, released in 2005. An extended version 2.0 followed in 2007, adding support for multi-core and multi-gpu systems, several important NodeKits and usage of unified multiplatform build system CMake. Books and user handbooks were introduced.[2]

The project has been quickly growing and becoming more popular ever since. There are more than 480 contributors signed under current stable version (3.0.1, released 31. July 2011), and the official mailing list contains thousands of names.[3]

Features[edit]

Overview of the openscenegraph architecture.

Features in version 1.0:[4]

  • A feature-rich and widely adopted scene graph implementation
  • Support for performance increasing features
    1. View frustum, small feature and occlusion culling
    2. Level of detail
    3. State sorting and lazy state updating
    4. OpenGL fast paths and latest extensions
    5. Multi-threading and database optimization
  • Support for OpenGL, from 1.1 through 2.0 including the latest extensions
  • Tightly coupled support for OpenGL Shading Language, developed in conjunction with 3Dlabs
  • Support for a wide range of 2D image and 3D database formats, with loaders available for formats such as OpenFlight, TerraPage, OBJ, 3DS, JPEG, PNG and GeoTIFF
  • Particle effects
  • Support for anti-aliased TrueType text
  • Seamless support for framebuffer objects, pbuffers and frame buffer render-to-texture effects
  • Multi-threaded database paging support, which can be used in conjunction with all 3D database and image loaders
  • Large scale, whole earth geospatial terrain paged database generation
  • Introspection support for core libraries allowing external applications to query, get, set and operate on all classes in the scene graph, via a generic interface
  • Multi-threaded and configurable support for multiple CPU/multiple GPU machines

Features in version 2.8.3[5]

  • Mac OS X 10.6 (Snow Leopard) support
  • ImageIO support on Mac OS X
  • 3DS file format export and file conversion
  • Integrated Autodesk FBX technology
  • Integrated FFmpeg support for displaying video file content in 3D applications.
  • PLY file format support

Features in version 2.8.4:[6]

  • VS2010 build support

Features in version 3.0.0:[7]

  • OpenGL ES 1.1, and OpenGL ES 2.0 support
  • OpenGL 3.x and 4.x support along with associated OpenGL extensions
  • Support for Android on tablets and phones
  • Support for IOS on tablets and phones (end users applications have already been accepted on the App Store)
  • Introduction of Present3D application for immersive 3D presentations
  • New extensible serializers that provide new .osgb binary, .osgt ascii and .osgx xml file native formats
  • New generalized serializable metadata architecture
  • New osgQt library that makes it straight forward to integrate !OpenSceneGraph with Qt, including web browsing via QWebKit.
  • New FBX plugin based on the Audodesk FBX DSK that enables reading of the .fbx 3D authoring and interchange format
  • New directshow plugin for handling movies under Windows
  • New pov plugin for exporting a scene to POV-Ray format, enabling use of POV-Ray to do photo-realistic ray tracing
  • New ply plugin for reading ply files
  • Revamped 3ds plugin for reading and writing of .3ds files
  • Revamped dxf plugin for reading and writing of .dxf files
  • Support for Cocoa and 64bit OSX build

Stable Version Release History[edit]

Version Release Date
2.0.0 June 15, 2007
2.2.0 October 4, 2007
2.4.0 April 25, 2008
2.6.0 August 5, 2008
2.6.1 October 2, 2008
2.8.0 February 12, 2009
2.8.1 May 19, 2009
2.8.2 July 28, 2009
2.8.3 April 5, 2010
2.8.4 April 11, 2011
2.8.5 June 6, 2011
3.0.0 June 28, 2011
3.0.1 July 31, 2011
3.2.0 July 24, 2013

Architecture[edit]

Library architecture can be separated into three main subsets — the core OpenSceneGraph library, osgViewer and a set of NodeKits.

Core[edit]

The base of OpenSceneGraph library can be further divided into four main modules.

osg[edit]

The core of OpenSceneGraph provides classes and methods for construction and manipulation of the scene graph. It contains classes representing various types of nodes, scene geometry, OpenGL state abstraction, geometric transformations, as well as mathematical classes for 2D and 3D vector and matrix operations. Advanced memory management is also included.

OpenThreads[edit]

The OpenSceneGraph project contains a threading library, OpenThreads, which is a lightweight cross-platform thread model. It is intended to provide a minimal and complete Object-Oriented (OO) thread interface for C++ programmers. It is loosely modeled on the Java thread API, and the POSIX Threads standards.

The architecture of OpenThreads is designed around "swappable" thread models which are defined at compile-time in a shared object library. It is of importance to note that while a factory pattern design could have been used to achieve the goal of generic interface, it would have required the programmer to allocate each of the 4 fundamental types (Thread, Mutex, Barrier, & Condition) on the heap. Due to the cost associated with heap allocation of the underlying concrete implementations of these constructs on some platforms, such allocation was deemed unacceptable at the time this library was originally written, and thus the factory pattern was not used.

Instead, a somewhat abstruse - but effective - technique was chosen to provide the necessary data/implementation hiding. This technique uses private void pointers to encapsulate object private data. The void pointers actually point at concrete data structures, but give a uniform interface to the dso.

The design goal of OpenThreads is to construct optimized implementations using platform optimized multi-processing constructs such as the sproc methods used on IRIX, and Windows threads.

osgUtil[edit]

osgUtil contains rendering backend functionality and utilities taking care of scene graph traversal, rendering optimisation and transforming the scene into a stream of OpenGL calls. It also provides means of basic interaction with scene, such as object picking.

osgDB[edit]

OpenSceneGraph also comes with a large collection of database loaders and many 2D/3D data formats manipulators. More than 50 different formats are supported - most common 3D data formats, such as COLLADA, LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio Max (.3ds), DirectX (.x) and many others. OpenSceneGraph also provides its own native ASCII .osg format. There are exporters into .osg format available for Blender, Maya and 3D Studio MAX.

Supported picture formats include .rgb, .gif, .jpg, .png, .tiff, .pic, .bmp, .dds, .tga a quicktime.

This module also provides I/O device abstraction.

osgViewer[edit]

osgViewer Library provides a quick and easy way of visualizing the graphics scene. It is also a platform-independent abstraction for various window system interfaces.

NodeKits[edit]

Project distribution also contains a variety of so-called NodeKits. These are solutions of common problems and frequently used more advanced 3D application components and graphics algorithms. Among the most significant are

  • osgAnimation — Skeletal models usage, animating and morphing.
  • osgFX — Special effects and image postprocessing.
  • osgManipulator — Interactive 3D scene manipulation.
  • osgParticle — Advanced particle system usage.
  • osgQt — Integration with Qt toolkit and incorporation of QtGUI elements into OSG applications.
  • osgShadow — Framework for shadow rendering techniques.
  • osgTerrain — Extensive terrain rendering.
  • osgText — Quality antialiased fonts, TrueType and FreeType font support.
  • osgVolume — Volume rendering and volumetric data manipulation.
  • osgWidget — Simple GUI creation.

Reception and adoption[edit]

OpenSceneGraph doesn't provide any functionality for higher "gaming" logic, it is a rendering-only tool. There are several full-scale engines for computer games (or so-called serious games) creation using OSG as a base of graphics rendering, the most common framework being Delta3D.

There is a great variety of software products built on top of OpenSceneGraph; among others, Virtual Terrain Project and ViewTec TerrainView. List of OSG users contains companies as Boeing, NASA, FlightGear, Norcontrol and many others.[8][9][10][11][12]

OpenSceneGraph is used by many online 3D scene viewers including Sketchfab and Clara.io.

See also[edit]

References[edit]

  1. ^ a b Anne Ruas, Christopher Gold (2008). Headway in Spatial Data Handling:13th International Symposium on Spatial Data Handling. Springer. p. 370. 
  2. ^ Martz, P.: OpenSceneGraph Quick Start Guide. Louisville, USA, 2007.
  3. ^ http://www.openscenegraph.org/projects/osg/wiki/Support/History
  4. ^ http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.9.6/NEWS.txt
  5. ^ http://www.openscenegraph.org/projects/osg/wiki/News/Press/OSG2.8.3
  6. ^ http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.8.4/NEWS.txt
  7. ^ http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-3.0.0/NEWS.txt
  8. ^ http://www.openscenegraph.com/index.php/gallery/use-cases
  9. ^ http://www.openscenegraph.org/projects/osg/wiki/Screenshots
  10. ^ http://vterrain.org/
  11. ^ http://www.viewtec.net/index.php?page=products
  12. ^ http://www.delta3d.org

External links[edit]