Isosurface property node More...
#include <VolumeViz/nodes/SoVolumeIsosurface.h>
Public Member Functions | |
virtual SoType | getTypeId () const |
SoVolumeIsosurface () | |
Static Public Member Functions | |
static SoType | getClassTypeId () |
Public Attributes | |
SoMFFloat | isovalues |
This property node causes subsequent SoVolumeRender nodes to draw isosurfaces instead of classical volume rendering of the volume data defined by the current SoVolumeData.
This is functionally equivalent to using an SoVolumeDataDrawStyle node with the style field set to ISOSURFACE, but is much simpler when you only need to display an iso surface.
The isosurfaces are only rendered, not geometrically computed. So it is not possible to directly get the geometry corresponding to the rendered isosurface. (The MeshViz extension includes algorithms to extract an isosurface as geometry, see MoMeshIsosurface.)
The isovalues to display are specified in the isovalues field.
You may not use both SoVolumeShader and SoVolumeIsosurface with the same SoVolumeRender node. However since Open Inventor 7.1 it is possible to use both SoVolumeRenderingQuality and SoVolumeIsosurface with SoVolumeRender.
Remember this is a shader node. The effect will usually be undesirable if it is applied to standard geometry (polygons, lines, etc). Therefore applications should generally keep the volume visualization nodes and standard geometry nodes separate in the scene graph (i.e. under different SoSeparator nodes).
The multiple fields SoMaterial::diffuseColor, SoMaterial::transparency, SoMaterial::specularColor, and SoMaterial::shininess of the current SoMaterial specify the material of each isosurface. All isosurfaces share the first SoMaterial::specularColor and SoMaterial::shininess. The first material will be for the first isosurface, the second material for the second isosurface, and so on.
Surfaces are lighted with the first directional light found in the scene graph. No other lights affect the isosurface. Note: The isosurfaces are always lighted, regardless of the value of the SoVolumeRenderingQuality lighting and deferredLighting fields.
The isosurface displays the boundary between 2 different values, similar to the marching cubes algorithms. In other words, a voxel is part of the isosurface if the ray entry and exit values for the voxel are different and include the specified isosurface value in their range. If you render, for example, the isosurface 100 of a volume data containing the value 100 everywhere, nothing will be rendered.
Because of linear interpolation, basic isosurface may not render correctly on segmented dataset like label field. In this case, you should use the SoVolumeRenderingQuality::segmentedInterpolation or SoVolumeRenderingQuality::colorInterpolation fields. Default Linear interpolation may also generate rough result even for scalar datasets. For a smoother surface, you may have to use cubic interpolation. Please refer to SoVolumeShape::interpolation for details.
Because this node is derived from SoVolumeShader, IVVR_FIRST_RESERVED_TEXTURE_UNIT applies to it. See SoVolumeShader for more information.
Note: The volume size and orientation (like geometry) can be modified by transformation nodes in the scene graph and this in turn modifies the appearance of volume rendering nodes like SoVolumeIsosurface. However the same transformation must be applied to the volume data node and all volume rendering nodes associated with that volume. So effectively any transformation nodes that affect the volume must be placed before the volume data node.
isovalues | [] |
SoVolumeRender, SoVolumeShader, SoVolumeRenderingQuality, SoPreferences
SoVolumeIsosurface::SoVolumeIsosurface | ( | ) |
Constructor.
static SoType SoVolumeIsosurface::getClassTypeId | ( | ) | [static] |
Returns the type identifier for this class.
Reimplemented from SoVolumeShader.
virtual SoType SoVolumeIsosurface::getTypeId | ( | ) | const [virtual] |
Returns the type identifier for this specific instance.
Reimplemented from SoVolumeShader.
Specifies the list of isovalues to display.