<font size="2"><font face="verdana,sans-serif">Have you tried vtkGPUVolumeRayCastMapper?<br></font></font><br><div class="gmail_quote">On Thu, Aug 4, 2011 at 02:59, Joseph D. Wieber Jr. <span dir="ltr"><<a href="mailto:jdwieber@gmail.com">jdwieber@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I apologize, I figured it out. It was the single line in generateVolume that reads: spVolumeProperty-><u></u>IndependentComponentsOff(); When I comment out this line, and uncomment the lines for linear interpolation and shading it looks very nice. However, it's terribly slow. I suspect that this version is software rendered. Is there a similar hardware accelerated method?<br>
<br>
Thanks<div><div></div><div class="h5"><br>
<br>
On 08/03/2011 07:18 PM, Joseph D. Wieber Jr. wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hi all,<br>
<br>
I'm trying to do some volume rendering using the below code, but nothing is showing in the render window. When I run the code I see the window and the background color that I set, but no data. The code cranks for about 5 seconds before I see the default render window replaced (the default render window is white, and the volume render window is gray-ish). I don't see error messages in the console either.<br>
<br>
I'm using Qt with QVTKWidget to create the GUI. I'm obviously doing something wrong, but I don't see what it is. Does anyone see what I'm missing? Thanks.<br>
<br>
Regards,<br>
<br>
Joseph<br>
<br>
void MainWindow::on_<u></u>actionOpenDirectory_triggered(<u></u>)<br>
{<br>
QString dirname = QFileDialog::<u></u>getExistingDirectory( this,<br>
tr("Select a Directory"),<br>
QDir::currentPath() );<br>
if( !dirname.isNull() )<br>
{<br>
string pattern( dirname.toStdString () );<br>
pattern += "/%03d.png";<br>
cerr << "using pattern:<" << pattern << ">\n";<br>
<br>
vtkSmartPointer< vtkVolume > spVolume = generateVolume ( pattern );<br>
<br>
vtkSmartPointer<<u></u>vtkRenderWindow> spRenWin =<br>
vtkSmartPointer<<u></u>vtkRenderWindow>::New();<br>
<br>
vtkSmartPointer< vtkRenderer> spRen =<br>
vtkSmartPointer< vtkRenderer >::New();<br>
spRen->AddViewProp ( spVolume );<br>
<br>
spRenWin->AddRenderer( spRen );<br>
m_pUi->qvtkWidget-><u></u>SetRenderWindow ( spRenWin );<br>
vtkSmartPointer< vtkRenderWindowInteractor > spIren =<br>
m_pUi->qvtkWidget-><u></u>GetInteractor ();<br>
spIren->SetRenderWindow( spRenWin );<br>
spRen->SetBackground( 0.2, 0.3, 0.4 );<br>
spRen->ResetCamera ();<br>
<br>
//I tried this in place of ResetCamera, but id didn't work either<br>
// vtkSmartPointer< vtkCamera > spCamera = spRen->GetActiveCamera();<br>
// double* c = spVolume->GetCenter();<br>
// spCamera->SetFocalPoint( c[ 0 ], c[ 1 ], c[ 2 ] );<br>
// spCamera->SetPosition( c[ 0 ] + 400, c[ 1 ], c[ 2 ] );<br>
// spCamera->SetViewUp( 0, 0, -1 );<br>
<br>
<br>
spRenWin->Render();<br>
m_pUi->qvtkWidget->setCursor ( Qt::ArrowCursor );<br>
}<br>
else<br>
{<br>
//TODO: do something intelligent here!<br>
}<br>
}<br>
<br>
<br>
//----------------------------<u></u>------------------------------<u></u>------------------------------<u></u>------------------------------<u></u>----- <br>
vtkSmartPointer< vtkVolume > MainWindow::generateVolume( const std::string& pattern )<br>
{<br>
//m_spReader is a vtkSmartPointer< vtkPNGReader ><br>
m_spReader->SetFilePattern ( pattern.c_str () );<br>
m_spReader-><u></u>SetFileNameSliceOffset ( 1 );//images start at 001.png<br>
//TODO: derive these from input<br>
m_spReader->SetDataExtent( 0, 511, 0, 511, 1, 370 );//images go from 1 to 370<br>
m_spReader->SetDataSpacing( 1.0, 1.0, 1.0 ); // mm<br>
m_spReader->SetDataOrigin( 0, 0, 0 );<br>
m_spReader-><u></u>SetDataScalarTypeToUnsignedCha<u></u>r();<br>
//m_spReader->Update();<br>
<br>
vtkSmartPointer< vtkPiecewiseFunction > spOpacityTransferFunction =<br>
vtkSmartPointer< vtkPiecewiseFunction >::New();<br>
spOpacityTransferFunction-><u></u>AddPoint( 0, 0.0 );<br>
spOpacityTransferFunction-><u></u>AddPoint( 255, 1.0 );<br>
<br>
vtkSmartPointer< vtkVolumeProperty > spVolumeProperty =<br>
vtkSmartPointer< vtkVolumeProperty >::New();<br>
spVolumeProperty-><u></u>SetScalarOpacity( 0, spOpacityTransferFunction );<br>
spVolumeProperty-><u></u>SetScalarOpacity( 1, spOpacityTransferFunction );<br>
spVolumeProperty-><u></u>SetScalarOpacity( 2, spOpacityTransferFunction );<br>
spVolumeProperty-><u></u>IndependentComponentsOff();<br>
spVolumeProperty-><u></u>SetInterpolationTypeToLinear()<u></u>;<br>
//spVolumeProperty->ShadeOn();<br>
//spVolumeProperty-><u></u>SetAmbient( 0.4 );<br>
//spVolumeProperty-><u></u>SetDiffuse( 0.6 );<br>
//spVolumeProperty-><u></u>SetSpecular( 0.2 );<br>
<br>
vtkSmartPointer< vtkFixedPointVolumeRayCastMapp<u></u>er > spVolumeMapper =<br>
vtkSmartPointer< vtkFixedPointVolumeRayCastMapp<u></u>er >::New();<br>
<br>
spVolumeMapper-><u></u>SetInputConnection( m_spReader->GetOutputPort() );<br>
<br>
vtkSmartPointer< vtkVolume > spVolume =<br>
vtkSmartPointer< vtkVolume >::New();<br>
spVolume->SetMapper( spVolumeMapper );<br>
spVolume->SetProperty( spVolumeProperty );<br>
<br>
return spVolume;<br>
}<br>
<br>
</blockquote>
______________________________<u></u>_________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/<u></u>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_<u></u>FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/<u></u>listinfo/vtkusers</a><br>
</div></div></blockquote></div><br>