[vtkusers] Fwd: Volume Rendering with multiple-array data

Randall Hand randall.hand at gmail.com
Mon Mar 14 11:32:48 EST 2005


Just a status update for all those interested.  I finally fixed this.

I switched from using the gcc3.2 compilers to the MipsPro compilers
7.4 .  I still have some strange occurances during the compile where I
must specify -ptused , but now I'm able to run raycasting across all
32processors without incident :)

One other little quirk, I compiled VTK once with PThreads disabled and
sprocs enabled.  When I tried to run my raycast app I got an error
message several times (roughly once for each processor I suppose)
about "sproc call failed: error code 3".  Recompiling with pthreads
instead, fixed the problem.


On Wed, 23 Feb 2005 14:15:07 -0600, Randall Hand <randall.hand at gmail.com> wrote:
> I just updated to the latest CVS (not much changed), and tried again.
> No change. TExture2D works, RayCast segfaults.
> 
> I'm using an SGI Irix system, 32-processor, 32G Ram Onyx340 with IR4's.
> 
> Excerpt from an hinv:
> 32 600 MHZ IP35 Processors
> CPU: MIPS R14000 Processor Chip Revision: 2.4
> FPU: MIPS R14010 Floating Point Chip Revision: 2.4
> Main memory size: 32768 Mbytes
> Instruction cache size: 32 Kbytes
> Data cache size: 32 Kbytes
> 
> On Wed, 23 Feb 2005 14:17:17 -0500, Mathieu Malaterre
> <mathieu.malaterre at kitware.com> wrote:
> > Randall,
> >
> >         Sorry I cannot reproduce any problem. You seems to be using VTK CVS,
> > can you update to today ?
> >         Also if you are using an ATI card on linux, could you export :
> >
> > export LIBGL_ALWAYS_INDIRECT=1
> >
> > before running your program ? Or if you have mesa on your system can you do:
> >
> > export LD_PRELOAD=/opt/Mesa/lib/libGL.so
> >
> > before running your program
> >
> > Thanks
> > Mathieu
> >
> > Randall Hand wrote:
> > > Sorry, yeah that's a cut/paste mistake.  to prevent it again, I've
> > > attached my source file to this email.  i've made alot of
> > > modifications, namely 2 defines at the top to control Texture2D vs
> > > Raycast mapping, & Onscreen vs Offscreen mapping.  Everything I've
> > > done, i've been able to simply comment the "#define RAYCAST" line, and
> > > it works beautifully with Texture2d.
> > >
> > > I tried it just now with blow.vtk, & with ironProt.vtk and both do
> > > similar things.  Sometimes they'll render initially, then crash as
> > > soon as I interact with it.  Other times they just crash immediately.
> > >
> > > Thanks for the help :)
> > >
> > >
> > > On Wed, 23 Feb 2005 13:51:16 -0500, Mathieu Malaterre
> > > <mathieu.malaterre at kitware.com> wrote:
> > >
> > >>Randall,
> > >>
> > >>        I tried reproducing your bug with blow.vtk (part of VTKData) with no
> > >>luck. If you were able to reproduce the bug with blow.vtk I could look
> > >>into it, or just send my your dataset.
> > >>
> > >>        BTW you script redeclare twice:
> > >>
> > >> >     vtkGaussianSplatter *filter = vtkGaussianSplatter::New();
> > >> >     filter->SetNullValue(0.0);
> > >> >     filter->SetInput(mask->GetOutput());
> > >> >     filter->Update();
> > >> >     printf("Filter ran\n");
> > >> >
> > >> >     vtkImageShiftScale *scaled = vtkImageShiftScale::New();
> > >> >     scaled->SetInput(filter->GetOutput());
> > >> >     scaled->SetScale(255.0);
> > >> >     scaled->SetOutputScalarTypeToUnsignedChar();
> > >> >     scaled->Update();
> > >> >     printf("Data Scaled ran\n");
> > >> >     printf("* Scaled data arrays:\n");
> > >> >     vtkPointData *dataptr = scaled->GetOutput()->GetPointData();
> > >> >     for(n=0; n< dataptr->GetNumberOfArrays(); n++) {
> > >> >         printf("*   [%i] \"%s\"\n", n, dataptr->GetArrayName(n));
> > >> >     }
> > >> >     scaled->GetOutput()->GetPointData()->GetArray(0)->GetRange(range,0);
> > >> >     printf("* Range: %f - %f\n", range[0], range[1]);
> > >>
> > >>        Is this a copy/paste mistake ?
> > >>
> > >>Thanks,
> > >>Mathieu
> > >>
> > >>
> > >>Randall Hand wrote:
> > >>
> > >>>Still looking for any help with this... I've gotten it to work witht
> > >>>he vtkVolumeTextureMapper2D just fine, but simply replacing that with
> > >>>the vtkVolumeRayCastMapper calls results in all kinds of weird
> > >>>behaviour.
> > >>>
> > >>>Sometimes it exits with a segfault/core dump, but no error.
> > >>>
> > >>>Sometimes it runs to completion, but the volume rendering doesn't work
> > >>>(I get the text & outline, but no data).
> > >>>
> > >>>Most commonly I get anywhere from 1 to 3 messages like this:
> > >>>ERROR: In /viz/home/rhand/src/ezViz/Utilities/VTK/Filtering/vtkExecutive.cxx,
> > >>>line 519
> > >>>vtkStreamingDemandDrivenPipeline (0x1d6038d0): Non-forwarded requests
> > >>>are not yet implemented.
> > >>>
> > >>>And sometimes I get garbage like this: (looks like multiple errors interlaced)
> > >>>ERROR: In /viz/home/rhand/src/ezViz/Utilities/VTK/FiltEEeRRrRRiOOnRRg::/
> > >>> vIItnnk  E//xvveiiczzu//thhioovmmeee.//crrxhhxaa,nn ddl//issnrrecc
> > >>>//5ee1zz9VV
> > >>>iivzzt//kUUStttiirlleiiattmiiieenssg//DVVeTTmKKa//nFFdiiDllrttieevrreiinnnPggi//pvvettlkkiEEnxxeee
> > >>>cc(uu0ttxii1vv0ee9..7cc1xxdxxb,,8  )ll:ii nnNeeo  n55-11f99o
> > >>>(truncated by me, you get the point)
> > >>>
> > >>>The messages seem to occur after the ->Render() call, and during the
> > >>>part where I write it to disk.  (with a vtkTIFFWriter).  Sometimes it
> > >>>segfaults right after the error messages, and sometimes it just hangs
> > >>>indefinately.  Once or twice it's even run to completion after the
> > >>>error messages, but the Volume Rendering never appears.  I'm using
> > >>>OffScreen rendering with MangledMesa.
> > >>>
> > >>>Please? Anyone?
> > >>>
> > >>>---------- Forwarded message ----------
> > >>>From: Randall Hand <randall.hand at gmail.com>
> > >>>Date: Wed, 16 Feb 2005 11:29:16 -0600
> > >>>Subject: Volume Rendering with multiple-array data
> > >>>To: vtkusers at vtk.org
> > >>>
> > >>>
> > >>>I have a VTK Dataset with with multiple data values per point.  Each
> > >>>data point in my rectilinear grid has both a scalar (fractional
> > >>>occupancy) and a vector (flow velocity).  I want to generate a volume
> > >>>rendering from this dataset of the scalar field, using the RayCast
> > >>>volume code.
> > >>>
> > >>>How do I get from the vtkDataSet that vtkDataSetReader outputs, to the
> > >>>vtkImageData that the volume rendering routines want?  Currently I'm
> > >>>using a GaussianSPlatter to convert to an imageData, & a
> > >>>vtkImageShiftScale to convert from the 0-1float to a 0-255unsigned
> > >>>char.
> > >>>
> > >>>Here's an exerpt from my code:
> > >>>
> > >>>***BEGIN***
> > >>>
> > >>>    // Load model
> > >>>    vtkDataSetReader *model = vtkDataSetReader::New();
> > >>>    model->SetFileName(filename);
> > >>>    model->Update();
> > >>>    printf("File loaded\n");
> > >>>    model->GetOutput()->GetPointData()->GetArray("Fraction")->GetRange(range,0);
> > >>>    printf("* Range: %f - %f\n", range[0], range[1]);
> > >>>
> > >>>    vtkMaskPoints *mask = vtkMaskPoints::New();
> > >>>    mask->SetInput(model->GetOutput());
> > >>>    mask->RandomModeOn();
> > >>>    mask->SetMaximumNumberOfPoints(10);
> > >>>    mask->Update();
> > >>>    printf("Data Masked\n");
> > >>>    mask->GetOutput()->GetPointData()->GetArray("Fraction")->GetRange(range,0);
> > >>>    printf("* Range: %f - %f\n", range[0], range[1]);
> > >>>
> > >>>    vtkGaussianSplatter *filter = vtkGaussianSplatter::New();
> > >>>    filter->SetNullValue(0.0);
> > >>>    filter->SetInput(mask->GetOutput());
> > >>>    filter->Update();
> > >>>    printf("Filter ran\n");
> > >>>
> > >>>    vtkImageShiftScale *scaled = vtkImageShiftScale::New();
> > >>>    scaled->SetInput(filter->GetOutput());
> > >>>    scaled->SetScale(255.0);
> > >>>    scaled->SetOutputScalarTypeToUnsignedChar();
> > >>>    scaled->Update();
> > >>>    printf("Data Scaled ran\n");
> > >>>    printf("* Scaled data arrays:\n");
> > >>>    vtkPointData *dataptr = scaled->GetOutput()->GetPointData();
> > >>>    for(n=0; n< dataptr->GetNumberOfArrays(); n++) {
> > >>>        printf("*   [%i] \"%s\"\n", n, dataptr->GetArrayName(n));
> > >>>    }
> > >>>    scaled->GetOutput()->GetPointData()->GetArray(0)->GetRange(range,0);
> > >>>    printf("* Range: %f - %f\n", range[0], range[1]);
> > >>>    vtkGaussianSplatter *filter = vtkGaussianSplatter::New();
> > >>>    filter->SetNullValue(0.0);
> > >>>    filter->SetInput(mask->GetOutput());
> > >>>    filter->Update();
> > >>>    printf("Filter ran\n");
> > >>>
> > >>>    vtkImageShiftScale *scaled = vtkImageShiftScale::New();
> > >>>    scaled->SetInput(filter->GetOutput());
> > >>>    scaled->SetScale(255.0);
> > >>>    scaled->SetOutputScalarTypeToUnsignedChar();
> > >>>    scaled->Update();
> > >>>    printf("Data Scaled ran\n");
> > >>>    printf("* Scaled data arrays:\n");
> > >>>    vtkPointData *dataptr = scaled->GetOutput()->GetPointData();
> > >>>    for(n=0; n< dataptr->GetNumberOfArrays(); n++) {
> > >>>        printf("*   [%i] \"%s\"\n", n, dataptr->GetArrayName(n));
> > >>>    }
> > >>>    scaled->GetOutput()->GetPointData()->GetArray(0)->GetRange(range,0);
> > >>>    printf("* Range: %f - %f\n", range[0], range[1]);
> > >>>
> > >>>    vtkVolumeRayCastCompositeFunction *compFunc =
> > >>>                vtkVolumeRayCastCompositeFunction::New();
> > >>>    compFunc->SetCompositeMethodToInterpolateFirst();
> > >>>
> > >>>    vtkPiecewiseFunction *xf_Opacity = vtkPiecewiseFunction::New();
> > >>>    xf_Opacity->AddPoint(0,0.0);
> > >>>    xf_Opacity->AddPoint(255,1.0);
> > >>>
> > >>>    vtkColorTransferFunction *xf_Color = vtkColorTransferFunction::New();
> > >>>    xf_Color->AddRGBPoint(0, 0, 0, 1);
> > >>>    xf_Color->AddRGBPoint(255, 0, 0, 1);
> > >>>
> > >>>    vtkVolumeProperty *volProp = vtkVolumeProperty::New();
> > >>>    volProp->SetColor(xf_Color);
> > >>>    volProp->SetScalarOpacity(xf_Opacity);
> > >>>    volProp->SetInterpolationTypeToLinear();
> > >>>
> > >>>    modelMapper = vtkVolumeRayCastMapper::New();
> > >>>    modelMapper->SetInput(scaled->GetOutput());
> > >>>    modelMapper->SetVolumeRayCastFunction(compFunc);
> > >>>//  modelMapper->Update();
> > >>>
> > >>>    printf("Mapper updated\n");
> > >>>    vtkVolume *volume = vtkVolume::New();
> > >>>    volume->SetMapper(modelMapper);
> > >>>    volume->SetProperty(volProp);
> > >>>***END***
> > >>>
> > >>>When I run this, tho, I get the following output:
> > >>>=============== BEGIN OUTPUT ==============
> > >>>Loading file test.vtk...
> > >>>File loaded
> > >>>* Range: 0.000000 - 1.000000
> > >>>Data Masked
> > >>>* Range: 0.000000 - 1.000000
> > >>>Filter ran
> > >>>Data Scaled ran
> > >>>* Scaled data arrays:
> > >>>*   [0] "(null)"
> > >>>* Range: 0.000000 - 253.000000
> > >>>Mapper updated
> > >>>ERROR: In /viz/home/rhand/src/ezViz/Utilities/VTK/Filtering/vtkExecutive.cxx,
> > >>>line 519
> > >>>vtkStreamingDemandDrivenPipeline (0x109843b8): Non-forwarded requests
> > >>>are not yet implemented.
> > >>>
> > >>>Segmentation fault (core dumped)
> > >>>================ END OUTPUT ============
> > >>>
> > >>>Any ideas?
> > >>>--
> > >>>Randall Hand
> > >>>http://www.yeraze.com
> > >>>
> > >>>
> > >>
> > >>
> > >
> > >
> >
> >
> 
> --
> Randall Hand
> http://www.yeraze.com
> 


-- 
Randall Hand
http://www.yeraze.com



More information about the vtkusers mailing list