我正在尝试创建一个转换库,可以将任何安装的TrueType字体转换为一系列多边形,用于在OpenGL中显示文本。我使用GetGlyphOutline函数将字形转换为一系列轮廓,然后使用glu库对这些轮廓进行三角剖分(tesselate)。
这通常有效,但并非总是如此,存在奇怪的例外情况。GetGlyphOutline应该首先以CW绕序返回外轮廓,然后以CCW绕序返回内轮廓(洞)。不幸的是,根据字体和字形,情况并非如此。有时外轮廓以CCW绕序排列,而孔(内轮廓)则以CW绕序排列;或者虽然绕序正确,但GetGlyphOutline返回的轮廓顺序错误(例如,我首先获取“洞”,然后才是外轮廓)。
我尝试调整转换,以检查这些奇怪的情况,并在必要时反转轮廓的顶点和绕序,但似乎没有规则,如果某个字符带有1个或2个孔且在几种字体中运行良好,我总能找到一个例外情况。例如,使用名为MinionPro-BoldCn的字体时,即使数字“8”的字形也会被GetGlyphOutline错误返回,结果我得到的只有一个孔而不是两个。
我还尝试使用GetPath函数将文本渲染成路径,然后使用GetPath函数获取该路径的轮廓。结果是相同的。有些字体会以错误的轮廓顺序和/或错误的绕序返回GetPath函数的特定字符。
有没有人有相关经验,可以做些什么呢?
GetGlyphOutline()
更好。如果你在线,请给我回电! - user1655141