# vtkPolygon concave rendering bug

**URL:** <https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251>\
**Category:** Development\
**Created:** [February 5, 2024, 12:26am UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251 "2024-02-05T00:26:10Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![PeterFranzSeequent](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/p/b5a626/32.png) [@PeterFranzSeequent](https://discourse.vtk.org/u/PeterFranzSeequent)\
**Post date:** [February 5, 2024, 12:26am UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251/1 "2024-02-05T00:26:10Z")

</div>

A concave `vtkPolygon` has rendering issues. I have tested this with multiple different shapes; the example I provide below is minimalistic. The bug propagates into other filters as well; for example a `vtkGeometryFilter` on the concave polygon will result in the same triangle shape as indicated by the rendering example.

---

<div class="post-metadata">

**Author:** ![PeterFranzSeequent](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/p/b5a626/32.png) [@PeterFranzSeequent](https://discourse.vtk.org/u/PeterFranzSeequent)\
**Post date:** [February 5, 2024, 12:26am UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251/2 "2024-02-05T00:26:45Z")

</div>

```auto
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkDataSetMapper.h>
#include <vtkIdList.h>
#include <vtkNew.h>
#include <vtkPolyData.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>

int main(int, char*[])
{
    vtkNew<vtkPoints> points;
    vtkNew<vtkPolyData> polyData;
    polyData->SetPoints(points);
    polyData->Allocate(1);
    vtkNew<vtkIdList> list;
    list->InsertNextId(points->InsertNextPoint(0.0, 0.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(3.0, 0.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(3.0, 2.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(2.0, 2.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(2.0, 1.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(1.0, 1.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(1.0, 2.0, 0.0));
    list->InsertNextId(points->InsertNextPoint(0.0, 2.0, 0.0));
    polyData->InsertNextCell(VTK_POLYGON, list);

    vtkNew<vtkDataSetMapper> mapper;
    mapper->SetInputData(polyData);

    vtkNew<vtkActor> wireActor;
    wireActor->SetMapper(mapper);
    wireActor->GetProperty()->SetRepresentationToWireframe();
    wireActor->GetProperty()->SetColor(1.0, 0, 0);
    wireActor->GetProperty()->SetLineWidth(5);

    vtkNew<vtkActor> surfaceActor;
    surfaceActor->SetMapper(mapper);
    surfaceActor->GetProperty()->SetRepresentationToSurface();
    surfaceActor->GetProperty()->SetColor(1.0, 1.0, 1.0);

    vtkNew<vtkRenderer> renderer;
    vtkNew<vtkRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    vtkNew<vtkRenderWindowInteractor> iren;
    iren->SetRenderWindow(renderWindow);

    renderer->AddActor(surfaceActor);
    renderer->AddActor(wireActor);
    renderWindow->SetSize(1500, 1500);
    renderWindow->SetWindowName("testPolygon");

    renderWindow->Render();

    iren->Start();

    return EXIT_SUCCESS;
}

```

---

<div class="post-metadata">

**Author:** ![PeterFranzSeequent](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/p/b5a626/32.png) [@PeterFranzSeequent](https://discourse.vtk.org/u/PeterFranzSeequent)\
**Post date:** [February 5, 2024, 12:27am UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251/3 "2024-02-05T00:27:37Z")

</div>

Results in:

 ![image](https://discourse.vtk.org/uploads/default/original/2X/c/c1734db3f3dc3648053fd4c65f7dedee0fc06d2c.png)

Note the shape should be ‘U’ shaped. The bug fills in the part in the upper middle. The red wire outline is the correct shape.

---

<div class="post-metadata">

**Author:** ![mwestphal](https://discourse.vtk.org/user_avatar/discourse.vtk.org/mwestphal/32/19_2.png) [@mwestphal](https://discourse.vtk.org/u/mwestphal)\
**Post date:** [February 5, 2024, 7:55am UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251/4 "2024-02-05T07:55:25Z")

</div>

Not supported by VTK afaik.

---

<div class="post-metadata">

**Author:** ![will.schroeder](https://discourse.vtk.org/user_avatar/discourse.vtk.org/will.schroeder/32/233_2.png) [@will.schroeder](https://discourse.vtk.org/u/will.schroeder)\
**Post date:** [February 5, 2024, 10:32am UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251/5 "2024-02-05T10:32:24Z")

</div>

Graphics hardware uses a primitive method to tessellate polygons, and it assumes the polygons are convex. Use vtkTriangleFilter to fix the rendering issues.

---

<div class="post-metadata">

**Author:** ![PeterFranzSeequent](https://discourse.vtk.org/letter_avatar_proxy/v4/letter/p/b5a626/32.png) [@PeterFranzSeequent](https://discourse.vtk.org/u/PeterFranzSeequent)\
**Post date:** [February 6, 2024, 7:51pm UTC](https://discourse.vtk.org/t/vtkpolygon-concave-rendering-bug/13251/6 "2024-02-06T19:51:01Z")

</div>

Thanks! Looking further at it appears you may be right, and I got fooled by it, i.e. `vtkGeometryFilter` appears to be working as intended as well.
