我的渲染引擎需要支持哪些基本原语才能绘制 OTF 字体?

What basic primitives my render engine needs to support for drawing OTF fonts?

我正在为一个非常具体的用例编写自己的渲染引擎,我需要能够绘制文本。起初,我认为创建自己的字体文件会更容易,我会使用我的引擎支持的原语手动定义每个字符,但过了一段时间后,我认为也许可以使用标准化的矢量字体格式例如OTF。

目前,我可以渲染:

所以在开始编码之前,首先我想知道 OTF 是由什么制成的(我需要向我的项目添加哪些基本原语来渲染这些字体)。

OpenType 规范使用矢量格式来描述字形轮廓。支持两种不同的矢量格式:

  • TrueType 轮廓使用二次贝塞尔曲线。参见 here for an overview. Apple's TrueType spec provides more details on the quadratic beziers. TrueType outlines are stored in a 'glyf' table

  • Compact Font Format,基于 PostScript,使用各种绘图命令,曲线使用三次贝塞尔曲线。 CFF 大纲存储在 'CFF ' or 'CFF2' table 中。在图元方面,CFF和CFF2格式不相上下。

您需要实施扫描转换,以确定对于给定尺寸“打开”的像素。

您还需要处理提示。对于 TrueType,这就像实现一个小型图灵机,从字体文件中解释操作码和数据,并管理堆栈以在扫描转换之前调整轮廓。

您可能会发现 FreeType 项目有助于理解需要什么。或者,您可以节省很多时间而只使用 FreeType。