我正在尝试为任何已安装的 truetype 字体创建一个转换库,将其转换为一系列可用于在 OpenGL 中显示文本的多边形。我使用 GetGlyphOutline 函数将字形转换为一系列轮廓,然后使用 glu 库对这些轮廓进行三角剖分(镶嵌)。
它通常有效,但并非总是有效,并且有一些奇怪的例外。GetGlyphOutline 应该首先以 CW 缠绕顺序返回外部轮廓,并以 CCW 缠绕顺序返回内部轮廓(孔)。不幸的是,根据字体和字形,情况并非如此。有时外轮廓是逆时针缠绕顺序,孔是顺时针,或者虽然缠绕顺序是正确的,但 GetGlyphOutline 返回的轮廓顺序是错误的(例如,我先得到“孔”,然后是外轮廓)。
我尝试调整转换以检查这些奇怪的情况,如有必要,颠倒轮廓的顶点和缠绕顺序,但似乎没有规则,如果一个带有 1 或 2 个孔的字符可以使用几种字体,我总是找到一个例外。例如,使用名为 MinionPro-BoldCn 的字体,即使是数字“8”的字形也由 GetGlyphOutline 返回错误,我最终只得到一个孔而不是两个孔。
我还尝试使用另一种方法而不是 GetGlyphOutline。我使用 GDI 将文本渲染到路径中,然后使用 GetPath 函数获取该路径的轮廓。结果是一样的。在某些字体中,GetPath 返回的某些字符具有错误的轮廓顺序和/或错误的缠绕。
有没有人有这方面的经验,有什么我能做的吗?