The following document contains the release notes for the latest minor release 10.5.0 (February 2020).
Because Open Inventor 10 was a major step in the history of the SDK, please refer to the upgrade path documentation to get all the needed information and be sure you’re application is ready to be ported on his version of Open Inventor.
Important note: Since Open Inventor patch release 10.2.1, the DLLs and executables in the Open Inventor SDK are digitally signed for security. This should also avoid warning messages from anti-virus software.
See below the complete list of enhancements, new features included and old features removed in Open Inventor 10.5
Open Inventor Java Headless build
Introduced in Open Inventor 10.2 and 10.3 for C++, this package is now available also in Java. It provides an implementation of Open Inventor specifically for “headless ” server machines and uses the EGL library, allowing Open Inventor applications to run without starting an X Server (X11).
Compared to the standard package, two limitations remain:
- No viewers are provided so RemoteViz must be used
- Standard example programs, except for RemoteViz, are not provided. If you need examples for Open Inventor, VolumeViz, etc. please also download the standard SDK package
- Some Open Inventor extensions are not provided:
- Medical Library
Open Inventor Java Headless build can be downloaded from the download page.
Is a new rendering action providing a modern way of highlighting selected objects in a scene by drawing very efficiently an halo around their external contour, as shown by the following picture.The color, size, and smoothing of the Halo can be customized using functions
setHaloColor (const SbColor &color),
setHaloWidth (int width)and
setHaloSmoothFactor (float smoothFactor). It is also possible to make the halo always visible, even if the selected shape is in the back of the scene. This is done by calling the method
void setHaloAlwaysVisible (bool alwaysVisible)with alwaysVisible set to TRUE.
- C++: in $OIVHOME/examples/source/Inventor/Features/Highlight/HaloHighlight
- Java: in $OIVJHOME/examples/inventor/advanced/haloHighlight
- .NET: in $OIVNETHOME/examples/source/Inventor/HaloHighlight
Finally a new abstract class SoHighlightRenderAction(C++|Java|.Net) has been added with all highlight rendering actions (SoHaloHighlightRenderAction, SoBoxHighlightRenderAction and SoLineHighlightRenderAction) inheriting from it.
- SoViewingCube(C++|Java|.Net) (Preview Feature)
The viewing cube is a new viewer components node a very convenient way for users to interact with the scene camera. Clicking on any part of the viewing cube makes the camera rotate around its current focal point until the camera is facing the corresponding part of the scene. The viewing cube provides the same functionality as the “axis aligned view” buttons seen in many user interfaces. Of course, the user can still manipulate the scene freely and the viewing cube will always represent the current orientation of the scene camera. The API, through different fields, offers several possibilities of customization:
- selectionColor : can be used to change the color of the selected part of the viewing cube
- position : allows to position the viewing in different location in the viewer (TOP/BOTTOM – LEFT/RIGHT)
- edgeStyle : allows to change the shape of edges (ROUND, FLAT or CORNER)
- facePos/Neg[X|Y|Z] : can be used to set different textures on each face of the viewing cube
- edgeSize : can be used to change the size of each edges (size of edges cannot exceed 25% of the size of a face)
- animationDuration : allows to change the motion animation duration between two position
- size : allows to set the size of the viewing cube
See below the result of different customization
Faces customization – facePos/Neg[X|Y|Z] Edge Style configurations – edgeStyle Color customization – selectionColor
- SceneOrbiter(C++|Java|.Net) (Preview Feature)
Is a new viewer components tool for easily building an Open Inventor application whose main behavior is an orbiting displacement around the center of the scene, without using existing viewer classes.
The SceneOrbiter(C++|Java|.Net) is an extension of the SceneInteractor node allowing camera and headlight manipulations like panning, zooming and orbiting. The ‘headlight’, i.e. an SoDirectionalLight node, is automatically aligned with the camera’s view direction. The new SoViewingCube(C++|Java|.Net) node is also added to the scene.One of the biggest advantages of the SceneOrbiter(C++|Java|.Net) compared to the classical Open Inventor viewers is that their is no need to press the ESC key to switch between the viewing mode and the picking mode.
The new demo (shown below) featuring the Scene Orbiter QtRenderAreaOrbiter in C++, WPFRenderAreaOrbiter in .NET and RenderAreaOrbiter in Java (in swt/glcanvas/renderareaorbiter folder) shows the result of this interaction simplification allowing some smooth manipulations of any element in the scene. Moreover, the mouse management is a little bit different from what was usually done in classical viewers.
- Left Mouse: Rotate the scene
- Left Mouse + Ctrl: Pan the scene
- Left Mouse + Shift: Zoom in/out
- Mouse Wheel: Zoom in/out. Please keep in mind the zoom center is the mouse cursor location
- Compatibility Change : QWindow (C++)
Starting with Open Inventor 10.5, RenderArea class in Inventor/ViewerComponents/Qt inherits from QWindow instead of QOpenGLWidget in order to support OpenGL stereo (aka Raw stereo) in Qt. This change introduces following API modifications
- RenderArea::resizeGL() has been removed and is replaced by RenderArea::resizeEvent()
- Calls to RenderArea::paintGL() must be replaced by RenderArea::exposeEvent( QExposeEvent* e )
- RenderArea::saveRenderArea() and RenderArea::restoreRenderArea() are now deprecated and will have no effect
Finally QWidget* RenderArea::getContainerWidget() has been added and can be used to insert a RenderArea in any application (by calling, for instance, window->setCentralWidget(renderArea->getContainerWidget())
For classical viewers, only method SoQtGLWidget::getFrameBufferObjectId() is now deprecated as it is now useless.
All these modifications can be seen in Inventor/ViewerComponents/Qt code that is publicly available in any package you may have downloaded.
- The time to render the first frame optimization
Several optimizations have been done in Open Inventor 10.5. The time to render the first frame of a large scene graph containing many shapes has been reduced significantly on supported Linux platforms. With a model containing ~44k shapes, time to render the first frame has been cut, on CentOS 7|gccc 4.8, from 28s in Open Inventor 10.4 to 18s on Open Inventor 10.5 and from 20s to 15s on Ubuntu 18.04|gcc7.
- Visual Studio 2015 Update3
An important and very old C++ compiler has been fixed in update 3 of Visual Studio 2015. As a consequence Open Inventor Visual Studio 2015 (VC14) package available in download page is built using this update of the compiler. It is now mandatory to have this update installed if you plan to use this version of Open Inventor
- GPU Picking enhancement
Until this version GPU picking was possible only when a null picking radius was used. This limitation has been removed in Open Inventor 10.5, and GPU picking is now possible even with a picking radius greater than 0 is used. Other limitations remain for now, please see documentation of SoRayPickAction(C++|Java|.Net) for additional information.
- Binary messages between client and service
RemoteViz Client and RemoteViz Service are now able to exchange binary encoded messages, which can be useful when using tools like Protocol Buffers or Apache Thrift.From an API point of view, this new feature has following impacts
- New versions of the methods
- Compatibility Break
onInitializedClientmethod from class ServiceListener has a new signature with parameter
NetworkPerformance* networkPerformancenow declared const. This means that if your application uses this function, you may have to update it to do the correct call and avoid compilation errors.
- New versions of the methods
- New PENDING_NETWORK_CALIBRATION event
In previous version of RemoteViz, only the connection performing the network calibration with a client was notified of bandwidth and latency values. Because all connections of the client have to be notified this new event has been added during the connection process. It is raised when a connection waits for the calibration result while it is being performed by another connection with the same client.
- NVIDIA GPU Kepler or higher, CUDA Toolkit 10.1 (9.2 previously) or higher and driver version 418.96 or higher on Windows / driver version 418.39 or higher on Linux is now recommende
- Elastic Registration
The SoElasticRegistrationProcessing2d(C++|Java|.Net) engine computes the optimal elastic transformation to register a model (moving) image on a reference (fixed) image. This algorithm outputs two images:
- A displacement field where each pixel represents a displacement vector to apply on the model image to register it on the reference
- The registered image which is obtained by resampling the model image according to the displacement field
Its implementation relies on the non-rigid registration demon algorithm detailed in the publication: Jean-Philippe Thirion. Image matching as a diffusion process: an analogy with Maxwell’s demons. Medical Image Analysis, Elsevier, 1998, 2 (3), pp.243-260.
Elastic registration (A) Reference image. (B) Model image with synthetic distortions. (C) Model registered on the reference image. (D) Displacement field magnitude.