我的渲染引擎需要支持哪些基本原语才能绘制 OTF 字体?
What basic primitives my render engine needs to support for drawing OTF fonts?
我正在为一个非常具体的用例编写自己的渲染引擎,我需要能够绘制文本。起初,我认为创建自己的字体文件会更容易,我会使用我的引擎支持的原语手动定义每个字符,但过了一段时间后,我认为也许可以使用标准化的矢量字体格式例如OTF。
目前,我可以渲染:
- 点
- 行
- 圆形line/Filled圆形
- 三角形
所以在开始编码之前,首先我想知道 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。
我正在为一个非常具体的用例编写自己的渲染引擎,我需要能够绘制文本。起初,我认为创建自己的字体文件会更容易,我会使用我的引擎支持的原语手动定义每个字符,但过了一段时间后,我认为也许可以使用标准化的矢量字体格式例如OTF。
目前,我可以渲染:
- 点
- 行
- 圆形line/Filled圆形
- 三角形
所以在开始编码之前,首先我想知道 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。