2010-02-08 72 views
3

我目前正在关注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,并且该网站声称您可以使用英语以外的语言运行。使用OpenGL上的freetype字体呈现非英文unicode文字时出现的问题

所以我给它一个尝试:

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

功能打印命名空间的FreeType有第四个参数为* const的无符号短**,所以我类型强制转换它。我还在长双字符的双引号字符串前放了一个L,并放入了一些亚洲字符用于测试目的。

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

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

+0

你能链接你的NeHe链接吗? – genpfault 2010-02-08 14:32:35

+0

按要求链接。 – Karl 2010-02-09 06:44:24

回答

2

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

2

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

转换成C++的对我来说工作得很好。

此外,请获取GNU Unifont的副本,以确保您具有所有BMP的字形。