在OpenGL中使用freetype字体呈现非英语Unicode文本的问题

3
我目前正在跟随NeHe教程43课程(http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43)。该代码仅适用于英文文本,而不适用于Unicode语言。幸运的是,我从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);

函数freetypeprint命名空间有第四个参数*const unsigned short**,所以我进行了类型转换。我还在双引号前面加了L来表示长字符,并添加了一些亚洲字符进行测试。
结果是所有英文文本都可以正常显示,但所有泰语字符都变成了"[]B[]I[]5H[]8"。[]是方框。据我所知,这意味着字体没有指定的语言,所以我尝试了其他字体,但所有其他泰语字体都会产生相同的方框。对于日文字体也是一样。所有方框旁边都有一些英文字符。子字符串öáæé可以正常渲染而没有任何问题。
我有什么遗漏吗?如何在此处显示非英语Unicode语言?

你能把你的 NeHe 链接变成链接吗? - genpfault
2个回答

2
看起来第43课中的print()函数根本不支持Unicode。 NeHe所做的只是为前256个ASCII字符创建256个显示列表,而不接受UTF8字符串并将其转换为UTF32以供FreeType使用。
此网站翻译成C++对我来说效果很好。
此外,获取GNU Unifont的副本,以确保您拥有所有BMP的字形。

2

幸运的是,作者在他的网站上上传了一份修改过的教程(指在问题中指定的网站),并且它使用wchar_t(在原始版本中,作者在打印函数中使用*const unsigned short **作为参数),这使得非英语语言可以被支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接