Iphone 在OpenGL ES应用程序中加载unicode字体

Iphone 在OpenGL ES应用程序中加载unicode字体,iphone,android,opengl-es,fonts,Iphone,Android,Opengl Es,Fonts,我希望使用freetype库在我的openGL ES应用程序中加载unicode字体。我最初考虑使用Arial Unicode MS,但它太大了,大约24MB 还有其他更小尺寸的unicode字体吗?我也知道其他一些unicode字体可能不够小,无法解决我的问题。有没有其他方法可以解决我的问题?我想你指的是纹理贴图字体。正如您已经想到的,完整的Unicode字体会占用相当多的空间。但是,更改字体不会产生任何影响,因为内存需求不取决于字体,而是取决于分辨率,渲染到纹理图集的轮廓乘以包含在该集中的轮

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


还有其他更小尺寸的unicode字体吗?我也知道其他一些unicode字体可能不够小,无法解决我的问题。有没有其他方法可以解决我的问题?

我想你指的是纹理贴图字体。正如您已经想到的,完整的Unicode字体会占用相当多的空间。但是,更改字体不会产生任何影响,因为内存需求不取决于字体,而是取决于分辨率,渲染到纹理图集的轮廓乘以包含在该集中的轮廓数量

虽然纹理映射字体是字母表的一个可行选项,但只有有限的字形(拉丁语、西里尔语、希腊语、韩语、阿拉伯语),如果您想支持完全国际化,它会变得相当笨拙

有两个相当大的选择:

  • 扫描所有需要显示的字形的文本,只渲染和上传这些字形;对于汉字和类似的大型脚本,这个Ower将不能很好地工作

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

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


    第三种方法是可能的,但到目前为止我从未亲自实现过:矢量纹理。实际上,您在片段着色器中实现了一个抗锯齿样条线光栅化器,并通过采样器提供样条线参数;这允许使用GPU加速呈现清晰的文本。

    不是直接的答案,因此只能作为注释。我之前所做的是使用位图字体来实现这一点。这允许我只包含游戏中文本所需的特定unicode字符。如果您有动态文本(即名称输入),这可能不合适。感谢datenwolf的详细解释。我赞赏这些建议。这是一个非常有趣的问题,我希望有有趣的解决办法。