[vtkusers] Missing pixel with vtkPolyDataMapper2D and vtkCoordinate

Xabi Riobe xabivtk at gmail.com
Mon Jul 6 03:49:16 EDT 2015


Thank you Cory for your help.

I added the bug in mantis with your suggestion:

http://www.vtk.org/Bug/view.php?id=15565


2015-07-03 16:49 GMT+02:00 Cory Quammen <cory.quammen at kitware.com>:

> Hi,
>
> Thank you for providing the complete code example that shows the problem.
> I compiled and ran it and see the same problem you report. Thanks also for
> your suggestion about what to modify. I tried adding 0.5 to the coordinates
> returned by this->TransformCoordinate->GetComputedDoubleViewportValue(),
> but this just led to blank pixels on the bottom of the window.
>
> I think this may indeed be a bug in the conversion from viewport
> coordinates to window coordinates. Right now, the transformation appears to
> be placing coordinates (1, 1) in the lower left corner of the upper right
> pixel, where I think it should be in the upper right corner of the pixel.
> When I modify vtkViewport::DisplayToNormalizedDisplay() to divide the u and
> v coordinates by size-1 instead of just size, the quad fills the window.
> This calculation should be putting the (1,1) coordinate in the upper right
> corner of the pixel.
>
> Would you mind posting this but on the bug tracker [1]?
>
> Thanks,
> Cory
>
> [1] http://www.vtk.org/Bug/view_all_bug_page.php
>
> On Wed, Jul 1, 2015 at 4:55 AM, Xabi Riobe <xabivtk at gmail.com> wrote:
>
>> Here is an example and a screenshot to illustrate the issue.
>>
>> I'm wondering if the coordinates returned in
>> vtkOpenGLPolyDataMapper2D::RenderOverlay by the call to
>> this->TransformCoordinate->GetComputedDoubleViewportValue(viewport);
>> should be then shifted with the extra 0.5 to be in the center of the pixel
>> and not in the border.
>>
>>
>> #define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,
>> vtkRenderingOpenGL, vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL)
>>
>> #include <vtkActor2D.h>
>> #include <vtkPolyDataMapper2D.h>
>> #include <vtkRenderer.h>
>> #include <vtkPlaneSource.h>
>> #include <vtkRenderWindow.h>
>> #include <vtkRenderWindowInteractor.h>
>> #include <vtkSmartPointer.h>
>> #include <vtkCoordinate.h>
>> #include <vtkPointData.h>
>>
>> int main(int, char* [])
>> {
>>    vtkSmartPointer<vtkRenderer> ren1= vtkSmartPointer<vtkRenderer>::New();
>>    vtkSmartPointer<vtkRenderWindow> renWin=
>> vtkSmartPointer<vtkRenderWindow>::New();
>>    renWin->SetSize( 1533, 792 );
>>    renWin->AddRenderer(ren1);
>>
>>    vtkSmartPointer<vtkRenderWindowInteractor> iren=
>> vtkSmartPointer<vtkRenderWindowInteractor>::New();
>>    iren->SetRenderWindow(renWin);
>>
>>    vtkSmartPointer<vtkPlaneSource> source =
>> vtkSmartPointer<vtkPlaneSource>::New();
>>    source->SetOrigin(0.0, 0.0, 0.0);
>>    source->SetPoint1(1.0, 0.0, 0.0);
>>    source->SetPoint2(0.0, 1.0, 0.0);
>>    source->Update();
>>
>>    vtkSmartPointer<vtkUnsignedCharArray> scalars =
>> vtkSmartPointer<vtkUnsignedCharArray>::New();
>>    double bottom[3] = {255.0, 0, 0};
>>    double top[3] = {0, 255.0, 0};
>>    scalars->Initialize();
>>    scalars->SetNumberOfComponents(3);
>>    scalars->SetNumberOfTuples(4);
>>    scalars->InsertTuple(0, bottom);
>>    scalars->InsertTuple(1, bottom);
>>    scalars->InsertTuple(2, top);
>>    scalars->InsertTuple(3, top);
>>    source->GetOutput()->GetPointData()->SetScalars(scalars);
>>
>>    vtkSmartPointer<vtkCoordinate> coordinateSystem =
>> vtkSmartPointer<vtkCoordinate>::New();
>>    coordinateSystem->SetCoordinateSystemToNormalizedViewport();
>>
>>    vtkSmartPointer<vtkPolyDataMapper2D> mapper =
>> vtkSmartPointer<vtkPolyDataMapper2D>::New();
>>    mapper->SetInputConnection(source->GetOutputPort());
>>    mapper->SetTransformCoordinate(coordinateSystem);
>>    mapper->TransformCoordinateUseDoubleOn();
>>
>>    vtkSmartPointer<vtkActor2D> actor2d =
>> vtkSmartPointer<vtkActor2D>::New();
>>    actor2d->SetMapper(mapper);
>>
>>    ren1->AddActor(actor2d);
>>
>>    ren1->ResetCamera();
>>    renWin->Render();
>>    iren->Start();
>> }
>>
>> [image: Images intégrées 1]
>>
>> 2015-06-30 18:18 GMT+02:00 Xabi Riobe <xabivtk at gmail.com>:
>>
>>> Hi,
>>>
>>> I want to display a plane as a background.
>>> For that i have in a vtkActor2D a vtkPolyDataMapper2D filled with a
>>> vtkPlaneSource going from 0,0,0 to 1,1,1
>>> I add to the mapper a vtkCoordinate with
>>> SetCoordinateSystemToNormalizedViewport
>>>
>>> with that, everything seems fine and i don't have to take care of it
>>> when my view is resized.
>>>
>>> but if i put some color on it and look at it carefully i can see an
>>> extra line and column of black pixels
>>>
>>> I looked at the code of vtkCoordinate and vtkViewport and the
>>> combination of the coordinates transformations leads to a final size of the
>>> polygon rendered 1 pixel short in both x and y directions.
>>>
>>> Is this considered a normal behaviour due to the computation involved,
>>> or is it definitively a bug?
>>>
>>> A quick workaround is to set my plane source a little bit larger, but
>>> for future features of my app, i would need the exact size...
>>>
>>> Thanks for any comments/suggestions
>>>
>>>
>>
>> _______________________________________________
>> 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
>>
>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/vtkusers
>>
>>
>
>
> --
> Cory Quammen
> R&D Engineer
> Kitware, Inc.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150706/ab2f6f0b/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 11349 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150706/ab2f6f0b/attachment.png>


More information about the vtkusers mailing list