【问题标题】:Problem rendering non-English unicode text using freetype font on OpenGL在 OpenGL 上使用 freetype 字体渲染非英语 unicode 文本时出现问题
【发布时间】:2011-01-14 06:22:43
【问题描述】:

我目前正在学习 NeHe 教程第 43 课 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43)。该代码仅适用于英文文本,而不适用于 Unicoded 语言。幸运的是,我通过 NeHe 第 43 课到http://www.cs.northwestern.edu/~sco590/fonts_tutorial.html 的链接找到了另一个相同的教程示例,只有一个区别:它使用 w_char,并且该网站声称您可以在英语以外的语言上运行。

所以我试一试:

freetype::print(our_font, 320, 200, (unsigned short*)L"Active FreeType Text หกโด้กี่ดุ öáæé おはよ。- %7.2f", cnt1);

命名空间 freetype 的函数 print 的第 4 个参数为 *const unsigned short** 所以我对其进行了类型转换。我还在双引号字符串前面放了一个 L 表示长字符,并放入一些亚洲字符用于测试目的。

结果是所有的英文文本都可以正常显示,但是所有的泰文字符都变成了“[]B[]I[]5H[]8”。 [] 是方框。据我了解,这意味着该字体没有指定的语言,所以我尝试了其他字体,但所有其他泰语字体都给出了这些相同的方框。对于日文字体,也是如此。所有方框以及旁边的一些英文字符。子字符串 öáæé 渲染得很好,没有任何问题。

我在这里忘记了什么吗?我们如何在这里显示非英语的 Unicode 语言?

【问题讨论】:

  • 你能链接你的 NeHe 链接吗?

标签: opengl unicode fonts freetype asianfonts


【解决方案1】:

看起来第 43 课中的 print() 甚至无法使用 Unicode。 NeHe 所做的只是为前 256 个 ASCII 字符创建 256 个显示列表,不接受 UTF8 字符串并将其转换为 FreeType 的 UTF32。

this 音译成 C++ 对我来说效果很好。

另外,获取GNU Unifont 的副本,以确保您拥有所有BMP 的字形。

【讨论】:

    【解决方案2】:

    幸运的是,作者在他的网站上上传了他的教程的修改版本(在问题中指定)并使用 wchar_t (在原始版本中,作者使用 *const unsigned short** 作为打印函数中的参数),它允许使用非英语语言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多