2012-07-16 44 views
6

因此,我有一個解析xml的實現,其中包括維基百科主頁的位置和字符串。解析使用rapidxml完成​​,之後字符串由http://utfcpp.sourceforge.net/從UTF-8轉換爲UTF-32。然後在freetype中使用UTF-32代碼:FreeType中的Unicode麻煩

unsigned long c = FT_Get_Char_Index(face,*p); 
FT_Load_Glyph(face,c,FT_LOAD_RENDER); 

其中* p是UTF-32字符代碼。這個字形然後在OpenGL中渲染。

現在,我似乎無法獲得流行字符的工作,也沒有任何中文或日語或viet,我相信* p對應於正確的代碼,我會感謝任何我可以得到的指針。

對於這些字體使用微軟arial.ttf,從Arch linux package和我在字體查看程序中看到的,它應該包含我想要的字符。

回答

7

兩點建議:

首先,你有沒有叫FT_Select_Charmap指定您使用的是Unicode編碼?

FT_Select_Charmap(face , ft_encoding_unicode); 

其次,並不是所有的宋體字體具有的所有字符,有的字體觀衆(在Windows上,反正)可以通過從不同的面孔自動替換字形誤導。如果你能找到它,試試ArialUni.ttf

+1

謝謝您的建議!使用FT_Select_Charmap沒有產生任何不同的結果,我猜測unicode是freetype的默認值? 是否有任何免費的字體包含我期待的角色,你可以推薦? – 2012-07-16 10:08:54

+1

Re。字體,我會從這裏開始:http://en.wikipedia.org/wiki/Unicode_typeface - 還有一件事要檢查是在調用'FT_Get_Char_Index'之前斷點並檢查您傳遞的代碼點。使用rapidxml或utfcpp可能會有一個錯誤... – Roddy 2012-07-16 10:27:39

+1

Freetype的默認編碼取決於您使用的字體以及其他一些內容。我建議明確指定編碼。 – Roddy 2012-07-16 10:48:08

1

不要忘記在加載臉部後立即設置字體大小。

FT_Error err = FT_Set_Pixel_Sizes(face, (width), (height));