[Paraview] Volume Rendering with NumberOfScalarComponents > 1

Axel Kittenberger axkibe at gmail.com
Wed Dec 16 06:01:27 EST 2015


Hello,

the Python VTK script below gives results, like a expect. Now I'm trying to
reproduce it in Paraview and I fail.

I get rather confused as soon I give it a source with more than one scalar
component.
Paraview creates one color map; I would expect 3 color maps, 1 for every
component.
What ever I do effective opacity is always 1. That is I see a black cube
with it's surface the images
of the data on its surface (so far correct), however no effective volume
rendering -- I selected Volume, "Ray Cast Only"
which should be vtkFixedPointVolumeRayCastMapper as far I understood.

I tried creating 3 readers with the different scalar components extracted
first, but doesn't give
correct rendering -- neither in VTK nor in paraview, since multiple
renderer seem to compete which gets to
draw a pixel instead of composing them together
like a red transparent + a green transparent should give a yellow
transparent impression.

How can I achieve the same result with Paraview?

Kind regards, Axel

--------------------------
#!/usr/bin/env python

import vtk

# Create the standard renderer, render window and interactor
ren = vtk.vtkRenderer( )
renWin = vtk.vtkRenderWindow( )
renWin.AddRenderer( ren )
iren = vtk.vtkRenderWindowInteractor( )
iren.SetRenderWindow( renWin )

reader = vtk.vtkImageReader2( )
reader.SetFileName( "./data.raw" );
reader.SetDataScalarTypeToUnsignedChar( );
reader.SetNumberOfScalarComponents( 3 );
reader.SetFileDimensionality( 3 );
reader.SetDataExtent( 0, 261, 0, 511, 0, 21 );
reader.SetDataSpacing( 1, 1, 3.5 );

# Create transfer mapping scalar value to opacity
opacityTransferFunction = vtk.vtkPiecewiseFunction( )
opacityTransferFunction.AddPoint(   0, 0.0 )
opacityTransferFunction.AddPoint(  20, 0.0 )
opacityTransferFunction.AddPoint(  40, 0.1 )
opacityTransferFunction.AddPoint( 255, 0.1 )

# Create transfer mapping scalar value to color

colorRedTransferFunction = vtk.vtkColorTransferFunction( )
colorRedTransferFunction.AddRGBPoint(   0.0, 0.2, 0.0, 0.0 )
colorRedTransferFunction.AddRGBPoint( 255.0, 1.0, 0.0, 0.0 )

colorGreenTransferFunction = vtk.vtkColorTransferFunction( )
colorGreenTransferFunction.AddRGBPoint(   0.0, 0.0, 0.2, 0.0 )
colorGreenTransferFunction.AddRGBPoint( 255.0, 0.0, 1.0, 0.0 )

colorBlueTransferFunction = vtk.vtkColorTransferFunction( )
colorBlueTransferFunction.AddRGBPoint(   0.0, 0.0, 0.0, 0.0 )
colorBlueTransferFunction.AddRGBPoint( 255.0, 0.0, 0.0, 1.0 )

volumeProperty = vtk.vtkVolumeProperty( )
volumeProperty.SetColor( 0, colorRedTransferFunction )
volumeProperty.SetColor( 1, colorGreenTransferFunction )
volumeProperty.SetColor( 2, colorBlueTransferFunction )

volumeProperty.SetScalarOpacity( 0, opacityTransferFunction )
volumeProperty.SetScalarOpacity( 1, opacityTransferFunction )
volumeProperty.SetScalarOpacity( 2, opacityTransferFunction )
volumeProperty.SetInterpolationTypeToLinear( )

volumeMapper = vtk.vtkFixedPointVolumeRayCastMapper( )
volumeMapper.SetInputConnection( reader.GetOutputPort( ) )
volumeMapper.SetNumberOfThreads( 1 )

volume = vtk.vtkVolume( )
volume.SetMapper( volumeMapper )
volume.SetProperty( volumeProperty )

ren.AddVolume( volume )
ren.SetBackground( 1, 1, 1 )
renWin.SetSize( 600, 600 )

def CheckAbort( obj, event ):
    if obj.GetEventPending( ) != 0:
        obj.SetAbortRender( 1 )

renWin.AddObserver( "AbortCheckEvent", CheckAbort )

iren.Initialize( )
renWin.Render( )
iren.Start( )
--------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/paraview/attachments/20151216/dfbfbc32/attachment.html>


More information about the ParaView mailing list