在OpenGL上使用freetype字体渲染非英语unicode文本时出现问题

时间:2010-02-08 06:30:21

标签: opengl unicode fonts freetype asianfonts

我目前正在关注NeHe教程第43课(http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43)。该代码仅适用于英文文本,而不是单编码语言。幸运的是,我按照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 将第四个参数作为* const unsigned short **,所以我对它进行了类型化。我还在长引号字符串前面加了一个L作为长字符,然后输入一些亚洲字符进行测试。

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

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

2 个答案:

答案 0 :(得分:2)

看起来第43课中的print()甚至没有任何接近Unicode的功能。所有NeHe正在为前256个ASCII字符创建256个显示列表,不接受UTF8字符串并将其转换为UTF32 for FreeType。

this音译为C ++对我来说非常有用。

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

答案 1 :(得分:2)

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