[vtkusers] Artifacts when displaying non convex polygons

Randy Heiland heiland at ncsa.uiuc.edu
Thu Jul 12 14:56:04 EDT 2001


Yes indeed - there seems to be something screwy here.  A bit more debugging
reveals that down in vtkOpenGLPolyDataMapper, it simply attempts to draw this
polygon using  glBegin(GL_POLYGON), and according to the OpenGL Pgming Guide,
this polygon must be convex.

So it would seem that either the VTK doc for vtkPolygon is incorrect, or there
is some missing triangulation step, or your/my version of VTK is out-of-date
and this problem has been fixed.

--Randy

On Jul 12, 10:03am, Jose Paulo Moitinho de Almeida wrote:
> Subject: [vtkusers] Artifacts when displaying non convex polygons
>
> Hello
>
> When I was investigating some artifacts that I got when rendering polygons I
> reduced my doubt to the following questions:
>
> 1) The manual says "vtkPolygon is a concrete implementation of vtkCell to
> represent a 2D n-sided polygon. The polygons cannot have any internal holes,
> and cannot self-intersect." Thus I was expecting that the code attached would
> draw "approximatelly" two triangles like this (note that points 2 and 5 are
> close, but are not coincident):
>
>  /|
>  ---
>   |/
>
>
> Instead it draws:
>
>  /|
>   --
>  \ /
>
> Is this a problem (when rendering?) or am I doing something wrong?
>
> 2 ) If I merge points 2 and 5 is it a "legal" polygon? The sides touch, but
> do not cross, strictly that is intersecting, but....
>
>
> Regards
>
>
> Notes:
>
> 1) When I was looking for the source of the problem I did some intersections
> and the result of intersecting the "ilegal" polygon with a plane is correct.
> That is why I am trying to blame the renderer.
>
> 2) If I change the order of the points to 2,3,4,5,0,1 the triangles are
> correctly displayed, even when the points are merged.
>
> --------------Cut here---------------------
> #!/usr/bin/env python
> import os
>
> from libVTKCommonPython import *
> from libVTKGraphicsPython import *
> from libVTKImagingPython import *
>
> ren = vtkRenderer()
> renWin = vtkRenderWindow()
> renWin.AddRenderer(ren)
> renWin.SetSize(400,400)
>
> iren = vtkRenderWindowInteractor()
> iren.SetRenderWindow(renWin)
>
> points = vtkPoints()
> points.SetNumberOfPoints(6)
> points.InsertPoint(0,0,0,0)
> points.InsertPoint(1,1,1,0)
> points.InsertPoint(2,0.1,1,0)
> points.InsertPoint(3,0,2,0)
> points.InsertPoint(4,-1,1,0)
> points.InsertPoint(5,-0.1,1,0)
>
> polygon = vtkPolygon()
> polygon.GetPointIds().SetNumberOfIds(6)
>
> polygon.GetPointIds().SetId(0,0)
> polygon.GetPointIds().SetId(1,1)
> polygon.GetPointIds().SetId(2,2)
> polygon.GetPointIds().SetId(3,3)
> polygon.GetPointIds().SetId(4,4)
> polygon.GetPointIds().SetId(5,5)
>
> polygonGrid = vtkUnstructuredGrid()
> polygonGrid.Allocate(1,1)
> polygonGrid.InsertNextCell(polygon.GetCellType(), polygon.GetPointIds())
> polygonGrid.SetPoints(points)
>
> polygonMapper = vtkDataSetMapper()
> polygonMapper.SetInput(polygonGrid)
>
> polygonActor = vtkActor()
> polygonActor.SetMapper(polygonMapper)
>
> ren.AddActor(polygonActor)
>
> ren.ResetCameraClippingRange()
> renWin.Render()
>
> iren.Initialize()
>
> iren.Start()
>
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at:
<http://public.kitware.com/cgi-bin/vtkfaq>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers
>-- End of excerpt from Jose Paulo Moitinho de Almeida






More information about the vtkusers mailing list