实际上,我正在开发一个渲染器,它可以将freetype字形转换为折线来控制激光打标系统。我遇到的问题是,我不知道如何正确地处理从曲线点开始的轮廓(99.9%从曲线点开始!)。我已经搜索了很长一段时间,但我找不到任何有用的信息。
谢谢你的帮忙
发布于 2015-07-07 16:01:33
FreeType使用三种类型的点:曲线上,二次控制点(也称为‘圆锥’)和三次控制点。将二次控制点与其两侧的曲线上点分组,以形成定义二次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. */https://stackoverflow.com/questions/3465809
复制相似问题