This example shows how to do MeshViz XLM rendering, including isosurfaces, using a regular volume mesh and a VolumeViz LDM data set as the scalar data set.
As a result it also shows how to implement a custom scalar data source using the MiScalardSetIjk interface and data that is stored in a completely different format (VolumeViz LDM tiled data).
VolumeViz is an effective, and very efficient, way to render a regular or rectilinear scalar data set using slices and/or direct volume rendering. However for some data sets, particularly medical and NDT, it is important to be able to use isosurfaces and other mesh rendering techniques. VolumeViz can render an isosurface using GPU shader programs and interactively change the iso-value. But this isosurface capability has limitations. It is not possible, for example to: extract the isosurface as geometry, to color the surface with another data set, etc. Since Open Inventor 7.2 release with MeshViz XLM this problem for C++ applications is solved.
With previous versions of MeshViz it was not possible to use a VolumeViz volume as a data set without making a complete copy of the data and converting to "float" data type. This was impractical because of the time required and/or the memory required. Now with MeshViz XLM we are able to access almost any data source without copying the data.
Performance of a debug build can be much slower than the release build. We believe this is due to error checking in the STL.
Color mapping: You may notice that the coloring of the VolumeViz and MeshViz slices is not exactly the same. This is because, by default, for an integer valued data set VolumeViz maps the full range of the data type into the color map. In our MeshViz code we query the actual range of data values in the volume. So, for example in the SYN_64 data set, VolumeViz maps 0..255 into the color map, while our MeshViz code maps 0..192 into the color map. We could fix this by using an SoDataRange node in the VolumeViz code or setting the MeshViz color map node's maxVal field to the data type max instead of the actual max.
MoMesh MoMeshViz MoScalarSetIjk MbVolumeMeshRegular MoMeshIsosurface MoMeshPlaneSlice MoMeshLogicalSlice MoMeshInterpolatedLogicalSlice MoPredefinedColorMapping
|