4

我有一个字符串,例如“Hello world”和一个字体名称,例如“Courier”。我需要得到一个代表这个字符串的折线数组。这些折线将在 OpenGL 场景中渲染。

我的意思是我需要将每个字母转换成一条或多条二维折线。

如何在 iOS 中执行此操作(Objective-C 或 C++)

4

2 回答 2

6

您可以使用 Core Text 从文本和字体中获取路径。有一个名为 Core Text 的方法CTFontCreatePathForGlyph,它将为您提供给定符号的给定字形的路径。使用它,您可以获得所有字形的路径。

你应该看看这篇关于“低级文本渲染”的文章。您还可以查看本文的示例代码,了解如何获取文本的路径(并使用 Core Animation 对其进行描边)。

您仍然需要将路径转换为折线(因为路径可能包含圆弧和曲线,而折线只是点列表)

于 2012-05-28T12:55:31.570 回答
1

FreeType 库支持加载各种字体文件(TrueType、PostScript 等)。FreeType 引擎可以加载字体并渲染到位图,但它也可以返回详细的字形信息。

您可以使用该FT_Outline_Decompose函数获取一个FT_Outline并将其分解为其组成的线、弧和曲线。您只需在一个结构中提供一系列函数指针,这些指针FT_Outline_Funcs将在大纲处理期间调用。这些函数由您定义,因此您可以简单地将它们转换为最适合您的应用程序的任何格式(例如折线)。

API参考:

请注意,如果您正在渲染不经常更改的大块文本,则在每一帧渲染和填充一系列曲线非常昂贵。通常的解决方案是选择一个点大小,将所有需要的字形渲染成一个纹理,然后使用纹理图集将字符串渲染成一个四边形。

一些有用的信息发布在关于字体的 OpenGL 常见问题解答之一中,尽管它们也谈到了使用 FreeType。纹理图集技术值得一读:

于 2012-05-28T13:09:32.000 回答