public class SoVolumeIsosurface extends SoVolumeShader
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.
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.
File format/default:
VolumeIsosurface {
isovalues | [] |
SoGLRenderAction
Sets volume isosurface parameters in the traversal state.
See also:
SoVolumeRender
, SoVolumeShader
, SoVolumeRenderingQuality
, SoPreferences
SoVolumeShader.ShaderPositions
SoShaderProgram.GeometryInputTypes, SoShaderProgram.GeometryOutputTypes
Inventor.ConstructorCommand
Modifier and Type | Field and Description |
---|---|
SoMFFloat |
isovalues
Specifies the list of isovalues to display.
|
CLIPPING_FUNCTION, CUSTOM_SHADER, DATA_COMBINE_FUNCTION, forVolumeOnly, FRAGMENT_COMPUTE_COLOR, FRAGMENT_MAIN, GEOMETRY_MAIN, GET_DATA_FUNCTION, interpolateOnMove, raycasting, VERTEX_MAIN, VERTEX_POSTPROCESSING
bufferObjects, generateTransparency, geometryInputType, geometryOutputType, LINE_STRIP_OUTPUT, LINES_INPUT, maxGeometryOutputVertices, patchLength, POINTS_INPUT, POINTS_OUTPUT, shaderObject, shadowShader, TRIANGLE_STRIP_OUTPUT, TRIANGLES_INPUT, vertexProgramTwoSide
VERBOSE_LEVEL, ZeroHandle
Constructor and Description |
---|
SoVolumeIsosurface()
Constructor.
|
isSupported, isSupported
getFragmentShader, getGeometryShader, getNumReservedTextures, getTessellationControlShader, getTessellationEvaluationShader, getVertexShader, setFragmentShader, setFragmentShader, setGeometryShader, setGeometryShader, setTessellationControlShader, setTessellationControlShader, setTessellationEvaluationShader, setTessellationEvaluationShader, setVertexShader, setVertexShader
affectsState, callback, copy, copy, distribute, doAction, getAlternateRep, getBoundingBox, getByName, getMatrix, getPrimitiveCount, getRenderUnitID, GLRender, GLRenderBelowPath, GLRenderInPath, GLRenderOffPath, grabEventsCleanup, grabEventsSetup, handleEvent, isBoundingBoxIgnoring, isOverride, pick, rayPick, search, setOverride, touch, write
copyFieldValues, copyFieldValues, enableNotify, fieldsAreEqual, get, getAllFields, getEventIn, getEventOut, getField, getFieldName, hasDefaultValues, isNotifyEnabled, set, setToDefaults
dispose, getEXTERNPROTO, getName, getPROTO, isDisposable, isSynchronizable, setName, setSynchronizable
getAddress, getNativeResourceHandle, startInternalThreads, stopInternalThreads
public final SoMFFloat isovalues
Generated on January 23, 2025, Copyright © Thermo Fisher Scientific. All rights reserved. http://www.openinventor.com