I've got a dataset in legacy VTK format with several fields, and i'm trying to do a volume rendering of it. I've been having alot of trouble with it, so I finally boiled it down to the following sample:<br><div style="margin-left: 40px; font-family: courier new,monospace;">
<br>#include <vtkDataSetReader.h><br>#include <vtkDataSetTriangleFilter.h><br>#include <vtkProjectedTetrahedraMapper.h><br>#include <vtkVolumeProperty.h><br>#include <vtkColorTransferFunction.h>
<br>#include <vtkPiecewiseFunction.h><br>#include <vtkVolume.h><br>#include <vtkRenderWindow.h><br>#include <vtkRenderer.h><br>#include <vtkRenderWindowInteractor.h><br>#include <vtkDataSet.h
><br>#include <vtkPNGWriter.h><br>#include <vtkRenderLargeImage.h><br>#include <vtkWindowToImageFilter.h><br>#include <vtkGraphicsFactory.h><br>#include <vtkImagingFactory.h><br>int main(void) {
<br>#ifdef _USE_MESA_<br> vtkGraphicsFactory *factGraphics = vtkGraphicsFactory::New();<br> factGraphics->SetUseMesaClasses(1);<br> factGraphics->SetOffScreenOnlyMode(1);<br> factGraphics->Delete();<br>
vtkImagingFactory *factImage = vtkImagingFactory::New();<br> factImage->SetUseMesaClasses(1);<br> factImage->Delete();<br><br>#endif<br><br> vtkDataSetReader *in = vtkDataSetReader::New();<br> in->SetFileName("
output.vtk");<br> in->ReadAllFieldsOn();<br> in->ReadAllScalarsOn();<br> in->ReadAllVectorsOn();<br> in->ReadAllTensorsOn();<br> in->ReadAllNormalsOn();<br> in->ReadAllColorScalarsOn();
<br> in->ReadAllTCoordsOn();<br> in->Update();<br><br> vtkDataSetTriangleFilter *tri = vtkDataSetTriangleFilter::New();<br> tri->SetInput(in->GetOutput());<br> tri->Update();<br><br> vtkProjectedTetrahedraMapper *projTet = vtkProjectedTetrahedraMapper::New();
<br> projTet->SetInput(tri->GetOutput());<br> projTet->SelectScalarArray("Function0");<br><br> vtkVolumeProperty *volProp = vtkVolumeProperty::New();<br> volProp->ShadeOff();<br><br> vtkColorTransferFunction *cmap = vtkColorTransferFunction::New();
<br> cmap->AddHSVPoint(0.0, 0.6667,1,1);<br> cmap->AddHSVPoint(0.001, 0.3333,1,1);<br> cmap->AddHSVPoint(0.002, 0.0,1,1);<br><br> vtkPiecewiseFunction *omap = vtkPiecewiseFunction::New();<br> omap->AddPoint(
0.0, 1.0);<br> omap->AddPoint(0.001, 1.0);<br> omap->AddPoint(0.002, 1.0);<br><br> volProp->SetColor(cmap);<br> volProp->SetScalarOpacity(omap);<br><br> vtkVolume *volume = vtkVolume::New();<br>
volume->SetMapper(projTet);<br> volume->SetProperty(volProp);<br><br> vtkRenderWindow *renWin = vtkRenderWindow::New();<br> vtkRenderer *ren1 = vtkRenderer::New();<br><br> renWin->OffScreenRenderingOn();
<br> renWin->AddRenderer(ren1);<br> ren1->AddVolume(volume);<br> renWin->SetSize(800,600);<br><br> renWin->Modified();<br> vtkWindowToImageFilter *w2if = vtkWindowToImageFilter::New();<br> w2if->SetInput(renWin);
<br> //vtkRenderLargeImage *w2if = vtkRenderLargeImage::New();<br> //w2if->SetInput(ren1);<br> //w2if->SetMagnification(1);<br><br> vtkPNGWriter *png = vtkPNGWriter::New();<br> png->SetFileName("
frame.png");<br> png->SetInput(w2if->GetOutput());<br> png->Write();<br><br>}<br><br><br></div>When _USE_MESA_ is disabled, then it momentarily flashes a window on the screen, and the resulting PNG on disk is correct (pretty much). When _USE_MESA_ is enabled, then it takes noticably longer to process and no window appears, but the resulting PNG on disk is a big empty blackness. Any idea what's going on here?
<br>-- <br>Randall Hand<br>Visualization Scientist, <br>ERDC-MSRC Vicksburg, MS<br>Homepage: <a href="http://www.yeraze.com">http://www.yeraze.com</a>