[vtkusers] Fwd: Volume Rendering with multiple-array data
Randall Hand
randall.hand at gmail.com
Wed Feb 23 15:15:07 EST 2005
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
More information about the vtkusers
mailing list