[vtkusers] VTK polylines using RGBA to set opacity does not work
Reicht Ignaz
i.reicht at Dkfz-Heidelberg.de
Mon Jan 10 15:10:20 EST 2011
Thanks David, but... ;-)
after setting this additional property the renderwindow turned empty (backgroundcolor only drawn).... no idea which property-trigger has to be pulled for this :-). opacity modification on the actor itself works fine without the alpha-value in the colorTuples for the "colorT"-Array. I tried almost every parameter in the vtkactor- and vtkmapper-classes which sounded useful to me. may try it on a different OS, atm I am using MacOSX10.6.6
This behavior occurs also for Vertices and Polygons.
cheers iggy
On Jan 10, 2011, at 3:31 PM, David Gobbi wrote:
> Hi Iggy,
>
> VTK often needs a hint before it will do transparent rendering.
> Try something like this:
>
> actor->GetProperty()->SetOpacity(0.995);
>
> Setting the opacity to just below 1.0 will force VTK to use
> the translucent rendering pass, which should allow things like
> per-vertex opacity to work.
>
> David
>
>
> On Mon, Jan 10, 2011 at 7:02 AM, Reicht Ignaz
> <i.reicht at dkfz-heidelberg.de> wrote:
>> Hi,
>>
>> on creating vtk polylines with RGBA-color information for each single point, no opacity has been processed/rendered. VTK-Literature says that opacity can be specified for an actor and also for an vertex, but somehow this does not work properly for vertex based settings. Attached you will find my code example where two polylines are given. coordinates represent polyline1 in front of polyline2. Color/opacity-information is given using RGBA tuple with 4 Components. I also tried this approach using vtkTubes but with the same disappointing result (see commented out parts).
>>
>> Does somebody know what is missing or what is implemented wrong?
>> thanks in advise
>> iggy
>>
>> ##############################
>> int main() {
>>
>>
>>
>> //Create points for polyline1.
>> double origin[3] = {0.0, 0.0, 0.0};
>> double p0[3] = {100.0, 0.0, 0.0};
>> double p1[3] = {150.0, 100.0, 0.0};
>> double p2[3] = {170.0, 200.0, 0.0};
>>
>>
>>
>> //create points for polyline2
>> double p01[3] = {50.0, 50.0, 13.0};
>> double p11[3] = {200.0, 100.0, 13.0};
>>
>> //insert points to vtkPointarray
>> vtkPoints *pnts = vtkPoints::New();
>> pnts->InsertPoint(0,origin);
>> pnts->InsertPoint(1,p0);
>> pnts->InsertPoint(2,p1);
>> pnts->InsertPoint(3,p2);
>> pnts->InsertPoint(4,p01);
>> pnts->InsertPoint(5,p11);
>>
>>
>>
>> //generate and define polyline1
>> vtkPolyLine *polyLine = vtkPolyLine::New();
>> polyLine->GetPointIds()->SetNumberOfIds(4);
>> polyLine->GetPointIds()->SetId(0,0);
>> polyLine->GetPointIds()->SetId(1,1);
>> polyLine->GetPointIds()->SetId(2,2);
>> polyLine->GetPointIds()->SetId(3,3);
>>
>>
>>
>> //generate and define polyline2
>> vtkPolyLine *polyLine2 = vtkPolyLine::New();
>> polyLine2->GetPointIds()->SetNumberOfIds(2);
>> polyLine2->GetPointIds()->SetId(0,4);
>> polyLine2->GetPointIds()->SetId(1,5);
>>
>> //add lines to cellArray
>>
>> vtkCellArray *lines = vtkCellArray::New();
>> lines->InsertNextCell(polyLine);
>> lines->InsertNextCell(polyLine2);
>>
>>
>>
>> vtkPolyData *polyDataT = vtkPolyData::New();
>> polyDataT->SetPoints(pnts);
>> polyDataT->SetLines(lines);
>>
>>
>>
>> //color and opacity handling
>> vtkUnsignedCharArray *colorT = vtkUnsignedCharArray::New();
>> colorT->SetName("Colors");
>> colorT->SetNumberOfComponents(4); //4 components cuz of RGBA
>>
>>
>>
>> unsigned char red[4] = {255, 0, 0, 0.5};
>> unsigned char green[4] = {0, 255, 0, 0.5};
>> unsigned char blue[4] = {0, 0, 255, 0.5};
>> unsigned char white[4] = {255, 255, 255, 0.5};
>>
>> colorT->InsertNextTupleValue(red); //color for point0
>> colorT->InsertNextTupleValue(green); //color for point1
>> colorT->InsertNextTupleValue(blue);
>> colorT->InsertNextTupleValue(white);
>> colorT->InsertNextTupleValue(white);
>> colorT->InsertNextTupleValue(white); //color for point5
>>
>>
>>
>> polyDataT->GetPointData()->AddArray(colorT);
>>
>>
>>
>> //tube representation
>>
>> //vtkTubeFilter *tube = vtkTubeFilter::New();
>> //tube->SetInput(polyDataT);
>> //tube->SetNumberOfSides(8);
>> //tube->SetRadius(5);
>>
>>
>>
>> vtkSmartPointer<vtkPolyDataMapper> mapper =
>> vtkSmartPointer<vtkPolyDataMapper>::New();
>> mapper->SetInput(polyDataT);
>> //mapper->SetInputConnection(tube->GetOutputPort()); //using for tube representation
>> mapper->ScalarVisibilityOn();
>> mapper->SetScalarModeToUsePointFieldData();
>> mapper->SelectColorArray("Colors");
>>
>>
>>
>> vtkSmartPointer<vtkActor> actor =
>> vtkSmartPointer<vtkActor>::New();
>> actor->SetMapper(mapper);
>>
>>
>>
>> //Rendering
>>
>> vtkSmartPointer<vtkRenderer> renderer =
>> vtkSmartPointer<vtkRenderer>::New();
>> renderer->AddActor(actor);
>> renderer->SetBackground(.2, .3, .4);
>>
>> renderer->ResetCamera();
>>
>> vtkSmartPointer<vtkRenderWindow> renWin =
>> vtkSmartPointer<vtkRenderWindow>::New();
>> vtkSmartPointer<vtkRenderWindowInteractor>
>> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
>> iren->SetRenderWindow(renWin);
>> renWin->AddRenderer(renderer);
>> renWin->SetSize(500, 500);
>> renWin->Render();
>> iren->Start();
>>
>> }//end main()
>> #############################
>> _______________________________________________
>> 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
>>
More information about the vtkusers
mailing list