Open Inventor supplies a set of classes designed for real-time rendering of very large models. These tools can be divided into several categories:
Geometry simplification | Also known as mesh decimation, this technique allows parts of the geometry (triangles) to be removed from the shape before sending it to the graphics pipeline. The level of decimation (number of resulting triangles) can be controlled by the user. |
Automatic level of detail | Open Inventor already includes an LOD node (SoLOD SoLOD SoLOD ). The geometry simplification feature allows Open Inventor to automatically build different levels of decimation as children of LOD nodes. |
Level of simplification node | This is a specialized LOD that also stores the decimation percentage for each child, which makes it very useful for maintaining frame rate. |
Adaptive viewer | The Open Inventor viewers have been extended to have a target frame rate. The viewer can force LOD and level of simplification nodes to use lower or higher levels of decimation. |
Get primitive count action | This action (SoGetPrimitiveCountAction SoGetPrimitiveCountAction SoGetPrimitiveCountAction ) returns the number of triangles, lines, etc. in a scene graph or a path. |
Using multiple threads in an application can increase overall performance by making use of multiple processors, or better use of a single processor. This also enables use of multiple graphics pipes. Now, multiple graphics windows can each have their own rendering thread, multiplethreads can simultaneously traverse the same scene graph, and modification and traversal of the scene graph can safely occur in different threads. Open Inventor can also be used in immersive VR applications based on tools like CAVELib™ and Multipipe SDK™.Chapter 23, Multithreading, gives you full details on multithreading.
The SoTrackerEvent SoTrackerEvent SoTrackerEvent and SoControllerButtonEvent SoControllerButtonEvent SoControllerButtonEvent classes have been designed to be useful in immersive VR applications that use tracking. For instance, a “wand” device can generate SoTrackerEvents when moving and SoControllerButtonEvents when a button is pressed. All classes that respond to SoMouseButtonEvent SoMouseButtonEvent SoMouseButtonEvent (i.e., SoSelection SoSelection SoSelection , SoExtSelection SoExtSelection SoExtSelection , etc.) also respond to SoControllerButtonEvents. All dragger classes also respond to SoTrackerEvents and SoControllerButtonEvents. So, for example, a wand input device can be used to interact with draggers and manipulators in an immersive environment. Chapter 25, Immersive Virtual Reality discusses these events.
Open Inventor supports detection of collisions between the viewer (camera) and the scene, collisions between objects in the scene, as well as collsions between two scene graphs, one moving and one static. The following classes have been added to handle these kinds of collisions:
Prevents the camera from penetrating walls, floors, or other objects, making viewer control much more comfortable and realistic (“solid” camera). | |
SoIntersectionDetectionAction SoIntersectionDetectionAction SoIntersectionDetectionAction | Analyzes a scene graph (or subgraph) to detect whether shapes are intersecting, and optionally return the intersections to the application. |
Performs very fast collision detection for the specific case of two scene graphs, one static, and one moving. This class has been designed to detect collisions between very large scenes (i.e., containing millions of triangles) while still allowing interactive display of the two scenes. You can retrieve information about colliding triangles, coordinates of common points, and so forth. This is useful, for example, for walk-through of a complex factory environment. |
Chapter 22, Collision Detection explains how to use these classes.
Open Inventor supports high quality stereo projection with different types of stereo modes to render your virtual model with high realism. Software stereo is supported as well as hardware stereo (OpenGL stereo). Furthermore, a new graphical user interface dialog box, accessible from the Stereo menu item of the viewer popup menu, allows the user to interactively select the stereo mode and make adjustments to various stereo parameters.Chapter 19, Stereo Viewing , describes how to use and configure these different stereo types.
Open Inventor provides support for programmable vertex, geometry, and fragment (pixel) shaders, allowing you to take advantage of the latest generation of graphics cards to produce more advanced real-time rendering effects.
Programming in the following languages is supported (depending, of course, on support for these shader languages by your graphics card):
OpenGL Shading Language (GLSL)
The following classes provide support for programmable vertex, geometry and fragment shaders:
SoShaderObject SoShaderObject SoShaderObject (abstract)
SoVertexShader
SoGeometryShader
SoFragmentShader
SoShaderParameter (and subclasses)
SoShaderProgram
The basic approach is to:
Write your shader code and load it into a SoVertexShader and/or SoGeometryShader and/or SoFragmentShader node. Use SoShaderParameter to set parameters (float, integer, vector, etc.) as necessary.
Combine your shaders into an SoShaderProgram SoShaderProgram SoShaderProgram . They should be directly referenced by the multiple field SoShaderProgram::shaderObject.
Insert this SoShaderProgram SoShaderProgram SoShaderProgram object in your scene graph above above the shapes in the scene graph that should be affected by it
Chapter 21, Shaders deals with this topic.
Remote rendering allows an Open Inventor application to both execute and render on a remote server machine. Only the optimized and compressed rendered images are sent to the local machine. This allows very large data sets to be centralized and handled on a machine with more memory, processors, and graphics hardware.
Chapter 26, Remote Rendering deals with this extension.
In addition to the actions for large model visualization and collision detection, the following new actions are available:
SoBevelAction SoBevelAction SoBevelAction : Creates a scene graph containing beveled shapes.
SoToHTMLAction SoToHTMLAction SoToHTMLAction : Generates an HTML image map and an image from a scene graph.
SoSplitGeometryAction SoSplitGeometryAction SoSplitGeometryAction : Splits SoIndexedFaceSet SoIndexedFaceSet SoIndexedFaceSet or SoIndexedTriangleStripSet SoIndexedTriangleStripSet SoIndexedTriangleStripSet shapes spatially in one, two, or three dimensions.
Open Inventor has followed the evolution of graphics boards and OpenGL in terms of texturing support. Furthermore, numerous other features have been added to provide more flexibility and improve performance. The following features have been added:
Multitexture support: SoTextureUnit SoTextureUnit SoTextureUnit .
3D texture support: SoTexture3 SoTexture3 SoTexture3 , SoTextureCoordinate3 SoTextureCoordinate3 SoTextureCoordinate3 , SoTexture3Transform SoTexture3Transform SoTexture3Transform .
Cube map texture support: SoTextureCubeMap SoTextureCubeMap SoTextureCubeMap .
Access to the texture matrix: SoTextureMatrix SoTextureMatrix SoTextureMatrix .
Anisotropic filtering: SoTexture::maxAnisotropy.
Texture compression: SoTexture::enableTextureCompression.
Sub texturing support: SoSFImage::setSubValues() and SoSFImage3::setSubValues().
Texture filtering control: SoTexture::minFilter and SoTexture::magFilter.
Texture borders support: SoTexture::enableBorder and SoTexture::borderColor.
New texture wrapping modes: SoTexture::CLAMP_TO_BORDER, SoTexture::CLAMP_TO_EDGE, SoTexture::MIRRORED_REPEAT.
New texture-coordinate functions:SoTextureCoordinateNormalMap SoTextureCoordinateNormalMap SoTextureCoordinateNormalMap , SoTextureCoordinateReflectionMap SoTextureCoordinateReflectionMap SoTextureCoordinateReflectionMap , SoTextureCoordinateObject SoTextureCoordinateObject SoTextureCoordinateObject .
New texture models and programmable texture models to better control how texture map are combined with underlying colors: SoTexture::REPLACE, SoTexture::ADD, SoTexture::COMBINE, and SoTextureCombiner SoTextureCombiner SoTextureCombiner .
Texture 2D node which manages the memory consumption and asynchronous texture loading: SoExtTexture2 SoExtTexture2 SoExtTexture2 .
Sharing textures between different OpenGL contexts.
Support for sending non-power-of-two textures directly to OpenGL (if the OpenGL NPOT extension is supported by the graphics card) (SoTexture SoTexture SoTexture ).
Support for mipmap generation in the graphics hardware (if supported by OpenGL on the graphics card) (SoTexture::useAutoMipmap).
Support for reading DDS format files (SoTexture2 SoTexture2 SoTexture2 , SoTextureCubeMap SoTextureCubeMap SoTextureCubeMap , SoExtTexture2) (if supported by OpenGL on the graphics card)
SoRenderToTextureProperty SoRenderToTextureProperty SoRenderToTextureProperty : Render to texture capability for SoTexture2 SoTexture2 SoTexture2 and SoTextureCubeMap SoTextureCubeMap SoTextureCubeMap .
Floating point texture formats for SoTexture2 SoTexture2 SoTexture2 and SoTextureCubeMap SoTextureCubeMap SoTextureCubeMap (if supported by OpenGL on the graphics card).
SoIndexedTexture2 SoIndexedTexture2 SoIndexedTexture2 : Specifies a 2D texture and associated parameters for texture mapping (using indexed colors)
SoColorMap SoColorMap SoColorMap : Used with indexed textures.
When creating your application with Open Inventor, you may need to use external dynamic libraries for specific purposes. However, the need for these libraries can depend on the use of the application. In order to save memory and loading time at start-up, you can load these dynamic libraries “on the fly” only when required.
The class SoDynamicLibManager manages the loading and the unloading of a dynamic library (cross-platform). You can query the list of all loaded libraries or whether a specific library is currently loaded. You can also inquire whether a specific library supports a particular function.
This class is used by Open Inventor to load the following libraries: Zlib, libJpeg, libTiff, libPng, libJasper, OpenAL (Windows only), FreeType.
The library name given to the load method can include an absolute or relative path. If no path is supplied, the library will be searched for in the following paths:
Windows: The application directory, the current directory, the system directory, the Windows directory, %PATH%, and %OIV_LD_LIBRARY_PATH% (single path).
Unix: $LD_LIBRARY_PATH, $OIV_LD_LIBRARY_PATH (single path).
Mac OS: $DYLD_LIBRARY_PATH, $OIV_LD_LIBRARY_PATH (single path).
In addition to the extension nodes mentioned previously, the following new nodes have been added by FEI:
SoAnnoText3 SoAnnoText3 SoAnnoText3 ,SoAnnoText3Property SoAnnoText3Property SoAnnoText3Property : Annotation text node combining SoText2 SoText2 SoText2 and SoText3 SoText3 SoText3 properties.
SoBackground, SoGradientBackground, SoImageBackground: Nodes to apply a background to a scene.
SoClipPlaneManip SoClipPlaneManip SoClipPlaneManip : Manipulator for clipping plane node (SoClipPlane SoClipPlane SoClipPlane ).
SoExtSelection SoExtSelection SoExtSelection : Selection node that supports lasso selection.
SoExtrusion SoExtrusion SoExtrusion : Creates a geometric shape based on a 2D cross section along a 3D spine.
SoFullSceneAntialiasing SoFullSceneAntialiasing SoFullSceneAntialiasing : Property node to control the antialiasing of shapes.
SoImage SoImage SoImage : Displays a 2D screen-aligned image.
SoIndexedPointSet SoIndexedPointSet SoIndexedPointSet : Same as SoPointSet SoPointSet SoPointSet , except using indexed coordinates.
SoNurbsBoundary SoNurbsBoundary SoNurbsBoundary and SoNurbsGroup SoNurbsGroup SoNurbsGroup : Used for “crack-free” NURBS tessellation.
SoNurbsProperty SoNurbsProperty SoNurbsProperty : Specifies new NURBS attributes.
SoMarkerSet SoMarkerSet SoMarkerSet : Extension of Point Set that draws a small bitmap (symbol) at each 3D location.
SoIndexedMarkerSet SoIndexedMarkerSet SoIndexedMarkerSet : Same as SoMarkerSet SoMarkerSet SoMarkerSet , except using indexed coordinates.
SoPattern SoPattern SoPattern : Specifies a pattern style for filling polygonal shapes.
SoPolygonOffset SoPolygonOffset SoPolygonOffset : Encapsulates the OpenGL 1.1 polygon offset feature.
SoTextProperty SoTextProperty SoTextProperty : Property node to control horizontal and vertical justification, orientation, as well as kerning.
DialogViz (see Chapter 29, Portable User Interface - DialogViz ) provides a platform-independent user interface toolkit.
The Magellan 3D input device from Logitech is supported.
New transparency modes were added to SoGLRenderAction SoGLRenderAction SoGLRenderAction , improving the rendering quality of translucent objects: SORTED_TRIANGLES_ADD, SORTED_TRIANGLES_BLEND,SORTED_OBJECT_TRIANGLES_ADD, SORTED_OBJECT_TRIANGLES_BLEND,SORTED_LAYERS_BLEND, DELAYED_SORTED_LAYERS_BLEND.
Ability to generate MPEG video files using the classes SoMPEGRenderer SoMPEGRenderer SoMPEGRenderer ,SoMPEGNavRenderer SoMPEGNavRenderer SoMPEGNavRenderer , and SoMPEGFrameRenderer SoMPEGFrameRenderer SoMPEGFrameRenderer (see Section 13.2, “MPEG Renderer”).
Text extensions improving rendering quality and performance:
Annotation text,
Stroke (vector) 3D text,
Rendering mode for 3D text (outline and texture),
Text string orientation (left-to-right, top-to-bottom, etc.),
Horizontal and vertical justification,
Kerning.
See Chapter 6, Text).
Ability to read additional image formats used by SoTexture2 SoTexture2 SoTexture2 (and other classes).
Off-screen rendering enhancements (SoOffscreenRenderArea SoOffscreenRenderArea SoOffscreenRenderArea ):
Ability to write additional image formats.
Ability to render very large off-screen images.
Pbuffer support to improve rendering speed and quality (the resulting image is more likely to match the on-screen image).
Ability to share OpenGL contexts to improve the rendering speed and reduce memory consumption.
Double precision data types. All the Sb math classes now have double precision equivalents. For example, Open Inventor had the class SbVec3f SbVec3f and now it also has SbVec3d SbVec3d . In addition, the floating point fields now have double precision “set” methods as a convenience, e.g. SoSFRotation::setValue(SbVec3d,double). However, single precision is still used for the traversal state and rendering.
Support for multi-byte characters (MBCS). This allows, for example, use of the Kanji character set for Japanese language. MBCS is supported throughout Open Inventor (for essentially all text nodes).
Support for Unicode encoding, allowing internationalization of text in a standard cross-platform fashion.
Open Inventor is localized for several languages including English, French, German, and Japanese. On Windows, regional setting parameters, and on Unix, a set of specific files, are used for setting labels of the viewer popup menu, thumb wheels, etc. in the selected language.
Many new demonstration programs are available for showing new Open Inventor features and useful tricks.
SoTrackFollower SoTrackFollower SoTrackFollower is an engine that animates along a track defined by control points. This feature can be used for animating a camera or an object. Section 15.10, “Track Follower Engine” describes this new engine.
Polygons with holes are supported by the SoIndexedFaceSet SoIndexedFaceSet SoIndexedFaceSet and SoFaceSet SoFaceSet SoFaceSet shapes used in conjunction with the SoShapeHints node.the section called “Polygons with Holes” describes this new feature.
IvTune, an editor and viewer for optimizing and debugging Open Inventor scene graphs. Chapter 30, Optimizing Applications , discusses this helpful tool.
DXF, IGES, STEP, and CATIA 5 import supported (separately licensed).
SoGuiAlgoViewers , new API to create viewers from scratch. See the section called “ Custom viewers”.