[vtkusers] Volume rendering with png slice images

Dženan Zukić dzenanz at gmail.com
Thu Aug 4 08:58:10 EDT 2011


True. http://www.vtk.org/Wiki/Improvements_in_VTK_5.6

2011/8/4 Joseph D. Wieber Jr. <jdwieber at gmail.com>

> **
> 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>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
>>
>> 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/52d29009/attachment.htm>


More information about the vtkusers mailing list