遍历由连接三角形组成的多边形的边界点

时间:2010-01-19 09:17:14

标签: geometry 2d

我有一个由连接三角形组成的二维多边形网格,如下所示:

  • 顶点数组V = A, B, C, D, E, ...
  • 索引数组,逆时针顺序为3的三角形顶点索引:I = 0, 4, 3, ...
    (例如,V[0], V[4], V[3] A-E-D形成一个三角形)

http://img694.imageshack.us/img694/8968/meshg.png 示例网格

现在我想遍历逆时针顺序中的边界点,起始顶点无关紧要:
G, H, A, D, C, F

原因是我想计算动态2D阴影,如本文所述:http://www.gamedev.net/reference/programming/features/2dsoftshadow/page3.asp

这是最好的方法吗?我想过计算一个凸包,但这看起来太贵了,因为它没有使用三角形顶点索引,必须有更好的方法。

有没有办法让它在一个表示中的几个多边形工作,这样我就可以获得每个连接多边形的边界点列表列表?

谢谢,abenthy

1 个答案:

答案 0 :(得分:4)

这是一种方式:

  1. 找到边界边缘,这是通过遍历三角形的所有边缘并移除出现两次的所有边缘来完成的(因为除边界边缘以外的所有边都由两个三角形共享)(另请记住(A, B)是与(B, A))相同的边缘。
  2. 您现在有一个边界边列表。从其中一个开始,然后连续循环遍历其余边缘,直到找到一个已连接的边缘,追加此边缘并将其从列表中删除。重复,直到边界关闭。
  3. 由于三角形是逆时针方向,因此计算出的边界也是逆时针方向。这种方法很好,因为它不需要顶点的实际位置,它只使用索引指定的拓扑。