[vtkusers] Volume rendering with png slice images

Dženan Zukić dzenanz at gmail.com
Thu Aug 4 05:45:23 EDT 2011


Have you tried vtkGPUVolumeRayCastMapper?

On Thu, Aug 4, 2011 at 02:59, Joseph D. Wieber Jr. <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->**SetDataScalarTypeToUnsignedCha**r();
>>    //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< vtkFixedPointVolumeRayCastMapp**er > spVolumeMapper =
>>            vtkSmartPointer< vtkFixedPointVolumeRayCastMapp**er >::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
>
> Visit other Kitware open-source projects at http://www.kitware.com/**
> opensource/opensource.html<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 <http://www.vtk.org/Wiki/VTK_FAQ>
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/**listinfo/vtkusers<http://www.vtk.org/mailman/listinfo/vtkusers>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110804/0fe311b7/attachment.htm>


More information about the vtkusers mailing list