2010-02-08 27 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的字形。