2010-05-06 146 views
1

我已经从truetype文件中转储了字形,所以我可以和它们一起玩。它们具有由二次贝塞尔曲线和线构成的形状轮廓。我想输出这些形状的三角形,以便我可以将它们呈现给用户。将简单多边形的轮廓样条轮廓线转换成简单的多边形

传统上,我可能会使用libfreetype或scan-rasterise这种轮廓。但是我想从字体中生成挤出的3D网格物体,并使用它们进行其他变形。

那么,如何多边形化由二次贝塞尔曲线和线组成的形状?有许多轮廓一起形成了形状。一些轮廓是可加的,而其他轮廓是可减的。轮廓从未打开过。它们形成一个循环。 (实际上,我只从ttf字形获得轮廓顶点,这些顶点定义它们是否是曲线的一部分,尽管很容易将它们分解成贝塞尔曲线和线,但知道这些数据是这样表示的可能有助于将轮廓多边形化为三角形)

+0

您想将贝塞尔映射到三角形吗?这很难想象。 – 2010-05-06 16:12:46

+0

这都是近似值。有可能我会在应用算法之前将贝塞尔段转换为线,尽管我在此描述了它,希望有人比我现在正在使用的算法有更好的算法。 – Cheery 2010-05-06 17:26:40

回答

0

这很简单。你需要在你的曲线上实现布尔运算,然后通过简单地连接一对曲线来完成一条曲线。

首先,您需要评估曲线并将它们转换为折线。

然后,您需要确保在两个轮廓相交的每个位置都有一个顶点(由于数字错误,此零件实际上可能正在尝试;您可以使用the Bentley-Ottmann algorithm)。

最后,您只需遍历曲线并按正确顺序连接它们以执行布尔操作,即可生成weakly simple polygons

这样的多边形可以使用例如三角形进行三角测量。 ear clipping algorithm(这很慢,但实现起来很简单)。

希望这会有所帮助...