[vtkusers] Volume rendering with png slice images

Joseph D. Wieber Jr. jdwieber at gmail.com
Thu Aug 4 08:56:07 EDT 2011


Thanks for your reply.  Unfortunately, I don't see 
vtkGPUVolumeRayCastMapper in the version (5.4.2-8ubuntu4) I'm using.  I 
guess it's time for an upgrade.

On 08/04/2011 05:45 AM, Dženan Zukić wrote:
> Have you tried vtkGPUVolumeRayCastMapper?
>
> On Thu, Aug 4, 2011 at 02:59, Joseph D. Wieber Jr. <jdwieber at gmail.com 
> <mailto:jdwieber at gmail.com>> wrote:
>
>     I apologize, I figured it out.  It was the single line in
>     generateVolume that reads:
>     spVolumeProperty->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?
>
>     Thanks
>
>
>     On 08/03/2011 07:18 PM, Joseph D. Wieber Jr. wrote:
>
>
>         Hi all,
>
>         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.
>
>         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.
>
>         Regards,
>
>         Joseph
>
>         void MainWindow::on_actionOpenDirectory_triggered()
>         {
>            QString dirname = QFileDialog::getExistingDirectory( this,
>                                                              
>          tr("Select a Directory"),
>                                                              
>          QDir::currentPath() );
>            if( !dirname.isNull() )
>            {
>                string pattern( dirname.toStdString () );
>                pattern += "/%03d.png";
>                cerr << "using pattern:<" << pattern << ">\n";
>
>                vtkSmartPointer< vtkVolume > spVolume = generateVolume
>         ( pattern );
>
>                vtkSmartPointer<vtkRenderWindow> spRenWin =
>                        vtkSmartPointer<vtkRenderWindow>::New();
>
>                vtkSmartPointer< vtkRenderer> spRen =
>                        vtkSmartPointer< vtkRenderer >::New();
>                spRen->AddViewProp ( spVolume );
>
>                spRenWin->AddRenderer( spRen );
>                m_pUi->qvtkWidget->SetRenderWindow ( spRenWin );
>                vtkSmartPointer< vtkRenderWindowInteractor > spIren =
>                        m_pUi->qvtkWidget->GetInteractor ();
>                spIren->SetRenderWindow( spRenWin );
>                spRen->SetBackground( 0.2, 0.3, 0.4 );
>                spRen->ResetCamera ();
>
>                //I tried this in place of ResetCamera, but id didn't
>         work either
>                //        vtkSmartPointer< vtkCamera > spCamera =
>         spRen->GetActiveCamera();
>                //        double* c = spVolume->GetCenter();
>                //        spCamera->SetFocalPoint( c[ 0 ], c[ 1 ], c[ 2
>         ] );
>                //        spCamera->SetPosition( c[ 0 ] + 400, c[ 1 ],
>         c[ 2 ] );
>                //        spCamera->SetViewUp( 0, 0, -1 );
>
>
>                spRenWin->Render();
>                m_pUi->qvtkWidget->setCursor ( Qt::ArrowCursor );
>            }
>            else
>            {
>                //TODO: do something intelligent here!
>            }
>         }
>
>
>         //---------------------------------------------------------------------------------------------------------------------------
>
>         vtkSmartPointer< vtkVolume > MainWindow::generateVolume( const
>         std::string& pattern )
>         {
>            //m_spReader is a vtkSmartPointer< vtkPNGReader >
>            m_spReader->SetFilePattern ( pattern.c_str () );
>            m_spReader->SetFileNameSliceOffset ( 1 );//images start at
>         001.png
>            //TODO: derive these from input
>            m_spReader->SetDataExtent( 0, 511, 0, 511, 1, 370
>         );//images go from 1 to 370
>            m_spReader->SetDataSpacing( 1.0, 1.0, 1.0 ); // mm
>            m_spReader->SetDataOrigin( 0, 0, 0 );
>            m_spReader->SetDataScalarTypeToUnsignedChar();
>            //m_spReader->Update();
>
>            vtkSmartPointer< vtkPiecewiseFunction >
>         spOpacityTransferFunction =
>                    vtkSmartPointer< vtkPiecewiseFunction >::New();
>            spOpacityTransferFunction->AddPoint( 0, 0.0 );
>            spOpacityTransferFunction->AddPoint( 255, 1.0 );
>
>            vtkSmartPointer< vtkVolumeProperty > spVolumeProperty =
>                    vtkSmartPointer< vtkVolumeProperty >::New();
>            spVolumeProperty->SetScalarOpacity( 0,
>         spOpacityTransferFunction );
>            spVolumeProperty->SetScalarOpacity( 1,
>         spOpacityTransferFunction );
>            spVolumeProperty->SetScalarOpacity( 2,
>         spOpacityTransferFunction );
>            spVolumeProperty->IndependentComponentsOff();
>            spVolumeProperty->SetInterpolationTypeToLinear();
>            //spVolumeProperty->ShadeOn();
>            //spVolumeProperty->SetAmbient( 0.4 );
>            //spVolumeProperty->SetDiffuse( 0.6 );
>            //spVolumeProperty->SetSpecular( 0.2 );
>
>            vtkSmartPointer< vtkFixedPointVolumeRayCastMapper >
>         spVolumeMapper =
>                    vtkSmartPointer< vtkFixedPointVolumeRayCastMapper
>         >::New();
>
>            spVolumeMapper->SetInputConnection(
>         m_spReader->GetOutputPort() );
>
>            vtkSmartPointer< vtkVolume > spVolume =
>                    vtkSmartPointer< vtkVolume >::New();
>            spVolume->SetMapper( spVolumeMapper );
>            spVolume->SetProperty( spVolumeProperty );
>
>            return spVolume;
>         }
>
>     _______________________________________________
>     Powered by www.kitware.com <http://www.kitware.com>
>
>     Visit other Kitware open-source projects at
>     http://www.kitware.com/opensource/opensource.html
>
>     Please keep messages on-topic and check the VTK FAQ at:
>     http://www.vtk.org/Wiki/VTK_FAQ
>
>     Follow this link to subscribe/unsubscribe:
>     http://www.vtk.org/mailman/listinfo/vtkusers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110804/d90deb6e/attachment.htm>


More information about the vtkusers mailing list