Coin3D is Free Software, published under the BSD 3-clause license. |
https://coin3d.github.io https://www.kongsberg.com/en/kogt/ |
Render the full volume. More...
#include <VolumeViz/nodes/SoVolumeRender.h>
Public Types | |
enum | Interpolation { NEAREST, LINEAR } |
enum | Composition { MAX_INTENSITY, SUM_INTENSITY, ALPHA_BLENDING } |
enum | NumSlicesControl { ALL, MANUAL, AUTOMATIC } |
enum | AbortCode { CONTINUE, ABORT, SKIP } |
typedef AbortCode | SoVolumeRenderAbortCB(int totalslices, int thisslice, void *userdata) |
Public Types inherited from SoShape | |
enum | TriangleShape |
Public Types inherited from SoNode | |
enum | NodeType |
Public Member Functions | |
void | setAbortCallback (SoVolumeRenderAbortCB *func, void *userdata=NULL) |
Public Member Functions inherited from SoShape | |
virtual SoType | getTypeId (void) const |
virtual SbBool | affectsState (void) const |
virtual void | notify (SoNotList *nl) |
virtual void | getBoundingBox (SoGetBoundingBoxAction *action) |
virtual void | callback (SoCallbackAction *action) |
virtual void | getPrimitiveCount (SoGetPrimitiveCountAction *action) |
const SoBoundingBoxCache * | getBoundingBoxCache (void) const |
Public Member Functions inherited from SoNode | |
void | setOverride (const SbBool state) |
SbBool | isOverride (void) const |
void | setNodeType (const NodeType type) |
NodeType | getNodeType (void) const |
virtual SoNode * | copy (SbBool copyconnections=FALSE) const |
virtual void | doAction (SoAction *action) |
virtual void | GLRenderBelowPath (SoGLRenderAction *action) |
virtual void | GLRenderInPath (SoGLRenderAction *action) |
virtual void | GLRenderOffPath (SoGLRenderAction *action) |
virtual void | getMatrix (SoGetMatrixAction *action) |
virtual void | handleEvent (SoHandleEventAction *action) |
virtual void | pick (SoPickAction *action) |
virtual void | search (SoSearchAction *action) |
virtual void | write (SoWriteAction *action) |
virtual void | audioRender (SoAudioRenderAction *action) |
virtual void | grabEventsSetup (void) |
virtual void | grabEventsCleanup (void) |
virtual void | startNotify (void) |
SbUniqueId | getNodeId (void) const |
virtual SoChildList * | getChildren (void) const |
virtual void | writeInstance (SoOutput *out) |
virtual SoNode * | addToCopyDict (void) const |
virtual void | copyContents (const SoFieldContainer *from, SbBool copyconnections) |
virtual SoFieldContainer * | copyThroughConnection (void) const |
Public Member Functions inherited from SoFieldContainer | |
void | setToDefaults (void) |
SbBool | hasDefaultValues (void) const |
SbBool | fieldsAreEqual (const SoFieldContainer *container) const |
void | copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE) |
SbBool | set (const char *const fielddata) |
void | get (SbString &fielddata) |
virtual int | getFields (SoFieldList &l) const |
virtual int | getAllFields (SoFieldList &l) const |
virtual SoField * | getField (const SbName &name) const |
virtual SoField * | getEventIn (const SbName &name) const |
virtual SoField * | getEventOut (const SbName &name) const |
SbBool | getFieldName (const SoField *const field, SbName &name) const |
SbBool | enableNotify (const SbBool flag) |
SbBool | isNotifyEnabled (void) const |
SbBool | set (const char *fielddata, SoInput *input) |
void | get (SbString &fielddata, SoOutput *out) |
virtual SbBool | validateNewFieldValue (SoField *field, void *newval) |
virtual void | addWriteReference (SoOutput *out, SbBool isfromfield=FALSE) |
SbBool | getIsBuiltIn (void) const |
virtual void | getFieldsMemorySize (size_t &managed, size_t &unmanaged) const |
void | setUserData (void *userdata) const |
void * | getUserData (void) const |
Public Member Functions inherited from SoBase | |
void | ref (void) const |
void | unref (void) const |
void | unrefNoDelete (void) const |
int32_t | getRefCount (void) const |
void | touch (void) |
SbBool | isOfType (SoType type) const |
virtual SbName | getName (void) const |
virtual void | setName (const SbName &newname) |
void | addAuditor (void *const auditor, const SoNotRec::Type type) |
void | removeAuditor (void *const auditor, const SoNotRec::Type type) |
const SoAuditorList & | getAuditors (void) const |
SbBool | shouldWrite (void) |
void | assertAlive (void) const |
Static Public Member Functions | |
static void | initClass (void) |
Static Public Member Functions inherited from SoShape | |
static SoType | getClassTypeId (void) |
static void | initClass (void) |
static void | getScreenSize (SoState *const state, const SbBox3f &boundingbox, SbVec2s &rectsize) |
static float | getDecimatedComplexity (SoState *state, float complexity) |
Static Public Member Functions inherited from SoNode | |
static uint32_t | getCompatibilityTypes (const SoType &nodetype) |
static SoType | getClassTypeId (void) |
static SoNode * | getByName (const SbName &name) |
static int | getByName (const SbName &name, SoNodeList &l) |
static void | initClass (void) |
static void | initClasses (void) |
static SbUniqueId | getNextNodeId (void) |
static int | getActionMethodIndex (const SoType type) |
static void | getBoundingBoxS (SoAction *action, SoNode *node) |
static void | GLRenderS (SoAction *action, SoNode *node) |
static void | callbackS (SoAction *action, SoNode *node) |
static void | getMatrixS (SoAction *action, SoNode *node) |
static void | handleEventS (SoAction *action, SoNode *node) |
static void | pickS (SoAction *action, SoNode *node) |
static void | rayPickS (SoAction *action, SoNode *node) |
static void | searchS (SoAction *action, SoNode *node) |
static void | writeS (SoAction *action, SoNode *node) |
static void | audioRenderS (SoAction *action, SoNode *node) |
static void | getPrimitiveCountS (SoAction *action, SoNode *node) |
Static Public Member Functions inherited from SoFieldContainer | |
static void | initClass (void) |
static SoType | getClassTypeId (void) |
static void | cleanupClass (void) |
static void | initCopyDict (void) |
static void | addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy) |
static SoFieldContainer * | checkCopy (const SoFieldContainer *orig) |
static SoFieldContainer * | findCopy (const SoFieldContainer *orig, const SbBool copyconnections) |
static void | copyDone (void) |
Static Public Member Functions inherited from SoBase | |
static void | initClass (void) |
static SoType | getClassTypeId (void) |
static void | addName (SoBase *const base, const char *const name) |
static void | removeName (SoBase *const base, const char *const name) |
static void | incrementCurrentWriteCounter (void) |
static void | decrementCurrentWriteCounter (void) |
static SoBase * | getNamedBase (const SbName &name, SoType type) |
static int | getNamedBases (const SbName &name, SoBaseList &baselist, SoType type) |
static SbBool | read (SoInput *input, SoBase *&base, SoType expectedtype) |
static void | setInstancePrefix (const SbString &c) |
static void | setTraceRefs (SbBool trace) |
static SbBool | getTraceRefs (void) |
static SbBool | connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname) |
static SbBool | readRoute (SoInput *input) |
Public Attributes | |
SoSFEnum | interpolation |
SoSFEnum | composition |
SoSFBool | lighting |
SoSFVec3f | lightDirection |
SoSFFloat | lightIntensity |
SoSFEnum | numSlicesControl |
SoSFInt32 | numSlices |
SoSFBool | viewAlignedSlices |
Public Attributes inherited from SoNode | |
INVENTOR | |
VRML1 | |
VRML2 | |
INVENTOR_1 | |
INVENTOR_2_0 | |
INVENTOR_2_1 | |
INVENTOR_2_5 | |
INVENTOR_2_6 | |
COIN_1_0 | |
COIN_2_0 | |
EXTENSION | |
COIN_2_2 | |
COIN_2_3 | |
COIN_2_4 | |
INVENTOR_5_0 | |
COIN_2_5 | |
COIN_3_0 | |
INVENTOR_6_0 | |
COIN_4_0 | |
Protected Member Functions | |
virtual void | GLRender (SoGLRenderAction *action) |
virtual void | rayPick (SoRayPickAction *action) |
virtual void | generatePrimitives (SoAction *action) |
virtual void | computeBBox (SoAction *action, SbBox3f &box, SbVec3f ¢er) |
Protected Member Functions inherited from SoShape | |
virtual const SoFieldData * | getFieldData (void) const |
float | getComplexityValue (SoAction *action) |
virtual SbBool | shouldGLRender (SoGLRenderAction *action) |
void | beginSolidShape (SoGLRenderAction *action) |
void | endSolidShape (SoGLRenderAction *action) |
void | GLRenderBoundingBox (SoGLRenderAction *action) |
SbBool | shouldPrimitiveCount (SoGetPrimitiveCountAction *action) |
SbBool | shouldRayPick (SoRayPickAction *const action) |
void | computeObjectSpaceRay (SoRayPickAction *const action) |
void | computeObjectSpaceRay (SoRayPickAction *const action, const SbMatrix &matrix) |
virtual SoDetail * | createTriangleDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, const SoPrimitiveVertex *v3, SoPickedPoint *pp) |
virtual SoDetail * | createLineSegmentDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, SoPickedPoint *pp) |
virtual SoDetail * | createPointDetail (SoRayPickAction *action, const SoPrimitiveVertex *v, SoPickedPoint *pp) |
void | invokeTriangleCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2, const SoPrimitiveVertex *const v3) |
void | invokeLineSegmentCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2) |
void | invokePointCallbacks (SoAction *const action, const SoPrimitiveVertex *const v) |
void | beginShape (SoAction *const action, const TriangleShape shapetype, SoDetail *const detail=NULL) |
void | shapeVertex (const SoPrimitiveVertex *const v) |
void | endShape (void) |
void | generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const SbVec3f &normal) |
void | generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoMultiTextureCoordinateElement *const tce, const float s, const float t, const float r, const SbVec3f &normal) |
SbBool | startVertexArray (SoGLRenderAction *action, const SoCoordinateElement *coords, const SbVec3f *pervertexnormals, const SbBool texpervertex, const SbBool colorpervertex) |
void | finishVertexArray (SoGLRenderAction *action, const SbBool vbo, const SbBool normpervertex, const SbBool texpervertex, const SbBool colorpervertex) |
Protected Member Functions inherited from SoNode | |
virtual SbBool | readInstance (SoInput *in, unsigned short flags) |
Protected Member Functions inherited from SoBase | |
virtual void | destroy (void) |
SbBool | hasMultipleWriteRefs (void) const |
SbBool | writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) const |
void | writeFooter (SoOutput *out) const |
virtual const char * | getFileFormatName (void) const |
virtual SoNotRec | createNotRec (void) |
Friends | |
class | SoVolumeRenderP |
Additional Inherited Members | |
Protected Types inherited from SoBase | |
enum | BaseFlags |
Static Protected Member Functions inherited from SoShape | |
static const SoFieldData ** | getFieldDataPtr (void) |
Static Protected Member Functions inherited from SoNode | |
static const SoFieldData ** | getFieldDataPtr (void) |
static void | setNextActionMethodIndex (int index) |
static int | getNextActionMethodIndex (void) |
static void | incNextActionMethodIndex (void) |
static void | setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask) |
Static Protected Member Functions inherited from SoBase | |
static uint32_t | getCurrentWriteCounter (void) |
static void | staticDataLock (void) |
static void | staticDataUnlock (void) |
Protected Attributes inherited from SoNode | |
SbUniqueId | uniqueId |
Protected Attributes inherited from SoFieldContainer | |
SbBool | isBuiltIn |
Static Protected Attributes inherited from SoNode | |
static SbUniqueId | nextUniqueId |
static int | nextActionMethodIndex |
Render the full volume.
Insert a node of this type after an SoVolumeData node in the scene graph to render the full volume data set.
AbortCode SoVolumeRender::SoVolumeRenderAbortCB |
The function signature for callback function pointers to be passed in to SoVolumeRender::setAbortCallback().
totalslices is the total number of textured slices that is expected to be rendered, unless the callback choose to abort or skip any of them.
thisslice is the index number of the next slice to render. Note that they are rendered back-to-front, and that they are numbered from 1 to totalslices.
userdata is the second argument given to SoVolumeRender::setAbortCallback() when the callback was set up.
Enumeration of available types of voxel color interpolation.
Enumeration of available types of composition for partly translucent volumes.
Enumeration of strategies for how to render the slices of the volume.
Enumerator | |
---|---|
ALL | Always render as many slices as there are voxels in the depth dimension. This is the default value. Please note that SoVolumeRender::NumSlicesControl will always be considered as SoVolumeRender::ALL if the SoVolumeRender::numSlices field is less or equal to 0. |
MANUAL | Render as many slices as given by the SoVolumeRender::numSlices field. |
AUTOMATIC | The number of slices to render will be calculated as follows: Where "complexity" is the current SoComplexity::value setting in the scene graph traversal state. The default complexity value for a scene graph with no SoComplexity node(s) is 0.5. For "this->numSlices", see SoVolumeRender::numSlices. |
The set of valid values that should be returned from a function set up in SoVolumeRender::setAbortCallback().
void SoVolumeRender::setAbortCallback | ( | SoVolumeRenderAbortCB * | func, |
void * | userdata = NULL |
||
) |
Lets the application programmer supply a callback function, by which it will be possible to either prematurely abort the rendering of a set of slices, or to skip certain slices.
Both of these measures are of course optimizations of rendering performance controlled from client code.
|
protectedvirtual |
Picking of a volume doesn't work in quite the same manner as picking polygon geometry: the SoPickedPoint set up in the SoRayPickAction class will only contain the entry point of the ray into the volume.
For further picking information, grab the detail object and cast it to an SoVolumeRenderDetail (after first checking that it is of this type, of course).
Reimplemented from SoShape.
References SoShape::computeObjectSpaceRay(), SoAction::getState(), SoVolumeDetail::setDetails(), SoShape::shouldRayPick(), and SoBase::touch().
SoSFEnum SoVolumeRender::interpolation |
How to interpolate color values when rendering "in between" voxels. See SoVolumeRender::Interpolation.
Default value is SoVolumeRender::LINEAR.
SoSFEnum SoVolumeRender::composition |
How to compose the projected volume rendering. See SoVolumeRender::Composition.
Default value is SoVolumeRender::ALPHA_BLENDING.
SoSFEnum SoVolumeRender::numSlicesControl |
Specifies a strategy to use for calculating the number of slices to use for the visualization. The more slices, the better quality and more correct the visualization will be, but the trade-off is that it will also influence the rendering performance.
The default value is SoVolumeRender::ALL.
(The rendering performance can be severely improved by changing this field's value to either SoVolumeRender::MANUAL or SoVolumeRender::AUTOMATIC, and then tuning the SoVolumeRender::numSlices field.)
SoSFInt32 SoVolumeRender::numSlices |
Decides how many slices to render if SoVolumeRender::numSlicesControl is set to either SoVolumeRender::MANUAL or SoVolumeRender::AUTOMATIC.
For MANUAL
, it sets an absolute number. For AUTOMATIC
, a calculation will be done based on the value of this field and the current SoComplexity::value setting in the scene graph traversal state.
Note that the default value of the field is 0.