我目前正在关注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语言?
答案 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 **作为打印函数中的参数),允许使用非英语语言。