使用FTGL

时间:2016-02-24 15:04:37

标签: c++ opengl unicode combinations ftgl

在我的应用程序中,FTGL呈现真实类型字体的unicode字符除了复合字符。复合字符是unicode辅音和元音声音的组合。

例如,在标记语言Tamil中,以下字符串输入

"காகிகுகூகெகேகைகொ கோ கௌ"

显示为

"tamil compound characters in openGL"

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

1 个答案:

答案 0 :(得分:1)

欢迎来到“complex text layout”的精彩世界。享受您的住宿;)

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

FTGL只处理具有简单布局的脚本,因为复杂的文本布局是复杂(非常如此)。因此,它无法正确复制泰米尔语脚本。

您需要使用Harfbuzz之类的布局引擎来布局文本。 FTGL仍然可以渲染脚本,但是你需要Harfbuzz来告诉你要呈现的字体中的哪些字形。