Skip to content
  • Alvaro Sanchez's avatar
    Added support for multiple volume inputs in GPUVolumeRayCastMapper · a632f77e
    Alvaro Sanchez authored
    When multiple inputs are rendered through the same mapper, it is possible to
    composite overlapping areas correctly. Inputs are connected directly to
    the mapper and their parameters (transfer functions, transformations, etc.) are
    specified through standard vtkVolume instances. These vtkVolume instances are
    to be registered in a special vtkProp3D, vtkMultiVolume.  vtkMultiVolume
    represents a 3D space containing a set of vtkVolume instances which could be
    but are not necessarily overlapping, this instance computes the bounding-box
    containing all of its registered vtkVolumes.
    
    vtkGPUVolumeRayCastMapper prepares and keeps track of the inputs as they are
    allowed to be disconnected at any time. vtkOpenGLGPUVRCMapper's internals
    particular to an input (vtkVolumeTexture, OpenGL helper instances, etc.) have
    been promoted to a separate class vtkVolumeInputHelper. Other internals (such as
    ComputeBounds, ComputePointToCellMatrix and related variables) have been moved
    into vtkVolumeTexture as they are inherent to the texture definition (or
    some of its blocks during streaming).
    
    A separate code path is used when rendering multiple-inputs in order to
    facilitate the co-existance of these two modes (single/multiple), due to current
    feature incompatibilities with multiple inputs (e.g. texture-streaming, cropping,
    etc.). Splitting DoGPURender into various smaller routines improves code
    reusability between these two paths.
    
    A limited set of the mapper features are currently supported for multiple
    inputs:
    
      * Transfer functions: these are defined separately for per input.
        + 1D color
        + 1D scalar opacity
        + 1D gradient magnitude opacity
        + 2D scalar-gradient magnitude
    
      * Point and cell data
        + With the limitation that all of the inputs are assumed to share the same
        name/id.
    
      * Composite blending (front-to-back)
    
    Test cases:
    
      * TestGPURayCastMultiVolumeOverlapping
      * TestGPURayCastMultiVolumeTransfer2D
      * TestGPURayCastMultiVolumeAddRemove
      * TestGPURayCastMultiVolumeCellData
    a632f77e