2011-05-03 70 views
0

我希望使用freetype库在我的openGL ES应用程序中加载unicode字体。我最初考虑使用Arial Unicode MS,但它太大了,大约24 MB。在OpenGL ES应用程序中加载unicode字体

是否有其他的unicode字体可用更小的尺寸?我也明白,其他一些unicode字体可能不足以解决我的问题。有没有其他方法可以解决我的问题?

+0

不是直接回答,因此留下评论。以前我所做的是为此使用位图字体。这使我只能包含游戏内文本所需的特定Unicode字符。如果您有动态文本(即名称条目),这可能不合适。 – InsertWittyName 2011-05-03 19:29:15

回答

1

我认为你指的是纹理映射字体。正如你已经知道的那样,一个完整的Unicode字体消耗了相当多的空间。但是,改变字体并不会产生任何影响,因为内存需求不依赖于字体,而是字形渲染到纹理图集的分辨率乘以包含在集合中的字形数量。

尽管纹理映射字体对于只包含有限字形(拉丁语,西里尔语,希腊语,韩语,阿拉伯语)字母的可行选项,但如果要支持完整的国际化,它会变得相当笨拙。

有两个相当大的选择:

  1. 扫描文本,显示了所需的所有字形,只渲染和上传者;对于汉字和类似的大型脚本来说,这种情况不会那么好。

  2. 使用FreeType和一些布局库(Pango或类似的)渲染整个文本到缓冲区。

我推荐使用灰度抗锯齿的3倍屏幕分辨率进行渲染。然后使用像素对齐的滤镜遮罩纹理进行调制,或使用片段着色器实现子像素抗锯齿。

有可能的第三种方法,但我到目前为止从未实现它:矢量纹理。本质上,您在片段着色器中实施抗锯齿样条曲线扫描程序,并通过采样器提供样条曲线参数;这允许使用GPU加速渲染清晰的文本。

+0

感谢datenwolf的详细解释。我赞赏这些建议。它是一个非常有趣的问题,我希望有一个有趣的解决方案。 – 2011-05-06 17:50:47