i have an array of points and i want to create a polygon out of it. the array is in completely wrong order, so that you can neither create a trianglestrip or a trianglefan out of it.
i have the following information:
- the planes normal
- each points world coordinates
- each points texture uv coordinates,
where the texture is a planar map.
does anyone know a method to order the points so that they create a correct looking trianglestrip?

# poylgon point ordering

Started by shadow_dancer, Jul 07 2001 10:35 PM

1 reply to this topic

Sponsor:

###
#2
Moderators - Reputation: **1361**

Posted 09 July 2001 - 05:32 AM

Are the points all planar? (You suggest that they are since you say you have "the planes normal.)

In that case, you can break your problem into the following steps:

1) Find the convex hull around the arbitrarily arranged points. (more later on this). Here is some software that can be used to find the convex hull: http://www.geom.umn.edu/software/qhull/.

2) Triangulate the interior points to generate triangles on the interior of the polygon mesh. I suggest performing a Delauney triangulation, which generates the *nicest* triangles (e.g., triangles are as close to equilateral as possible). Here is some software that can be used to do delauney triangulation: http://www.cs.cmu.edu/~quake/triangle.html.

3) Run the triangles through a stripifying utility to get triangle strips. See developers\programming resources area at www.nvidia.com for stripifying code (Their NvTriStrip library).

A good textbook reference for the first two steps is the following:

"Computational Geometry" by M. de Berg, M. van Kreveld, M. Overmars, and O. Schwarzkopf, published by Springer, ISBN 3-540-61270-X. Its really a very good book and easy to read and follow. Try finding it in a library first before you consider buying it.

Now, in step one I suggested finding the convex hull first. This gives the required boundary conditions for triangulation to triangles in step 2. BUT, you may not want your mesh to have a convex boundary. You may want it to be concave, and you may want there to be holes in the middle. To do this without more a priori knowledge of the topology of the mesh is *very* challenging, and I can only suggest that you do a thorough web search on words like "mesh reconstruction" or "topology reconstruction." You *can* always go through and specify the correct, concave boundary and interior holes by hand, just by visually recognizing the boundary, and then send that to the delauney triangulation. It would require that your delauney triangulation code be able to handle concave boundaries----not all do.

If the points are not planar, then at least you can project the points into a plane to define a projected version of the mesh. Really, you''re getting mesh topology here. Once you have the mesh connectivity in terms of a tri strip, go back and use the original unprojected (x, y, z) coordinates to get your tristripped, nonplanar mesh. It is sometimes tricky to find the best plane to project to, since if you project to the wrong plane the mesh will be folded on top of itself, making it impossible to find correct convex hull and tristrips. (You can find a 3D convex hull, but the triangulation is easier if you project.)

Hope this helps a bit!

Graham Rhodes

Senior Scientist

Applied Research Associates, Inc.

In that case, you can break your problem into the following steps:

1) Find the convex hull around the arbitrarily arranged points. (more later on this). Here is some software that can be used to find the convex hull: http://www.geom.umn.edu/software/qhull/.

2) Triangulate the interior points to generate triangles on the interior of the polygon mesh. I suggest performing a Delauney triangulation, which generates the *nicest* triangles (e.g., triangles are as close to equilateral as possible). Here is some software that can be used to do delauney triangulation: http://www.cs.cmu.edu/~quake/triangle.html.

3) Run the triangles through a stripifying utility to get triangle strips. See developers\programming resources area at www.nvidia.com for stripifying code (Their NvTriStrip library).

A good textbook reference for the first two steps is the following:

"Computational Geometry" by M. de Berg, M. van Kreveld, M. Overmars, and O. Schwarzkopf, published by Springer, ISBN 3-540-61270-X. Its really a very good book and easy to read and follow. Try finding it in a library first before you consider buying it.

Now, in step one I suggested finding the convex hull first. This gives the required boundary conditions for triangulation to triangles in step 2. BUT, you may not want your mesh to have a convex boundary. You may want it to be concave, and you may want there to be holes in the middle. To do this without more a priori knowledge of the topology of the mesh is *very* challenging, and I can only suggest that you do a thorough web search on words like "mesh reconstruction" or "topology reconstruction." You *can* always go through and specify the correct, concave boundary and interior holes by hand, just by visually recognizing the boundary, and then send that to the delauney triangulation. It would require that your delauney triangulation code be able to handle concave boundaries----not all do.

If the points are not planar, then at least you can project the points into a plane to define a projected version of the mesh. Really, you''re getting mesh topology here. Once you have the mesh connectivity in terms of a tri strip, go back and use the original unprojected (x, y, z) coordinates to get your tristripped, nonplanar mesh. It is sometimes tricky to find the best plane to project to, since if you project to the wrong plane the mesh will be folded on top of itself, making it impossible to find correct convex hull and tristrips. (You can find a 3D convex hull, but the triangulation is easier if you project.)

Hope this helps a bit!

Graham Rhodes

Senior Scientist

Applied Research Associates, Inc.