将文本转换为网格

Converting text to mesh

本文关键字:网格 转换 文本      更新时间:2023-10-16

我需要将文本(字符串+字体)转换为网格(顶点、索引、三角形等),但我不需要绘制任何内容。我只需要从一个API中获取一个字符串,并将其推送为顶点&索引到另一个。做这件事最简单/最容易/最好的方法是什么?字体度量和文本放置当然是可用的,不需要其他转换。

我目前正在使用VC++。然而,任何类型的开放源码(C/C++、C#、VB…)和"非开放但免费"的COM/.NET库都是很棒的。

我听说过FreeType。它是否回应了我的祈祷,还是有更好的东西?

编者按:正如NicoSchertler评论的那样,DirectX库中似乎有Mesh.TextFromFont函数可以起到这个作用。谢谢你,尼科!当我有时间在练习中测试这一点时,我会更新。

Mesh.TextFromFont听起来不错,但它并没有拯救这一天,因为我不知道如何从网格对象中获得实际的点/三角形数据。

但后来我发现了这个。在这个项目中,GraphicsPath用于从字形创建点路径。然后将点覆盖到多边形中,然后使用Poly2Tri将多边形镶嵌到三角形中。

快速浏览源代码,经过一些小的修改和代码剥离,我最终得到了一个很好的.NET-dll,它有一个简单的静态函数,可以完成我需要的一切。

要将文本转换为网格,可以使用ttf2mesh库。这个库只包含一个C文件,允许打开truetype字体(.ttf)并将其字形转换为二维或三维空间中的网格对象。存储库中有一个示例。一个有趣的特性是不依赖任何第三方库(如libfreetype)。此外,在示例中还有一个ttf2obj程序,它允许您将字体文件转换为OBJ文件。