  | 
  
    
Submitted by , posted on 09 May 2002
   | 
    | 
 
 
 
 
  
Image Description, by 
  
  
This is a program I wrote to test two algorithms for reducing polygons to 
triangles. The algorithms will work for any convex polygon with three or more 
sides. The images on the top show two algorithms used on the same polygon, 
and the images on the bottom show the results of a million-sided polygon with 
the first algorithm (although the low resolution hides a lot of edge detail) 
and the progress of the recursive processing. I came up with these algorithms 
for a model converter for the game I'm working on.
  
Both algorithms have the same input: a list of vertices. The vertices must be 
in order, and both algorithms will produce triangles with the same winding as 
the original polygon if used properly. If you want to implement one of them, 
I found it very convenient to make a copy of the first vertex at the end of 
the list.
  
The first algorithm is the "recursive edge" algorithm. It works by making 
triangles around the edge (vertices 1 to 3, 3 to 5, etc), making a list of 
the endpoints of those triangles and any unused vertices, and calling itself 
again on that list. In this program, it changes color each time it recurses - 
as you can see, it takes three levels to process a 10-sided polygon. The 
million-sided polygon looks like it only takes 4 levels, but that's because 
it only cycles through 4 colors - it really takes 19 levels of recursion to 
process.
  
The second algorithm basically produces a triangle strip. This one is much 
simpler: it takes the first vertex to start off the triangles, then splits 
the rest of the list in two. The first list is vertices 2 to (n / 2) + 1, and the 
second list is vertices n to (n / 2) + 2.  After starting off with the first 
vertex from each list, it alternately takes vertices from each list to make a 
"triangle strip". It changes colors at each triangle, so you can see the 
progress.
  
The full source code of the program and a readme with more detail are 
available at http://www.collapsarcreations.com/dl.php, at the bottom. I wrote 
it in Linux, but since it uses GTK it shouldn't be too hard to compile in 
Windows.
  
 | 
 
 
 
  
 
 |