2012-07-16 42 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));