我的渲染引擎需要哪些基本原语来支持绘制 OTF 字体?
Posted
技术标签:
【中文标题】我的渲染引擎需要哪些基本原语来支持绘制 OTF 字体?【英文标题】:What basic primitives my render engine needs to support for drawing OTF fonts? 【发布时间】:2021-12-09 17:44:27 【问题描述】:我正在为一个非常具体的用例编写自己的渲染引擎,我需要能够绘制文本。起初,我认为创建自己的字体文件会更容易,我可以使用我的引擎支持的原语手动定义每个字符,但一段时间后,我认为也许可以使用标准化的矢量字体格式比如OTF。
目前,我可以渲染:
点 行 圆线/实心圆 三角形所以在开始编码之前,首先我想知道 OTF 是由什么构成的(我需要在我的项目中添加哪些基本原语来渲染这些字体)。
【问题讨论】:
【参考方案1】:OpenType 规范使用矢量格式来描述字形轮廓。支持两种不同的矢量格式:
TrueType 轮廓使用二次贝塞尔曲线。有关概述,请参阅here。 Apple's TrueType spec 提供有关二次贝塞尔曲线的更多详细信息。 TrueType 轮廓存储在'glyf' table 中。
Compact Font Format 基于 PostScript,使用各种绘图命令并使用三次贝塞尔曲线绘制曲线。 CFF 轮廓存储在'CFF ' 或'CFF2' 表中。在图形基元方面,CFF 和 CFF2 格式具有可比性。
您需要实现扫描转换,以确定给定尺寸“开启”的像素。
您还需要处理提示。对于 TrueType,这就像实现一个小型图灵机,它可以解释来自字体文件的操作码和数据,并管理一个堆栈以在扫描转换之前调整轮廓。
您可能会发现FreeType 项目有助于了解需要什么。或者,您可以节省大量时间,只使用 FreeType。
【讨论】:
以上是关于我的渲染引擎需要哪些基本原语来支持绘制 OTF 字体?的主要内容,如果未能解决你的问题,请参考以下文章