将凸路径转换为三角形列表

时间:2013-12-24 11:22:11

标签: c++ opengl

将凸路径(它在点集中描述)转换为要在opengl渲染中使用的三角形列表的最佳方法是什么。我认为最好的东西是示例代码或演示:)谢谢!

2 个答案:

答案 0 :(得分:1)

听起来你正在寻找众多“将多边形转换成一系列三角形”的解决方案之一:

也许其中一个内容会有所帮助:

如果你想了解这些概念,前两个是一个好的开始。 如果您需要实现,请从第三个开始。

这有用吗?

答案 1 :(得分:0)

如果您的多边形真的是凸面而不是凹面,则可以将其绘制为三角形扇形。这是有效的。

这是我几年前写的另一种递归算法。它还对凹多边形进行三角剖分,平均产生更好的三角剖分(例如,更少的条子多边形):

void ConcaveTesselator (unsigned a_NumVertices)
{
  unsigned left[32];     // enough space for 2^32 recursions:
  unsigned right[32];    
  unsigned stacktop = 0;

  // prepare stack:
  left[0]  = 0;
  right[0] = a_NumVertices-1;
  stacktop = 1;

  while (stacktop)
  {
    unsigned l,r,m;

    // pop current interval from the stack and subdivide:
    stacktop--;
    l = left[stacktop];
    r = right[stacktop];
    m = (l+r)>>1;

    // replace this with your triangle drawing function
    // or store the indices l,m,r and draw the triangles 
    // as a triangle list later:

    DrawTriangleWithIndices (l,m,r);

    // recursive subdivide:
    if (m-l > 1) 
    { 
      left[stacktop]  = l; 
      right[stacktop] = m; 
      stacktop++; 
    } 
    if (r-m > 1) 
    { 
      left[stacktop]  = m; 
      right[stacktop] = r; 
      stacktop++; 
    }
  }
}