当轮廓上的第一个点偏离曲线时,如何解释freetype字形轮廓

时间:2010-08-12 08:08:45

标签: c++ linux render freetype outline

我实际上正在研究一种渲染器,它将freetype字形转换为折线以控制激光打标系统。我遇到的问题是我不知道如何正确处理从曲线点开始的轮廓(99.9%以曲线点开始!)。我现在已经搜索了很长时间的信息,但我找不到任何有用的东西。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

FreeType使用三种类型的点:曲线上,二次控制点(也称为“圆锥”)和立方控制点。二次控制点与它们两侧的曲线上的点组合在一起,形成定义二次Bézier样条曲线所需的三个点。三次控制点必须成对出现,并与两侧的曲线点分组,以构成三次Bézier样条曲线所需的四个点。

但是,只有二次点的简写符号。在二次点彼此相邻的情况下,在它们之间插入曲线上控制点。还有另一个约定,如果一个闭合路径以二次点开始,则检查路径的最后一个点,如果它是二次的,则在它们之间插入一个曲线上的点,并且路径开始于曲线上的点;如果最后一个点不是二次控制点,则它本身用作起始点。

如果您想确切了解如何完成此操作,请查看FreeType源代码。函数FT_Outline_Decompose遍历路径并将其转换为两种类型的一系列直线和曲线。它在这个文件中:

http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/src/base/ftoutln.c

特别感兴趣的部分从这个评论开始(再次注意'conic'与此上下文中的'quadratic'意思相同):

/* first point is conic control.  Yes, this happens. */