0

编辑:我写的是 GL_POLYGONS 而不是 GL_TRIANGLES,对不起

我有一个由 2 条连接的贝塞尔曲线组成的形状。我正在尝试使用 GL_TRIANGLES 关于内部点来填充它。结果如下:

在此处输入图像描述

右边是通过 GL_LINE_STRIP 显示的实际形状。
左边是 GL_TRIANGLES 以三角形方式给出点后的结果。

如您所见,弯曲的形状已经消失,取而代之的是(几乎)直边。

知道如何解决这个问题吗?或者也许是填充这些形状的更好方法?

4

1 回答 1

3

提供给的东西GL_POLYGON必须是凸的。你的对象是凹的。

如果你知道如果从一个方向接近你的形状总是会显得凸出——例如,对于你的形状,我可以肯定地说任何水平线都会恰好碰到两个边界——那么你可以把它当作三角形带来接近。

如果您事先对多边形一无所知,则需要研究镶嵌,这是用于将任意多边形减少为覆盖相同区域的凸多边形列表的任意数量的算法。GLU 包含一个 tesselator,这里描述了它的简单使用。如果您想实现自己的算法,维基百科关于三角测量的文章巧妙地总结了最流行的算法,如果您的平台还没有 GLU,Mesa 提供了 GLU 的开源实现。

于 2013-10-04T23:06:41.823 回答