我的渲染引擎需要哪些基本原语来支持绘制 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 字体?的主要内容,如果未能解决你的问题,请参考以下文章

我的渲染技术进阶之旅基于Filament渲染引擎绘制一个不停旋转的彩色矩形

iOS 图像渲染原理

网络游戏是怎么开发的?

OpenGL图像渲染过程3.0

C++ DirectX 11 从第二个顶点缓冲区渲染问题

常用的BIM引擎都有哪些,分别有啥优劣?