0

在我的应用程序中,FTGL 可以很好地呈现真字体的 unicode 字符,但复合字符除外。复合字符是 unicode 辅音和元音的组合。

例如,在印度语言泰米尔语中,以下字符串输入

“கா கி கீ கு கூ கெ கே கை கொ கோ கௌ”

显示为

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("கா கி கீ கு கூ கெ கே கை கொ கோ  கௌ");
4

1 回答 1

2

欢迎来到“复杂文字排版”的精彩世界。入住愉快 ;)

简而言之,使用复杂文本布局的脚本在 Unicode 代码点和要呈现的字形之间没有简单的 1:1 映射。泰米尔语就是这样一个脚本。

FTGL 只处理具有简单布局的脚本,因为复杂的文本布局很复杂(​​非常复杂)。所以它不能正确地重现泰米尔语脚本。

您将需要使用像Harfbuzz这样的布局引擎来布局您的文本。FTGL 仍然可以渲染脚本,但您需要 Harfbuzz 告诉您要渲染字体中的哪些字形。

于 2016-02-24T15:28:41.410 回答