在我的应用程序中,FTGL呈现真实类型字体的unicode字符除了复合字符。复合字符是unicode辅音和元音声音的组合。
例如,在标记语言Tamil中,以下字符串输入
"காகிகுகூகெகேகைகொ கோ கௌ"
显示为
在 openGL查看器。
某些字符的输出与输入不同。
有人可以提供帮助吗?
我的代码段,
std::ifstream fontFile("latha.ttf", std::ios::binary);//tamil unicode font
if (fontFile.fail())
return NULL;
fontFile.seekg(0, std::ios::end);
std::fstream::pos_type fontFileSize = fontFile.tellg();
fontFile.seekg(0);
unsigned char *fontBuffer = new unsigned char[fontFileSize];
fontFile.read((char *)fontBuffer, fontFileSize);
FTBitmapFont* m_pFTFont = new FTBitmapFont(fontBuffer, fontFileSize);
m_pFTFont->Render("கா கி கீ கு கூ கெ கே கை கொ கோ கௌ");
答案 0 :(得分:1)
欢迎来到“complex text layout”的精彩世界。享受您的住宿;)
简而言之,使用复杂文本布局的脚本在Unicode代码点和要渲染的字形之间没有简单的1:1映射。泰米尔人就是这样一个剧本。
FTGL只处理具有简单布局的脚本,因为复杂的文本布局是复杂(非常如此)。因此,它无法正确复制泰米尔语脚本。
您需要使用Harfbuzz之类的布局引擎来布局文本。 FTGL仍然可以渲染脚本,但是你需要Harfbuzz来告诉你要呈现的字体中的哪些字形。