Lar*_*ert 2 c++ opengl freetype
我坚持使用FreeType渲染文本.特别是非ascii chars让我头疼.经过一些试验和错误,我设法渲染了一些文字,但我的变音符号没有显示:
std::string text = "Hauptmenü";
for(std::string::iterator it = text.begin(); it != text.end(); ++it) {
std::cout << *it;
FT_Face face = loadFace(faceName);
FT_Set_Pixel_Sizes(face, 0, fontSize);
if(FT_Load_Char(face, *it, FT_LOAD_DEFAULT)) {
std::cout << "Could not load character '" << character << "'" << std::endl;
}
FT_Get_Glyph(face->glyph, &glyph);
FT_Glyph_To_Bitmap(&glyph, FT_RENDER_MODE_NORMAL, 0, 1);
//render the glyphs to screen and so on
}
Run Code Online (Sandbox Code Playgroud)
加载字体,获取字形等基本上是有效的,但是'ü'不会被渲染.这是我的输出看起来像:

除"ü"之外的所有字符都会显示出来!

这最终会出现在我的控制台中,所以我猜我对字符串的迭代肯定是错的,因为'ü'被分成两个字符.我得到的最后两个字符的字形位图都是宽度和高度0.
我怎样才能解决这个问题?
阅读本文:http: //www.joelonsoftware.com/articles/Unicode.html
使用此:http: //www.pango.org/
您似乎对文本表示和渲染有一些误解(您使用放弃软件"检查"文本输出显示它).幸运的是Joel在描述这个问题方面做得非常不错:http://www.joelonsoftware.com/articles/Unicode.html
FreeType能够解析True Type文件,并渲染存储在文件中的字形.它不是一个成熟的文本渲染引擎.您使用的字体可能甚至没有渲染所需字符所需的字形,您可能需要组合不同的字形以产生所需的输出.
当然,您不会自己实现整个Unicode渲染逻辑,这是一项艰巨的任务.如果你想在它上面抛出"text"并让它渲染,你必须使用更高级别的东西.至少HarfBuzz,或者其中的东西,比如Pango或Qt.在SDL_Pango库中可以看到有关如何使用Pango + FreeType的一个很好的示例.